Thread-Bundles

[VERIFIZIERT] Zuletzt aktualisiert von Joe Schaefer auf So., 14 Sep. 2025    Quelle
 

KI-generiertes Thread-Bundle.

POSIX-Threads

Ich wurde dieses Jahr mit der Portierung unserer maximalen Wahrscheinlichkeitsfunktion von einer einzelnen Thread-Version auf eine Multithread-Version beauftragt, basierend auf der architektonischen Prämisse, dass der langsamste Teil dieses Codes darin besteht, dass sich die eigentliche Optimierungslogik über einen Index von Modellierungsgruppen-IDs schleift, wobei jede Iteration durch die Schleife vom Rest unabhängig sein sollte.

Fun Problem beim Schleifen

  1. abhängige automatische Variablen nicht neu initialisieren,
  2. ändert mehrere globale Zeiger, die durch die Modellierungsgruppen-ID indiziert sind (JG),
  3. benötigt dringend thread_local-Variablen, um globale Speichersegmente zu trennen, die für die Berechnung bestimmt sind (auf Basis pro ID).

1 und 3 waren einfach. Mit 2 entdeckte ich einen cleveren Algorithmus, der das Konzept eines THREAD_BUNDLEist ein pro Thread-Block von Gruppen-IDs für die serielle Modellierung.

Durch Sicherstellen THREAD_BUNDLE ist mindestens so groß wie eine Speicherseitengröße geteilt durch die Größe der einzelnen Zeiger in 2, können wir sicherstellen, dass verschiedene Threads auf unabhängigen Seiten im virtuellen Speicher, sodass Mutex-Sperren auf diese Speicher-Schreibvorgänge verzichtet werden können. (Angenommen natürlich, die Threads verarbeiten ihre THREAD_BUNDLE in etwa der gleichen Geschwindigkeit).

Darüber hinaus entfernte ich schließlich die “gleiche Geschwindigkeit” -Abhängigkeit, indem ich die Schleife in gerade/odd-Paare aufteilte, was mindestens einen Speicher garantiert. Seite trennt die aktive THREAD_BUNDLE Schleifen.

Anz. Core-Schleifen

  /* 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
    ...
Permalink  #C   #Mutex   #POSIX   #PThread  

 


Kommentare  



Index


geteert und gefedert


Englisch Sprachabhängigkeiten


Sonnenstaronly


COVID-19 März 2020

  • Exponentielles Wachstum und COVID-19 — Nehmen Sie sich Zeit für den Abschnitt The Mathe — Es ist wichtig, ein gebildeter Verbraucher von Statistiken zu sein, die für die aktuelle Pandemie relevant sind … Do., 06 März 2025

 


Heyoka


NonFunctional Tests


 

  • Verteilerlisten — Diese temporären Adressen sind ein Anathema für ezmlm-idx‘s Abo- und Moderationssysteme … Sa., 27 Apr. 2024

 

  • Informationssicherheits-Primer — Alle Daten, die aus einem UNIX Systemaufruf zur Laufzeit stammen, müssen als erhalten behandelt werden … Sa., 27 Apr. 2024

 

  • Die Freude der DTrace — Messen Sie zweimal, schneiden Sie einmal, bevor Sie mit einer Codeoptimierung beginnen … Mi., 17 Apr. 2024

 


 

  • Über das Spam-Problem… — Das beste Plugin für qpsmtpdObwohl es schwierig ist zu verstehen, warum … So., 29 Jan. 2023

Hyperbolische Wabe


 

  • Spaß mit htop — Erweiterte htop-Funktionen auf beliebten Unix-Plattformen … Do., 19 Jan. 2023

Informationsarchitektur

  • Informationsarchitektur — Die gesamte Bandbreite an Technologien, die für das Design, die Präsentation, die Beziehungen und die architektonischen Einschränkungen relevant sind, die jede von Ihnen bereitgestellte URL abdecken … Mo., 11 März 2024

 

  • Die Bewegung DevOps — Die große Idee hinter der “Bewegung” ist nicht nur, den Entwicklern mehr Seil zu geben … Fr., 26 Apr. 2024

 

  • Anwendungsperformance — Viele Entwickler fallen in die Falle des Denkens, dass es bei der Leistungsoptimierung darum geht, jede Codezeile so effizient wie möglich zu machen. … Fr., 26 Apr. 2024