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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta