אם אתה רק מתחיל ללמוד כיצד מעבדים מרובי ליבות, מטמון, קוהרנטיות מטמון וזיכרון פועלים, זה אולי נראה קצת מבלבל בהתחלה. עם זאת, בפוסט שאלות ותשובות של SuperUser של היום יש תשובות לשאלת קורא סקרן.
מושב השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה של Stack Exchange, קיבוץ מונחה קהילה של אתרי שאלות ותשובות.
השאלה
קורא SuperUser CarmeloS רוצה לדעת מתי המטמון של המעבד נשטף חזרה לזיכרון הראשי:
אם יש לי מעבד עם שתי ליבות ולכל ליבה יש מטמון L1 משלו, האם יתכן ש- Core1 ו- Core2 שניהם אוחזים באותו חלק בזיכרון באותו זמן? אם זה אפשרי, מה יהיה הערך של הזיכרון הראשי אם גם Core1 וגם Core2 ערכו את הערכים שלהם במטמון?
מתי המטמון של המעבד נשטף חזרה לזיכרון הראשי?
התשובה
לתורמים של SuperUser, דייויד שוורץ, סליסק וקימברלי W, יש את התשובה עבורנו. ראשית, דייויד שוורץ:
אם יש לי מעבד עם שתי ליבות ולכל ליבה יש מטמון L1 משלו, האם יתכן ש- Core1 ו- Core2 שניהם אוחזים באותו חלק בזיכרון באותו זמן?
כן, ביצועים יהיו נוראים אם זה לא היה המקרה. שקול שני שרשורים המריצים אותו קוד. אתה רוצה את הקוד בשני המטמונים L1.
אם זה אפשרי, מה יהיה הערך של הזיכרון הראשי אם גם Core1 וגם Core2 ערכו את הערכים שלהם במטמון?
הערך הישן יהיה בזיכרון הראשי, שלא משנה אם אף גרעין לא יקרא אותו. לפני שמוציאים ערך שונה מהמטמון, יש לכתוב אותו לזיכרון. בדרך כלל, גרסה כלשהי של פרוטוקול MESI משמש. ביישום המסורתי של MESI, אם ערך משתנה במטמון אחד, הוא לא יכול להיות קיים בכלל במטמון אחר באותה הרמה.
ואחריו התשובה מ- sleske:
כן, שיש שני מטמונים במטמון באותו אזור זיכרון יכול לקרות ולמעשה זו בעיה המתרחשת הרבה בפועל. ישנם פתרונות שונים, למשל:
- שני המטמונים יכולים לתקשר כדי לוודא שהם לא חולקים
- אתה יכול לקבל איזשהו מפקח שעוקב אחר כל המטמונים ומעדכן אותם בהתאם
- כל מעבד עוקב אחר אזורי הזיכרון שהוא שמר וכאשר הוא מזהה כתיבה, הוא זורק את המטמון שלו (כיום לא חוקי)
הבעיה נקראת קוהרנטיות במטמון ו- מאמר בויקיפדיה בנושא יש סקירה יפה של הבעיה והפתרונות האפשריים.
והתשובה הסופית שלנו מקימברלי וו:
כדי לענות על השאלה בכותרת ההודעה שלך, זה תלוי מהו פרוטוקול המטמון. אם מדובר בחזרה, המטמון יועבר רק לזיכרון הראשי כאשר לבקר המטמון אין ברירה אלא להכניס חסימת מטמון חדשה לשטח שכבר תפוס. הגוש שתפס בעבר את החלל מוסר וערכו נכתב בזיכרון הראשי.
הפרוטוקול האחר הוא כתיבה. במקרה כזה, בכל עת שחסימת המטמון נכתבת ברמה נ , החסימה המתאימה ברמה n + 1 זה מעודכן. זה דומה במושג למילוי טופס עם נייר פחמן מתחת; כל מה שאתה כותב למעלה מועתק על הגיליון למטה. זה איטי יותר כי זה כמובן כרוך בפעולות כתיבה רבות יותר, אך הערכים בין המטמון הם עקביים יותר. בתכנית ההחזרה, רק למטמון ברמה הגבוהה ביותר יהיה הערך העדכני ביותר עבור חסימת זיכרון מסוימת.
יש לך מה להוסיף להסבר? נשמע בתגובות. רוצה לקרוא תשובות נוספות ממשתמשי Stack Exchange אחרים המתמצאים בטכנולוגיה? עיין כאן בשרשור הדיון המלא .
אשראי תמונה: למסיפמאט (פליקר)