Estoy experimentando con tareas de OpenMP y quiero escribir una aplicación que se ejecute en una CPU de 2 zócalos NUMA y use las cláusulas de afinidad de tareas de OpenMP que se pueden agregar al pragma de creación de tareas. Proporcionan una pista sobre dónde se debe ejecutar una tarea, al proporcionar una variable cercana a la ubicación física de la que se debe ejecutar la tarea.
Un ejemplo de la documentación de OpenMP 5.0 muestra cómo podría usarse:
void task_affinity(double *A, int N) { double * B; #pragma omp task depend(out:B) shared(B) affinity(A[0:N]) { B = alloc_init_B(A,N); } #pragma omp task depend( in:B) shared(B) affinity(A[0:N]) { compute_on_B(B,N); } #pragma omp taskwait }El compilador gcc que tengo en la versión 11.2.0, sin embargo, solo proporciona un código auxiliar a partir de ahora, lo que, según tengo entendido, significa que la funcionalidad aún no está implementada.
¿Hay algún compilador que tenga las afinidades de tareas de OpenMP completamente implementadas todavía?
¿La implementación gcc de OpenMP maneja las tareas de manera que se asignan a subprocesos que están físicamente cerca de los datos en los que trabajan, incluso si no se establecen afinidades explícitamente?