כדי לקבוע אם נעשה שימוש הולם בשרשורי התהליכים של המשחק והאם הם מתוזמנים בצורה שתניב את הביצועים הכי טובים, כדאי לקחת בחשבון כמה דברים.
- קצב פריימים
- ריבוי נימים (Multithreading) והרצת נימים במקביל (Thread parallelization)
- הקצאת ליבות מעבד (CPU)
ריבוי נימים
הרבה משחקים ומנועי משחקים משתמשים בריבוי שרשורים כדי לחלק את עבודת המעבד למשימות לוגיות, שאפשר להריץ באופן עצמאי למדי. הגדרה טיפוסית אחת היא שרשור משחק לקלט וללוגיקת המשחק, שרשור עיבוד להכנה ולשליחה של אובייקטים לציור, ושרשורי עובד למשימות משנה אחרות כמו אנימציות או אודיו.
מומלץ להריץ את השרשורים במקביל כדי לנצל את שיפורי הביצועים של ריבוי השרשורים. דוגמה לכך היא תרחיש שבו השרשורים של המשחק והרינדור פועלים במקביל באופן חלקי או מלא על ליבות שונות. זה לא תמיד אפשרי, למשל במקרים של תלות בנתונים משותפים. עם זאת, כשזה אפשרי, זה עשוי להוביל לזמני CPU נמוכים יותר, ולכן גם לקצב פריימים גבוה יותר.
הקצאת ליבות מעבד (CPU)
אחד הגורמים שמשפיעים באופן משמעותי על הביצועים של עומסי העבודה של המעבד הוא האופן שבו הם מתוזמנים בליבות. יכול להיות שהחיוב יחולק לשני רכיבים:
- האם השרשורים של המשחק פועלים על הליבה שהכי מתאימה לעומס העבודה שלהם.
- האם ה-threads של המשחק עוברים בין ליבות לעיתים קרובות.
במכשירים מודרניים נעשה לעיתים קרובות שימוש בארכיטקטורה שנקראת מחשוב הטרוגני, שבה לליבות יש רמות ביצועים שונות:
- ליבה אחת או כמה ליבות מציעות ביצועים גבוהים, אבל צורכות יותר חשמל. הליבות האלה נקראות לפעמים ליבות 'גדולות'.
- ליבות אחרות מציעות ביצועים נמוכים יותר בשיא, אבל הן חסכוניות יותר בצריכת החשמל. הליבות האלה נקראות לפעמים ליבות קטנות.
- אופציונלי: ליבה אחת או יותר שמציעות איזון בין ביצועים לבין צריכת חשמל. הליבות האלה נקראות לפעמים ליבות ביניים.
כדי לבדוק את ההתנהגות של ה-CPU, צריך להפעיל את האפשרות CPU בהגדרות הפרופיל כשמבצעים מעקב. אחר כך אפשר לבדוק את ההתנהגות של ה-CPU בקטע CPU Usage. אם מגדילים את התצוגה של חלק מהמעקב <200ms, אפשר לראות את התהליכים הנפרדים שפועלים בליבות של המעבד במכשיר. בדרך כלל, ליבות קטנות יותר מתאימות למדדים קטנים יותר (לדוגמה, מעבדי CPU '0'-'3'), בעוד שליבות גדולות יותר מתאימות למדדים גבוהים יותר (לדוגמה, מעבדי CPU '6'-'7'), וליבות ביניים, אם יש כאלה, יתאימו למדדים שביניהם (לדוגמה, מעבדי CPU '5'-'6'). זהו הנוהג המקובל, אבל אין בכך ערובה.
אם אתם מגלים שרכיבי thread מסוימים מתוזמנים במעבדים שלא עומדים בדרישות הביצועים או ההספק שלהם, כדאי להגדיר ידנית את שיוך המעבד לרכיבי ה-thread האלה.
אפשר גם לבדוק אם השרשורים עוברים בין ליבות. החלפות ליבה כאלה גוררות תקורה מסוימת מהחלפת ההקשר ומאובדן המצב במטמון או ברישומים של הליבה.
הגדרת שיוך מעבד לשרשור מורה למערכת לתזמן אותו על הליבה הנתונה כשהמשחק פועל בחזית. יש כמה גורמים שצריך לקחת בחשבון כשעושים את זה:
- תוכנת הפלטפורמה לא יכולה להתאים באופן דינמי את מיקום המשימות לגורמים בזמן הריצה, כמו עומס והגבלת מהירות (throttling) תרמית.
בדיקות ביצועים במכשירים שונים עשויות להניב מאפייני ביצועים שונים מאוד, במיוחד אם יש הבדלים משמעותיים בין המכשירים מבחינת נקודת המחיר או תאריך היציאה לשוק.
יכול להיות שמכשיר חדש או יקר יותר יריץ עומס עבודה מסוים בקלות על ליבה קטנה, אבל מכשיר ישן או זול יותר יצטרך ליבה גדולה יותר כדי לעמוד בלוחות הזמנים של אותו עומס עבודה.
אם תכפו את ההתאמה לליבות גדולות, יכול להיות שתגדילו שלא לצורך את צריכת הסוללה ואת העומס התרמי.
לכן, בדרך כלל מומלץ להימנע מהגדרה ידנית של שיוך ליבות CPU.