בעבר הלא רחוק עסקו מתכנני המחשבים בעיקר בשיפור ביצועי המעבד. בשנים האחרונות שינה התחום כיוון, ובמקום להשתמש במעבד יחיד שמים כמה מעבדים, הנקראים "ליבות", על פיסת סיליקון, והמתכננים מחפשים דרכים לחברם כדי שיפעלו ביעילות. נתאר מימוש של שיטה הנקראת "טבעת" באמצעות משל על תכנון כבישים.
הפוסט נכתב בשיתוף ידידי העמותה, רוני רונן ויולי מנדלבלט
נדמיין שאנו מבקשים להקים על פיסת סיליקון פארק תעשייתי, המכיל מפעלי יצור (= מעבדים) ומחסנים לאחסון חומרי גלם ומוצרים מוגמרים (= זיכרונות). כדי לתפעל את הפארק נייסד שירות משלוחים להעברת חומרים בין המפעלים למחסנים. מטרתנו היא לתכנן את מערכת הכבישים בפארק לקבלת ביצועים מיטביים.
אולם מה הכוונה בביצועים מיטביים?
יש שני קריטריונים מרכזיים לביצועי כל מערכת. הראשון הוא זמן ההשהיה (latency): כמה זמן יקח לשליח להעביר מוצר גמור, לדוגמה פיצה עם אננס, מהמפעל למחסן, שבו מחכים לקוחות רעבים. הקריטריון השני הוא התפוקה (throughput), שהוא קצב הכנסת מוצרים מוגמרים למחסנים (למשל, מספר המוצרים לשעה). הקשר בין זמן ההשהיה לתפוקה מורכב ותלוי במצב המערכת, כי במשלוחי פיצה הביצועים נמדדים לפי הזמן מרגע ההכנה עד המסירה, ואילו באחסון סחורות שאינן מתקלקלות, למשל חפיסות של ופל לימון, מה שחשוב הוא קצב ההעברה הנדרש כדי לספק את הדרישה הגואה.
גם בעולם המחשבים יש אפליקציות שבהן זמן ההשהיה חשוב, למשל זמן טעינת אתר בדפדפן. לעומתן יש אפליקציות, למשל להצגת סרטונים, שבהן התפוקה חשובה, דהיינו מספר התמונות בשנייה. כיוון שאותו מחשב מיועד להריץ סוגים שונים של אפליקציות, המתכננים צריכים למצוא איזון בין הדרישות הסותרות. בנוסף, יש צורך להתחשב במגבלות שטח הסיליקון הזעיר כשמתכננים את החיבורים בין הליבות לזיכרונות.
נניח שאנו מבקשים למקם על פיסת סיליקון ארבע ליבות (= מפעלים) וארבע יחידות של זיכרון הקרוי זיכרון מטמון (= מחסנים), ולחבר ביניהם באמצעות קווי מתכת (= כבישים). אפשרות אחת היא לחבר ישירות כל יחידה לאחרת באמצעות קו כזה, ובסך הכול 28 קווים. אולם פתרון זה הוא יקר ולא יעיל, כי קשה לקבל נצילות גבוהה שתצדיק את ההשקעה. בעיה נוספת היא שעקב מגבלות בייצור שבבי סיליקון, פסי המתכת שעל הרכיב יכולים להיות רק מאונכים או מאוזנים, מה שמקשה יותר על החיבור. נתאר שיטה אחרת, טבעת ("ring"), שמשתמשים בה רבות.
חיבור טבעת [1] הוא שיטה מקובלת גם בתכנון כבישים. כביש טבעת הוא כביש היקפי, בדרך כלל כביש מהיר רב מסלולי ודו כיווני, המקיף עיר ומאפשר לעלות עליו או לרדת ממנו במקומות שונים, ולעבור מקצה לקצה בלי צורך לחצות את העיר. דוגמה מפורסמת היא כביש M25 שמקיף את לונדון.
גם במעבדים משתמשים בשיטה זו. נסתכל למשל על מפת הסיליקון של רכיב ותיק של אינטל, sandy-bridge, שתוכנן אגב בחיפה [2]. בשרטוט להלן נראה ארבעה מלבנים המייצגים ליבות ("מפעלי ייצור") הממוקמים במערב בשורה אנכית. נסמן אותם ב-P1 עד P4. מולם, במזרח, יש ארבעה בלוקים של זיכרונות ("מחסנים"), שנסמן אותם ב-M1 עד M4. כל שמונת הרכיבים מחוברים ביניהם בקווי תקשורת ממתכת הכוללים נתונים וסיגנלי בקרה בתצורה של טבעת. טבעת זו היא דו-כיוונית, כך שחצי מהקווים משמש לנסיעה בכיוון השעון, והחצי השני בכיוון ההפוך. מכיוון שאי אפשר לשים מתכות בצורה מעוקלת על הסיליקון, הטבעת בנויה בצורת מלבן צר וארוך.
נניח למשל שמפעל P1 הממוקם בצפון-מערב רוצה לשלוח חומרים למחסן M4 הממוקם בדרום-מזרח. השליח שנוסע בכיוון השעון מתחיל לנסוע צפונה וצריך לעבור בכמה רמזורים. ראשית הוא עובר את הרמזור P1 שבו הוא עולה על הטבעת. לאחר מכן הוא עובר רמזור בפניה מערבה, ורמזור בפניה דרומה (שניהם נבנו לאפשר מעבר אל ומחוץ לפארק). לאחר מכן הוא עובר בנסיעה דרומה את הרמזורים של המחסנים M1, M2, ו-M3 ומגיע לבסוף לרמזור בכניסה ל-M4. בסך הכול עבר השליח 7 רמזורים. אם השליח היה מחליט לנסוע נגד כיוון השעון, גם אז היה עובר 7 רמזורים. כלומר, אפשר לשלוח שליחים מ-P1 ל-M4 בשני הכיוונים עם אותה השהיה, ולנצל את כל הנתיבים בכביש. אכן, היתרון של טבעת הוא שאפשר להגיע לנצילות מקסימלית גם כשיש רק מפעל אחד פעיל. למשל, נניח שיש 6 נתיבים בכביש, ובכל נתיב נרשה רק לשליח אחד לשהות בקטע לפני כל רמזור. וכך, אם P1 מצליח להוציא 6 שליחים בכל מחזור של רמזור, הוא מגיע לנצילות המקסימלית של הטבעת.
לעומת זאת, אם נרצה לשלוח מוצרים מ-P1 ל-M1, שנמצא בצפון-מזרח, נסיעה בכיוון השעון תוביל ל-M1 אחרי 4 רמזורים, אבל 10 רמזורים לנסיעה בכיוון השני! האם משתלם לשלוח שליחים לשני הכיוונים? התשובה תלויה במצב התנועה ודרישות הביצועים: אם זמן ההשהיה חשוב, למשל במשלוחי פיצות חמות, או התפוקה הכוללת, למשל מילוי המחסן בחפיסות של ופל לימון. העסק מסתבך כאשר כל המפעלים עובדים והטבעת עמוסה וקרובה לקצה הקיבולת. במצב זה, צריכים להגביל את קצב הכניסה לטבעת, בדומה לרמזורים המגבילים את הכניסה לאוטוסטרדות. תכנון מאתגר!
הצגנו כאן דוגמה אחת לחיבור ליבות וזיכרונות. יש שיטות אחרות, למשל "Mesh", שנספר עליהם בעתיד. אולם אתם ודאי שואלים, למה התוכנה אינה מחליטה מראש היכן למקם את המחסנים? התשובה היא שבדרך כלל התוכנה אינה מודעת לחומרה ולמחסנים הללו, שהם זיכרונות זמניים ("זיכרונות מטמון"), שנבנו רק כדי להאיץ את החומרה. המחסן הקבוע נמצא בכלל מחוץ לפארק ("הזיכרון הראשי"), אבל זה כבר נושא לפוסט אחר.
הערות והרחבות:
[1] חיבור טבעת