ספקולציות לסימולציה. חדשנות באימות

ספקולציות לסימולציה. חדשנות באימות

צומת המקור: 2547459

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

ספקולציות לסימולציה

החדשנות

הבחירה של החודש היא Chronos: מקביליות ספקולטיבית יעילה עבור מאיצים. המחברים הציגו את המאמר בכנס 2020 לתמיכה ארכיטקטונית בשפות תכנות ומערכות הפעלה והם מ-MIT.

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

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

השקפתו של פול

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

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

משימות בתור מחולקות למספר רכיבי עיבוד (PEs) במקביל - מה שאומר ש-Chronos מבצע ספקולטיבית משימות עתידיות לפני שהמשימה הנוכחית הושלמה. אם המשימה הנוכחית מבטלת כל משימות עתידיות המבוצעות באופן ספקולטיבי, הפעולות של אותן משימות עתידיות "מבוטלות" והן ממוקמות מחדש בתור. יישום תפיסה זו בצורה נכונה בחומרה אינו קל, אבל למשתמש החיצוני זה יפה: אתה פשוט מקודד את האלגוריתם שלך כאילו תור המשימות מבוצע באופן סדרתי על PE בודד. אין צורך לקודד מוטקסים או לדאוג למבוי סתום.

המחברים מיישמים את Chronos ב-SystemVerilog ומקמפלים אותו ל-FPGA. חלק ניכר מהמאמר מוקדש להסבר כיצד הם יישמו את תור המשימות וכל פריסה נחוצה בחומרה ליעילות מירבית. Chronos מבוסס על ארבעה אלגוריתמים המתאימים היטב לארכיטקטורה מבוססת תור משימות. כל אלגוריתם מיושם בשתי דרכים: ראשית באמצעות PE ייעודי ספציפי לאלגוריתם, והשנייה באמצעות מעבד RISC-V משובץ 32 סיביות RISC-V מדף פתוח כ-PE. לאחר מכן, הביצועים של Chronos מושווים למימושי תוכנה מרובי הליכי האלגוריתמים הפועלים על שרת Intel Xeon עם תג מחיר דומה ל-FPGA המשמש עבור Chronos. התוצאות מרשימות - Chronos מדרג פי 3 עד פי 15 טוב יותר מאשר שימוש בשרת Xeon. עם זאת, השוואת טבלה 3 לתמונה 14 גורמת לי לדאוג מעט שרוב הרווחים הללו הגיעו מה-PE הספציפיים לאלגוריתם ולא מארכיטקטורת Chronos עצמה.

בהתחשב בבלוג של אימות שהגדלתי באופן טבעי את רף הסימולציה ברמת השער. תעשיית ה-EDA השקיעה רבות כדי לנסות ולמקביל סימולציה לוגית והוכח שקשה לראות רווחים גדולים מעבר למספר מקרי שימוש ספציפיים. זה נובע בעיקר מכך שהביצועים של רוב הסימולציות בעולם האמיתי נשלטות על ידי הוראות טעינה/חנות שחסרות ב-L3-cache ויוצאות ל-DRAM. יש רק מקרה בדיקה אחד שמסומן במבחן זה והוא מוסיף 32 סיביות זעיר לשמירה. אם אתה קורא את הבלוג הזה ותהיה מעוניין לעשות איזו מידה יסודית יותר, אנא הודע לי - אם Chronos יכול באמת להרחיב את גודלו בסימולציות בעולם האמיתי, יהיה לזה ערך מסחרי עצום!

ההשקפה של ראול

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

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

השמיים Chronos המערכת הוטמעה במסגרת AWS FPGA כמערכת עם 16 אריחים, כל אחד עם 4 רכיבי עיבוד ספציפיים ליישום (PE), הפועלים בתדר 125MHz. מערכת זו מושווה לקו בסיס המורכב מ-20 ליבות/40 חוטים 2.4 גיגה-הרץ Intel Xeon E5-2676v3, שנבחר במיוחד בגלל שהמחיר שלה בר השוואה ל-FPGA (כ-2$ לשעה). הפעלת משימה בודדת על PE אחד, Chronos מהיר פי 2.45 מקו הבסיס. ככל שמספר המשימות בו-זמנית גדל, היישום של Chronos מתרחב למהירות יחסית עצמית של 44.9x על 8 אריחים, המקביל להאצה של 15.3x ביחס למימוש ה-CPU. הם גם השוו יישום המבוסס על RISC-V למטרות כלליות ולא על מאפיינים ספציפיים ליישום; PEs היו מהירים פי 5 מ-RISC-V.

מצאתי את המאמר מרשים מכיוון שהוא מכסה הכל, החל מקונספט ועד להגדרת מודל הביצוע של SLOT ועד ליישום החומרה וההשוואה המפורטת עם מעבד Xeon מסורתי ל-4 יישומים. המאמץ הוא משמעותי, Chronos הוא מעל 20,000 שורות של SystemVerilog. התוצאה היא זירוז ממוצע של פי 5.4 (מ-4 היישומים) על פני גרסאות מקבילות לתוכנה, עקב יותר מקביליות ושימוש רב יותר בביצוע ספקולטיבי. כדאי לקרוא את המאמר גם לצורך יישום למשימות שאינן סימולציות; המאמר כולל שלוש דוגמאות.

שתף את הפוסט הזה באמצעות:

בול זמן:

עוד מ Semiwiki