חבילות הליכי משנה

[אומת] עדכון אחרון על-ידי Joe Schaefer ב-יום א׳, 14 ספט׳ 2025    מקור
 

חבילת הליכי משנה שנוצרה על-ידי AI.

אשכולות POSIX

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

בעיה מהנה כאשר הלולאה

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

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

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

יתר על כן, בסופו של דבר הסרתי את התלות “אותה מהירות” על ידי פיצול הלולאה לזיווג זוגי / אוד, המבטיח לפחות זיכרון אחד דף מפריד בין פעיל THREAD_BUNDLE לולאות.

לולאות ליבה

  /* EVEN */
  for (jG = minG; jG <= numG; jG += 2*THREAD_BUNDLE)
  {
    pthread_t ptid; 3 refs
    arg_t* arg = mal (sizeof(*arg), "arg_t"); 12 refs

#define SET_ARG(foo) arg->foo = (foo) 30 refs

SET_ARG(jG);
    ...

#undef SET_ARG

// rsim_mlf_thread loops over the index bundle
    // from jG to MIN(numG, jG + THREAD_BUNDLE - minG), doing
    // stuff with global data structures also indexed by jG

pthread_create (&ptid, NULL, rsim_mlf_thread, arg);
    PUSH_STACK_ELT(thread_stack, ptid, pthread_t);
  }

{
    pthread_t * ptid; 3 refs
    while (POP_STACK_PTR(thread_stack, ptid, pthread_t) != NULL)
    {
      arg_t* arg; 6 refs
      pthread_join(*ptid, (void**)&arg);
      ...
  }

/* ODD */
  for (jG = THREAD_BUNDLE + minG; jG <= numG; jG += 2*THREAD_BUNDLE)
  {
    pthread_t ptid; 3 refs
    arg_t* arg = mal (sizeof(*arg), "arg_t"); 12 refs
    ...
קישור קבוע  #C   #mutex   #POSIX   #תהליכון  

 


הערות  


קבצים מצורפים  

קישורים  


אינדקס


יחסי תלות בשפה האנגלית


כוכב שמש בלבד


מרץ 2020 COVID-19

  • צמיחה מעריכית ו-COVID-19— קח את הזמן שלך עם **המתמטיקה** סעיף — חשוב להיות צרכן משכיל של נתונים סטטיסטיים הרלוונטיים למגפה הנוכחית ... יום ה׳, 06 מרץ 2025

 

  • Git ולא Repudiation, Revisited— יש הבחנה ברורה בין ההיסטוריה של "מחויבות" לבין ההיסטוריה "העלאה" ... יום ו׳, 03 ינו׳ 2025

היוקה


NonFunctional בדיקות


 

  • רשימות דיוור— כתובות זמניות אלה הן anathema ל `ezmlm-idx`'s מנוי ומערכות מתינות ... שבת, 27 אפר׳ 2024

 

  • מדריך אבטחת מידע— יש להתייחס לכל הנתונים שמקורם ב-UNIX בזמן ריצה **קריאת מערכת** כ-**tainted** ... שבת, 27 אפר׳ 2024

 

  • ביצועי יישומים— מפתחים רבים נופלים למלכודת של חשיבה אופטימיזציה ביצועים היא על הפיכת כל שורת קוד ליעילה ככל האפשר. ... יום ג׳, 23 אפר׳ 2024

 

  • על בעיית הספאם...— התוסף היחיד הטוב ביותר עבור `Qpsmtpd`למרות שקשה להבין מדוע ... יום א׳, 29 ינו׳ 2023

היפרבולית Honeycomb


 

  • תנועת DevOps— הרעיון הגדול מאחורי "התנועה" הוא לא רק לתת למפתחים יותר חבל ... יום ו׳, 15 דצמ׳ 2023

 

  • כיף עם htop— תכונות htop מתקדמות בפלטפורמות יוניקס פופולריות ... יום ה׳, 19 ינו׳ 2023

ארכיטקטורת מידע

  • ארכיטקטורת מידע— כל סולם הטכנולוגיות הרלוונטי לעיצוב, להצגה, ליחסים ולאילוצים ארכיטקטוניים המכסים כל כתובת URL שבה אתה משרת ... יום ב׳, 11 מרץ 2024

זפת ונוצות

  • Apache HTTPd Devs נחשב מזיק— פיליפ לא ידע כל כך טוב אז היה עד כמה [מציצה, vapid, וטריטוריאלית](https://www.mail-archive.com/dev@httpd.apache.org/msg77781.html) הקבוצה הזו הפכה ... יום ו׳, 26 אפר׳ 2024

 

  • השמחה של DTrace— למדוד פעמיים, לחתוך פעם אחת, לפני תחילת מאמץ אופטימיזציה קוד ... יום ו׳, 26 אפר׳ 2024