Groupes de threads
.
Fils POSIX
Cette année, j’ai été chargé de transférer notre fonction de probabilité maximale d’une version filetée unique à une version multithread, sur la base de l’hypothèse architecturale que la partie la plus lente de ce code est où la logique d’optimisation réelle boucle sur un index du groupe de modélisation Id, qui par conception, chaque itération à travers la boucle devrait être indépendante du reste.
Problème amusant lors de la boucle
- ne parvient pas à réinitialiser les variables automatiques dépendantes,
- modifie plusieurs pointeurs globaux indexés par ID de groupe de modélisation (
jg), - a désespérément besoin de variables thread_local pour séparer les segments de mémoire globale dédiés au calcul (par ID).
1 et 3 étaient simples. Avec 2 j’ai découvert un algorithme intelligent impliquant le concept de THREAD_BUNDLE, qui est un bloc par thread d’ID de groupe de modélisation série.
En assurant THREAD_BUNDLE est au moins aussi grand qu’une taille de page de mémoire divisée par la taille des pointeurs individuels en 2, nous pouvons nous assurer que différents threads fonctionnent sur indépendant pages dans la mémoire virtuelle, afin que nous puissions éviter les verrous mutex sur ces écritures de mémoire. (En supposant bien sûr que les threads traitent leurs THREAD_BUNDLE à peu près à la même vitesse).
De plus, j’ai finalement supprimé la dépendance “à la même vitesse” en divisant la boucle en paires pair/impair, ce qui garantit au moins une mémoire page sépare l’actif THREAD_BUNDLE boucles.
Nb de boucles principales
/* 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
...
Index
-

-
- Perl 7 Feature Demande : sous scellés pour lexical dactylographié — La recherche de méthode d’exécution OO de Perl 5 présente une surcharge de performances de 50 % supérieure à celle d’un appel direct de sous-routine nommé … lun., 16 févr. 2026
-
-
- Triples produits des fonctions propres et de la géométrie spectrale — Nous découvrons un roman, mais familier, invariant géométrique global … lun., 16 févr. 2026
-
-
- A quoi sert Smart Content Dependency ManagementTM ? — Une compréhension claire du graphique de dépendance de votre site Web vous permettra d’optimiser les performances de notre technologie de construction à grande échelle … mar., 13 mai 2025
-

-
- Croissance exponentielle et COVID-19 — Prenez votre temps avec la section math — il est important d’être un consommateur éduqué de statistiques pertinentes pour la pandémie actuelle … jeu., 06 mars 2025
-
-
- Git et non répudiation, revisité — Il y a une distinction claire entre l’histoire “commit” et l’histoire “upload” … ven., 03 janv. 2025
-

-
- Les pensées aléatoires de Joe — Bienvenue ! … dim., 10 nov. 2024
-
-
- Sécurité de l’information, performances des applications et fiabilité — L’ingénierie logicielle “non fonctionnelle” s’articule autour de trois problèmes clés : la sécurité, les performances et la fiabilité (SPR) … jeu., 09 mai 2024
-
-
- Listes de diffusion — Ces adresses temporaires sont anathèmes à
ezmlm-idxles systèmes d’abonnement et de modération … jeu., 02 mai 2024
- Listes de diffusion — Ces adresses temporaires sont anathèmes à
-
-
- Introduction à la sécurité des informations — Toutes les données provenant d’un appel système UNIX d’exécution doivent être traitées comme conservées … jeu., 02 mai 2024
-
-
- La joie de DTrace — Mesurez deux fois, coupez une fois, avant de vous lancer dans un effort d’optimisation de code … mer., 17 avr. 2024
-
-
- La joie du htop — Htop sur Solaris 11 … mer., 17 avr. 2024
-
-
- Sur le problème du spam… — Le meilleur plugin pour
qpsmtpd, bien qu’il soit difficile de comprendre pourquoi … dim., 29 janv. 2023
- Sur le problème du spam… — Le meilleur plugin pour
-

-
- Formule de trace stochastique pour les collecteurs fermés et incurvés négativement — Mon * 1997 Ph.D. thèse* comme une entrée de blog. … ven., 12 avr. 2024
-
-
- Fun avec htop — Fonctionnalités htop avancées sur les plates-formes Unix populaires … jeu., 19 janv. 2023
-

-
- Architecture des informations — Toute la gamme de technologies pertinentes pour la conception, la présentation, les relations et les contraintes architecturales qui couvrent chaque URL que vous servez … lun., 11 mars 2024
-

-
- Apache HTTPd Devs considéré comme nuisible — Philippe ne savait pas très bien à l’époque à quel point Poissons, vapeurs et territoires Cette équipe était devenue … ven., 26 avr. 2024
-
-
- Le mouvement DevOps — La grande idée derrière le “mouvement” n’est pas simplement de donner aux développeurs plus de corde … ven., 26 avr. 2024
-
-
- Performances des applications — De nombreux développeurs tombent dans le piège de penser que l’optimisation des performances consiste à rendre chaque ligne de code aussi efficace que possible. … ven., 26 avr. 2024
