איך אתה מחשב מהירות מעבד על מעבדים מרובי ליבות?
הופעתם של מעבדים מרובי ליבות של מעבדים מרובי ליבות, מעלה את השאלה עבור משתמשים רבים: כיצד אתה מחשב ביעילות את המהירות האמיתית של מערכת מרובת ליבות? האם מערכת 4 ג 'יגה ליבה באמת 12Ghz? המשך לקרוא תוך כדי בדיקה.
מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ קהילתי של אתרי Q & A.
השאלה
SuperUser הקורא NReilingh היה סקרן כיצד מהירות המעבד עבור מערכת הליבה מרובה מחושב למעשה:
האם נכון לומר, למשל, כי מעבד עם ארבע ליבות כל פועל ב 3GHz הוא למעשה מעבד פועל ב 12GHz?
פעם נכנסתי לתוך "מק מול PC" טיעון (אשר אגב לא את המוקד של הנושא הזה ... זה היה בחזרה בבית הספר התיכון) עם מכר אשר התעקש כי Mac היו רק להיות המפורסם כמו 1GHZ מכונות כי הם היו כפולה - G4s מעבד כל פועל ב 500MHz.
באותו זמן ידעתי את זה כדי hogwash מסיבות שאני חושב הם ברורים למרבית האנשים, אבל אני רק ראיתי תגובה באתר זה השפעה של "6 ליבות x 0.2GHz = 1.2Ghz" וזה גרם לי לחשוב שוב על השאלה אם יש תשובה אמיתית לכך.
לכן, זוהי שאלה טכנית יותר פילוסופית / עמוקה לגבי הסמנטיקה של חישוב מהירות השעון. אני רואה שתי אפשרויות:
- כל ליבה היא למעשה עושה x חישובים לשנייה, ולכן המספר הכולל של חישובים הוא x (ליבות).
- מהירות השעון היא ספירה של מספר המחזורים שהמעבד עובר במרחב של שנייה, כל עוד כל הליבות פועלות באותה מהירות, המהירות של כל מחזור שעון נשארת זהה, לא משנה כמה ליבות קיימות . במילים אחרות, Hz = (core1Hz + core2Hz + ...) / ליבות.
אז מה היא הדרך הנכונה לציון מהירות השעון הכולל, וחשוב יותר, האם זה אפילו אפשרי להשתמש יחיד הליבה מהירות nomenclature על מערכת מרובת ליבות?
התשובה
תורמים SuperUser Mokubai עוזר לנקות את העניינים. הוא כותב:
הסיבה העיקרית לכך מעבד ארבע ליבות ארבע ליבות הוא אף פעם לא מהר כמו ליבה אחת 12GHz הוא לעשות עם איך המשימה פועלת על מעבד זה עובד, כלומר חד הליכי או מרובי הליכי. החוק של אמדאהל חשוב כאשר בוחנים את סוגי המשימות שאתה מפעיל.
אם יש לך משימה שהיא מטבעו לינארי ויש לעשות בדיוק צעד אחר צעד כגון (תוכנית פשוטה למדי)
10: a = a + 1
20: goto 10
אז המשימה תלויה מאוד בתוצאה של המעבר הקודם ולא יכול להריץ מספר עותקים של עצמו מבלי להשחית את הערך של
'א'
כמו כל עותק יהיה מקבל את הערך של'א'
בזמנים שונים וכותבים אותו בצורה שונה. זה מגביל את המשימה על חוט יחיד ולכן המשימה יכולה רק פעם לרוץ על ליבה אחת בכל זמן נתון, אם זה היה לרוץ על ליבות מרובות ואז השחיתות סינכרון יקרה. זה מגביל את זה ל 1/2 של כוח המעבד של מערכת הליבה כפולה, או 1/4 במערכת הליבה ארבע.עכשיו לקחת משימה כגון:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
כל השורות הללו הן עצמאיות וניתן לחלקן ל 4 תכניות נפרדות כמו הראשונה ולהפעיל באותו זמן, כל אחת מסוגלת לעשות שימוש יעיל במלוא כוחה של אחת הליבות ללא כל בעיית סינכרון, זה המקום שבו חוק אמדאהל נכנס לתוכו.
אז אם יש לך יישום אחד threaded עושה חישובים כוח פראי מעבד יחיד 12GHz ינצח ידיים למטה, אם אתה יכול איכשהו להפוך את המשימה לפצל לחלקים נפרדים מרובי הליכי ואז 4 ליבות יכול להתקרב, אבל לא ממש להגיע, אותה הופעה, לפי חוק אמדאהל.
הדבר העיקרי שמערכת רב CPU נותן לך הוא היענות. על מכונת ליבה אחת, כי הוא עובד קשה המערכת יכולה להיראות איטי כמו רוב הזמן יכול להיות בשימוש על ידי משימה אחת המשימות האחרות רק לרוץ בפרצים קצרים בין המשימה גדולה יותר, וכתוצאה מכך מערכת שנראה איטי או גאה . על מערכת מרובת ליבות המשימה הכבדה מקבל ליבה אחת וכל שאר המשימות לשחק על ליבות אחרות, עושה את עבודתם במהירות וביעילות.
הטענה של "6 ליבות x 0.2GHz = 1.2Ghz" היא אשפה בכל מצב למעט כאשר המשימות מקבילות באופן מושלם ובלתי תלוי. ישנם מספר רב של משימות שאינן מקבילות מאוד, אבל הם עדיין דורשים צורה כלשהי של synchronsation. בלם יד הוא trancoder וידאו כי הוא טוב מאוד בכל שימוש במעבדים זמין אבל זה דורש תהליך הליבה כדי לשמור על הנושאים אחרים מלאים נתונים ולאסוף את הנתונים שהם עושים עם.
- כל ליבה היא למעשה עושה x חישובים לשנייה, ולכן המספר הכולל של חישובים הוא x (ליבות).
כל ליבה מסוגלת לעשות x חישובים לשנייה, בהנחה עומס העבודה הוא מקביל במקביל, על תוכנית ליניארית כל מה שיש לך הוא הליבה 1.
- מהירות השעון היא ספירה של מספר המחזורים שהמעבד עובר במרחב של שנייה, כל עוד כל הליבות פועלות באותה מהירות, המהירות של כל מחזור שעון נשארת זהה, לא משנה כמה ליבות קיימות . במילים אחרות, Hz = (core1Hz + core2Hz + ...) / ליבות.
אני חושב שזה כישלון לחשוב כי 4 x 3GHz = 12GHz, נתן את המתמטיקה עובד, אבל אתה משווה תפוחים לתפוזים ואת הסכומים פשוט לא בסדר, GHz לא יכול פשוט להוסיף יחד עבור כל מצב. הייתי משנה את זה ל 4 x 3GHz = 4 x 3GHz.
יש לך משהו להוסיף להסבר? נשמע את ההערות. רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי מתמצא? בדוק את נושא הדיון המלא כאן.