Paquetes de subprocesos

[VERIFICADO] Última actualización realizada por Joe Schaefer en dom., 14 sept. 2025    origen
 

Paquete de subprocesos generado por IA.

Threads POSIX

Este año tuve la tarea de portar nuestra función de máxima probabilidad de una sola versión roscada a una multithread, basada en la premisa arquitectónica de que la parte más lenta de ese código es donde la lógica de optimización real gira sobre un índice de ID de grupo de modelado, que por diseño, cada iteración a través del bucle debe ser independiente del resto.

Problema divertido cuando el bucle

  1. no reinicializa las variables automáticas dependientes,
  2. modifica varios punteros globales indexados por ID de grupo de modelado (jG),
  3. necesita urgentemente variables thread_local para separar segmentos de memoria global dedicados al cálculo (sobre una base por ID).

1 y 3 fueron sencillos. Con 2 descubrí un algoritmo inteligente que involucraba el concepto de THREAD_BUNDLE, que es un bloque por subproceso de ID de grupo de modelado en serie.

Al garantizar THREAD_BUNDLE Es al menos tan grande como un tamaño de página de memoria dividido por el tamaño de los punteros individuales en 2, podemos asegurarnos de que diferentes subprocesos operen de forma independiente. páginas En la memoria virtual, por lo que podemos evitar los bloqueos de mutex en esas escrituras de memoria. (Asumiendo que los hilos procesan sus THREAD_BUNDLE aproximadamente a la misma velocidad).

Además, finalmente eliminé la dependencia de la “misma velocidad” dividiendo el bucle en pares / pares impares, lo que garantiza al menos una memoria. página separa el activo THREAD_BUNDLE bucles.

Bucles 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
    ...
Enlace permanente  #C   #mutex   #POSIX   #pthread  

 


Comentarios  



Índice


Dependencias del idioma inglés


Estrella del Sol


Marzo de 2020 COVID-19

  • Crecimiento exponencial y COVID-19 — Tómese su tiempo con la sección matemática — Es importante ser un consumidor educado de estadísticas relevantes para la pandemia actual … jue., 06 mar. 2025

 

  • Git y no repudio, revisado — Hay una clara distinción entre la historia de “compromiso” y la historia de “carga” … vie., 03 ene. 2025

Heyoka


NonFunctional Pruebas


 

  • Listas de correo — Estas direcciones temporales son un anatema para ezmlm-idxsistemas de suscripción y moderación … jue., 02 may. 2024

 


 

  • La alegría de DTrace — Medir dos veces, cortar una vez, antes de embarcarse en un esfuerzo de optimización de código … mié., 17 abr. 2024

 


 


Panal hiperbólico


 

  • Diversión con htop — Funciones avanzadas de htop en plataformas populares de Unix … jue., 19 ene. 2023

Arquitectura de la Información

  • Arquitectura de la Información — Toda la gama de tecnologías relevantes para el diseño, la presentación, las relaciones y las restricciones arquitectónicas que cubren cada URL que sirve … lun., 11 mar. 2024

alquitranados y emplumados


 

  • Movimiento DevOps — La gran idea detrás del “movimiento” no es simplemente dar a los desarrolladores más cuerda … vie., 26 abr. 2024

 

  • Rendimiento de aplicaciones — Muchos desarrolladores caen en la trampa de pensar que la optimización del rendimiento consiste en hacer que cada línea de código sea lo más eficiente posible. … vie., 26 abr. 2024