מחשבים בנויים משני חלקים עיקריים: מעבד וזיכרון [1]. בפוסט קודם [2] תיארנו כיצד השימוש בהיררכיות זיכרון מאפשר למצוא איזון בין מחירי הזיכרונות לביצועי המחשב. אולם בעוד המעבדים ממשיכים להשתפר בקצב מהיר, מהירות הגישה לרכיבי הזיכרון אינה משתפרת בקצב דומה. נתאר את הבעיות המתעוררות ונעלה כמה כיווני פתרון, ואת הכול ילווה סיפור על פקיד בנק עמוס בעבודה.
הפוסט נכתב בשיתוף עם ידידי העמותה, רוני רונן ופרופ' שחר קוטינסקי
פקיד בנק חרוץ (המעבד) מקבל משימה לגרוע 1000 ש"ח מחשבון של לקוח. הוא ניגש למחסן (זיכרון המחשב), שולף את תיק הלקוח מהמגירה, מביא אותו למשרד, מפעיל מחשבון (יחידת החישוב), מחסר 1000 מהערך שבתיק, מעדכן אותו, ובהמשך יחזיר אותו למחסן.
רגע... הפקיד מוצא שהבאת התיק 'ממחסן לשולחן' אורכת 100 שניות, ואילו החישוב והעדכון אורכים 20 שניות בלבד. כלומר פעולת ההעברה מבזבזת כ-83% מהזמן. בזבוז משווע ממש, והמצב הולך ומחמיר: עם הזמן הפקיד מתמקצע ולומד לחשב במהירות גבוהה פי ארבעה. החישוב והעדכון אורכים כעת 5 שניות בלבד – שיפור נפלא של פי 4. אולם זמן הביצוע הכולל מתקצר בסה"כ מ-120 ל-105 שניות, כלומר שיפור צנוע מאוד של כ-14% בלבד – רק בגלל משך ההעברה הארוך ממחסן לשולחן, שלא השתנה.
הפקיד מוחה זיעה ממצחו וממשיך לעדכן עוד ועוד תיקים. היחס בין כמות האנרגיה שהוא משקיע בהעברה ממחסן לשולחן לכמות האנרגיה המושקעת בחישוב עצמו הוא עצום (האנרגיה המושקעת בהעברה מהזיכרון ליחידות החישוב גדולה לעיתים פי 1000 מהאנרגיה המושקעת בחישוב!). ידידנו הפקיד הוגה רעיון יצירתי: יש על שולחנו מקום לערמה קטנה של תיקי לקוחות. מכיוון שיש לקוחות שמושכים כסף בתדירות גבוהה, הוא חושב, כדאי להשאיר את תיקיהם על השולחן במקום להביא אותם שוב ושוב מהמחסן – כך יתקצר משמעותית זמן ביצוע הפעולה הכולל.
לענייננו: בסמוך ליחידת הביצוע במעבד שמים רכיב זיכרון קטן ומהיר – 'זיכרון מטמון' (Cache Memory) – המכיל נתונים נבחרים שכנראה עתידים להשתמש בהם בתכיפות. זמן ביצוע המטלה תלוי בהימצאותו של הנתון הדרוש בזיכרון המטמון. ובחזרה לבנק: אם כל תיקי הלקוחות הפעילים נמצאים כבר על השולחן (בזיכרון המטמון), יהיה זמן הביצוע הממוצע 5 שניות – זמן החישוב בלבד; אם חצי מהם נמצאים בזיכרון המטמון, יהיה זמן הביצוע 55 שניות בממוצע. אולם אם הגישות לזיכרון הן אקראיות, זיכרון המטמון לא יעזור כלל וזמן הביצוע ייוותר 105 שניות.
לקראת סוף השנה מקבל גיבורנו משימה חדשה: עליו להחסיר 1000 ש"ח (עמלה...) מכל לקוחות הבנק. משימה פשוטה, לכאורה, מכיוון שרשימת הלקוחות ידועה מראש. ושוב מבריק במוחו רעיון: במקום להביא תיק אחד בלבד בכל הליכה למחסן, הוא יביא בבת אחת תיקים רבים ממגירות סמוכות. אולם לדאבונו הוא מגלה שהתיקים גדולים וכבדים מכדי לשאת אותם, והוא מצליח להעביר רק ארבעה מהם בכל גיחה. לכן שיפור הביצועים בשיטה זו יהיה לכל היותר פי ארבעה. כלומר, הביצועים תלויים במקרים מסוימים גם בקצב העברת נתונים מהזיכרון, שהוא בדרך כלל מוגבל עקב מגבלות פיזיקליות כמו רוחב ערוץ התקשורת שבין המעבד לזיכרון.
ראינו, אם כן, את שלוש הבעיות של חיבור המעבד לזיכרון: השהייה (Latency) ארוכה במעבר הנתונים, שהופכת לדומיננטית יותר במעבדים מתקדמים ומהירים, בזבוז עצום של אנרגיה (Energy) במעברים בין הרכיבים, ומגבלות קצב העברת נתונים (Throughput) עבור יישומים הדורשים קצב העברה גבוה.
ואז נזכר גיבורנו המוכשר שיש במחסן חבורת מחסנאים האמונים על שליפת התיקים מהמגירות והחזרתם לשם (המעגלים המשמשים לקריאה/כתיבה לתאי הזיכרון), והוא מבחין שבמשך רוב הזמן הם פשוט מתבטלים... וכך צץ לו הרעיון הבא: הוא ילמד אותם לחשב חישובים פשוטים כאלו בעצמם! המחסנאים הרבים יוכלו גם לעבוד במקביל, וכך אולי יוכלו להחסיר את הסכום מכל לקוחות הבנק בבת אחת...
הרעיון להעביר משימות עיבוד פשוטות לרכיב הזיכרון עצמו (PIM – Processing In Memory) נהגה לראשונה בשנות ה-70, ונוסה בשילוב עם טכנולוגיות זיכרון סטנדרטיות כמו DRAM. אולם עקב מגבלות טכנולוגיות של הזיכרונות הסטנדרטיים לא זכו ניסיונות אלו להצלחה רבה בשטח. כיום נעשית פעילות ענפה באקדמיה ובתעשייה לפיתוח סוגי רכיבי זיכרון חדשים, ולחלקם אכן יש פוטנציאל לביצוע חישובים בעצמם[3].
בדרך כלל מדובר על שני סוגי חישובים בתוך רכיב זיכרון:
- שימוש ביחידות חישוב הנמצאות בסמוך לתאי הזיכרון (המחסנאים החכמים שיושבים ליד המגירות), המאפשרות לבצע חישובים בעת קריאה וכתיבה של נתונים מתאי הזיכרון.
- יכולת חישוב בתאי הזיכרון עצמם ('מדפים חכמים' המעדכנים אוטומטית את הערך בתיק המאוחסן בהם!) יכולת זו מתאפשרת בזכות טכנולוגיות זיכרון חדשות המאחסנות את המידע באופן שונה מזה שבזיכרונות הסטנדרטיים. חוקרים רבים עמלים כיום על בניית 'מדפים חכמים' כאלו, אך על כך נספר בפעם אחרת.
ביצוע החישובים ברכיב הזיכרון עצמו עשוי להקטין את זמן ביצוע מטלות, לחסוך אנרגיה ולאפשר חישוב מקבילי רחב [4] ("SIMD"), כמו החסרת 1000 ש"ח בו זמנית מתיקי לקוחות רבים. הפעילות המחקרית הנוכחית עוסקת גם בשיטות לניצול תכונות אלו. כמה מוצרים חדשניים כאלה כבר קיימים, כמו זיכרונות המאיצים בינה מלאכותית [3], אך ברור כי זוהי רק ההתחלה.
אנו מקווים שבעתיד הלא רחוק יוכל ידידנו הפקיד לעסוק במשימות מעניינות ומורכבות מבחינה חישובית, ולהשאיר את העבודה ה'שחורה', כמו גביית כסף מלקוחות, למחסנאים החכמים בתוך רכיבי הזיכרון. אלה יעשו זאת במהירות וביעילות, ויחסכו כמות רבה של אנרגיה.
ליווי מדעי: ולרי פרומקין
עריכה: חגי גלרנטר
מקורות והרחבות:
[1] אריכטקטורת פון-ניומן, ופוסט שלנו בעניין
[2] היררכיית זיכרון
[3] ביצוע חישובים בזיכרון תוך שימוש בטכנולוגיות זיכרון חדישות
[4] SIMD