Helgrind (Valgrind) y OpenMP (C): ¿evitar falsos positivos?

La documentación para la herramienta de detección de errores de rosca Valgrind Helgrind, encontradaaquí

advierte que, si usa GCC para compilar su código OpenMP, la biblioteca de tiempo de ejecución OpenMP de GCC (libgomp.so) causará un caos de informes falsos positivos de las carreras de datos, debido a su uso de instrucciones de máquina atómica y llamadas al sistema de futex de Linux en lugar de primitivas pthreads POSIX. Sin embargo, le indica que puede resolver este problema al compilar GCC con el--disable-linux-futex Opción de configuración.

Así que intenté esto. He compilado e instalado en un directorio local (~ / GCC_Valgrind / gcc_install) una nueva versión 4.7.0 de GCC (la última versión a partir de este escrito) con el--disable-linux-futex Opción de configuración. Entonces creé un pequeño programa de prueba OpenMP (prueba1.c) que no tiene carreras de datos visibles:

/* test1.c */

#include <omp.h>
#include <stdio.h>
#include <stdlib.h>

#define NUM_THREADS 2

int a[NUM_THREADS];

int main(void) {
        int i;
#pragma omp parallel num_threads(NUM_THREADS)
        {
                int tid = omp_get_thread_num();
                a[tid] = tid + 1;
        }
        for (i = 0; i < NUM_THREADS; i++)
                printf("%d ", a[i]);
        printf("\n");
        return EXIT_SUCCESS;
}

Compilé este programa de la siguiente manera

~/GCC_Valgrind/gcc_install/bin/gcc -Wall -fopenmp  -static -L~/GCC_Valgrind/gcc_install/lib64 -L~/GCC_Valgrind/gcc_install/lib -o test1 test1.c

Sin embargo, obtuve 30 informes de falsos datos de la carrera de datos positivos. Todos ocurrieron enlibgomp código. Entonces compiléprueba1.c sin el-static Bandera, y corrió Helgrind en él de nuevo. Esta vez, solo obtuve 9 informes de datos falsos positivos de la carrera, pero aún son demasiados, y sin el-static bandera, no puedo rastrear la supuesta raza en ellibgomp código.

¿Alguien ha encontrado una manera de reducir, si no eliminar, la cantidad de informes de falsos datos positivos de Helgrind aplicados a un programa OpenMP compilado con GCC? ¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta