פתרון מחסניות ומקומיות זיכרון¶
בכל frame יש יותר מהמערך המקומי. מספר הבתים המדויק נקבע על ידי המהדר, ABI ואופטימיזציה. לכן חישוב של עומק כפול 1024 הוא אומדן חלקי, ולא הוכחה שעד עומק מסוים התוכנית בטוחה.
אפשר ליצור thread עם reservation מפורש באמצעות הקטע הבא, תוך שימוש ב־worker בעל החתימה של _beginthreadex ובהמתנה וסגירה כמו בשיעור 4.6.
const auto raw = _beginthreadex(nullptr, 2 * 1024 * 1024,
worker, context, STACK_SIZE_PARAM_IS_A_RESERVATION, nullptr);
הקטע הוא קריאת שילוב, ולא תוכנית עצמאית. ה־context חייב להישאר חי עד סוף worker, וה־handle שחוזר צריך להיסגר אחרי המתנה. ללא הדגל, משמעות פרמטר הגודל שונה לפי חוזה ה־API.
ניסוי NUMA מתחיל בזיהוי טופולוגיה אמיתית. לאחר מכן נועלים את מדיניות ההרצה במידה המתאימה, מבצעים first touch בצורה מוגדרת ומודדים גישה לאותם נתונים. יש לשמור גם את כמות העבודה ואת מצב החימום, כדי לא לבלבל locality עם cache.
בקשת large page יכולה להיכשל כאשר למשתמש אין SeLockMemoryPrivilege מתאים. הפתרון לתרגיל אינו להפעיל הרשאות מנהל בלי תכנון, אלא לרשום את התנאי החסר. מעבדת מערכת מתאימה יכולה להגדיר את ההרשאה מראש ולהשוות מחדש באותה תצורה.
באג רקורסיה נשאר באג גם אם נתנו לו עוד מגה־בתים. התיקון הוא תנאי עצירה, אלגוריתם איטרטיבי או מבנה עבודה מוגבל. לעומת זאת, קוד חוקי שדורש עומק ידוע יכול להצדיק תקציב stack מתועד, כל עוד מחשבים גם ספריות וקריאות נוספות.
הבחירה בדפים גדולים אינה מבטיחה האצה. אם העבודה כבר פוגעת מעט ב־TLB או אם עלות ההקמה דומיננטית, ייתכן שלא נראה תועלת. זו מסקנה תקפה של ניסוי מבוקר.