לדלג לתוכן

ארכיטקטורת מעבד מוסברת בפשטות - מה באמת קורה בתוך השבב

כשמוכרים לכם מחשב, המספר שכולם מסתכלים עליו הוא הגיגהרץ. "המעבד הזה 5 גיגהרץ, הוא חזק יותר מהמעבד ההוא שהוא 3.5". זו אחת הטעויות הנפוצות ביותר שיש בהבנת מעבדים, ובעוד רגע תבינו בדיוק למה. אבל כדי להבין למה המספר הזה מטעה, קודם צריך להבין מה בכלל קורה בתוך השבב הקטן הזה שיושב לכם על הלוח האם.

מתוך מה מורכב מעבד בפועל

בגדול, לכל מעבד יש כמה רכיבים מרכזיים שעובדים ביחד. יש את יחידת הבקרה, ה-Control Unit, שהתפקיד שלה הוא לכוון את כל התהליך, כמו מנצח תזמורת שלא מנגן בעצמו אלא אומר לכל אחד מתי לפעול. יש את יחידת החשבון והלוגיקה, ה-ALU, שמבצעת בפועל את כל פעולות החישוב וההשוואה, חיבור, חיסור, השוואות בין ערכים וכדומה. יש רגיסטרים, תאי אחסון זעירים אבל מהירים להפליא שיושבים ממש בתוך המעבד עצמו, ומחזיקים את הנתונים שנמצאים בשימוש פעיל ממש עכשיו. ויש זיכרון מטמון, cache, שכבת ביניים מהירה בין המעבד לזיכרון הראשי, ה-RAM, שמטרתה לחסוך למעבד את הזמן היקר של פנייה לזיכרון האיטי יותר בכל פעם מחדש.

מחזור החיים של כל פקודה בודדת

כל פקודה שהמעבד מריץ, גם הפעולה הכי פשוטה שאתם כתבתם בקוד שלכם, עוברת ארבעה שלבים בסיסיים. קודם כל, תשלוף, Fetch: המעבד מביא את הפקודה הבאה מהזיכרון. אחר כך, פענוח, Decode: יחידת הבקרה מפרשת מה בדיוק הפקודה הזאת אומרת לעשות. לאחר מכן, ביצוע, Execute: ה-ALU או רכיב מתאים אחר מבצע בפועל את הפעולה. ולבסוף, כתיבה חוזרת, Writeback: התוצאה נשמרת חזרה, בדרך כלל לרגיסטר.

ארבעת השלבים האלה קורים שוב ושוב, מיליארדי פעמים בשנייה, וזה בעצם כל הסיפור ברמה הבסיסית ביותר.

איך מעבדים מודרניים מאיצים את המחזור הזה

לו זה היה נשאר ככה, מעבדים מודרניים היו הרבה יותר איטיים ממה שהם בפועל. שתי חדשנויות מרכזיות שינו את התמונה. הראשונה היא צנרת עיבוד, pipelining: במקום לחכות שפקודה שלמה תסיים את כל ארבעת השלבים לפני שמתחילים בפקודה הבאה, המעבד מתחיל לעבד כמה פקודות במקביל, כל אחת בשלב אחר, בדיוק כמו קו ייצור במפעל שבו כל תחנה עובדת על מוצר אחר בו זמנית. השנייה היא ריבוי ליבות: במקום יחידת עיבוד אחת בלבד, מעבדים מודרניים מכילים כמה יחידות עיבוד עצמאיות לגמרי על אותו שבב, שכל אחת מהן יכולה להריץ קוד משלה במקביל לאחרות.

אז מה כן אומר לנו הגיגהרץ

מהירות השעון, שנמדדת בגיגהרץ, מציינת בערך כמה מחזורי פעולה כאלה קורים בכל שנייה. מספר גבוה יותר אכן אומר שקורים יותר מחזורים בשנייה, אבל זו רק חתיכה אחת בפאזל. מעבד עם מהירות שעון נמוכה יותר אך עם ארכיטקטורה יעילה יותר, צנרת חכמה יותר, ומטמון גדול וטוב יותר, יכול בקלות לבצע יותר עבודה ממשית בפועל ממעבד עם מספר גיגהרץ גבוה יותר על הנייר. זו בדיוק הסיבה שהשוואת מעבדים לפי גיגהרץ בלבד היא כמו להשוות מכוניות לפי כמה פעמים המנוע שלהן מסתובב בדקה, בלי להתייחס בכלל לגודל הצמיגים או לאווירודינמיקה.

למה כדאי להבין את זה גם אם אתם לא כותבים אסמבלי

גם אם אתם עובדים ברמה גבוהה מאוד, בפייתון או בג'אווהסקריפט, הבנה בסיסית של מה שקורה בתוך המעבד עוזרת לכם להבין למה קוד מסוים רץ מהר יותר מקוד אחר, למה גישה לזיכרון בסדר רציף מהירה יותר מגישה מפוזרת, ולמה תוכנה שנראית "אותו דבר" על הנייר יכולה להתנהג אחרת לגמרי בפועל. את השכבה הזאת, מהיסודות של רגיסטרים ומחזור הביצוע ועד לנושאים מתקדמים כמו חיזוי ענפים וביצוע מחוץ לסדר, אנחנו בונים בהדרגה בקורס ליבת המחשב, עד שהמעבד מפסיק להיות קופסה שחורה.

ואם משהו לא מסתדר באמצע, אפשר תמיד לשאול בקהילה שלנו בדיסקורד.

הצטרפו לקהילה בדיסקורד

לסיכום

בפעם הבאה שמישהו יגיד לכם "המעבד הזה יותר חזק כי יש לו יותר גיגהרץ", תדעו שהתמונה מורכבת בהרבה. יחידת בקרה שמכוונת, ALU שמחשבת, רגיסטרים ומטמון שמאיצים, ומחזור של תשלוף, פענוח, ביצוע וכתיבה חוזרת שקורה מיליארדי פעמים בשנייה. גיגהרץ הוא רק מספר אחד מתוך תמונה שלמה, ועכשיו אתם יודעים מה עוד צריך להסתכל עליו.