Forma fácil de almacenar en caché los resultados de varios subprocesos
ConsiderarN
subprocesos que realizan algunas tareas asincrónicas con un valor de resultado pequeño comodouble
oint64_t
. Entonces sobre8
los valores de resultado pueden caber en una sola línea de caché de CPU.N
es igual al número de núcleos de CPU.
Por un lado, si solo asigno una matriz deN
artículos, cada unodouble
oint64_t
, luego8
los subprocesos compartirán una línea de caché de la CPU, que parece ineficiente.
Por otro lado, si asigno una línea de caché completa para cadadouble
/int64_t
, el hilo receptor tendrá que buscarN
líneas de caché, cada una escrita por un núcleo de CPU diferente (excepto 1).
Entonces, ¿hay una solución eficiente para este escenario? La CPU es x86-64. Se prefiere una solución en C ++.
Aclaracion 1: la actividad general de inicio / salida de subproceso no es grande porque se utiliza el grupo de subprocesos Por lo tanto, es principalmente sincronización en una sección crítica.
Aclaracion 2: Los lotes paralelos tienen una dependencia. El subproceso maestro solo puede iniciar el siguiente lote de cálculos paralelos después de que haya recopilado y procesado los resultados del lote anterior. Porque los resultados del lote anterior sirven como algunos parámetros del siguiente lote.