מה זה גניבת עבודה?

click fraud protection

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

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

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

יתרונות וחסרונות

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

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

יישומים

למספר שפות תכנות יש זמני ריצה שיכולים לתזמן עבודה ישירות על מעבדים ייעודיים. לדוגמה, שפת התכנות Cilk, זמן הריצה Rust Tokio ו-.Net Task Parallel Library יכולים לעשות זאת. לחלופין, ייתכן שמערכת ההפעלה תהיה אחראית על תזמון זמן המעבד בפועל. עם התוכנית פשוט מוסיפה משימות למאגר של "שרשורי עובדים", שמתוזמנים בעצמם על ידי מערכת ההפעלה.

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

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

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

סיכום

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