Helgrind (Valgrind) i OpenMP (C): unikanie fałszywych alarmów?

Znaleziono dokumentację narzędzia wykrywania błędów wątku Valgrind Helgrindtutaj

ostrzega, że ​​jeśli użyjesz GCC do skompilowania kodu OpenMP, biblioteka wykonawcza OpenMP GCC (libgomp.so) spowoduje chaos fałszywych pozytywnych raportów o wyścigach danych, z powodu użycia atomowych instrukcji maszynowych i wywołań systemowych futex Linuksa zamiast prymitywów pthreads POSIX. Mówi ci, że możesz rozwiązać ten problem, rekompilując GCC za pomocą--disable-linux-futex opcja konfiguracji.

Więc spróbowałem tego. Skompilowałem i zainstalowałem w lokalnym katalogu (~ / GCC_Valgrind / gcc_install) nowa wersja GCC 4.7.0 (najnowsza wersja tego pisma) z--disable-linux-futex opcja konfiguracji. Następnie stworzyłem mały program testowy OpenMP (test1.c), który nie ma widocznych wyścigów danych:

/* 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;
}

Skompilowałem ten program w następujący sposób

~/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

Mam jednak 30 fałszywych raportów z wyścigów danych!libgomp kod. Potem skompilowałemtest1.c bez-static flagę i ponownie uruchomiłem Helgrinda. Tym razem dostałem tylko 9 fałszywych raportów z wyścigów, ale wciąż jest ich zbyt wiele - i bez-static flag, nie mogę prześledzić rzekomej rasy wlibgomp kod.

Czy ktoś znalazł sposób na zmniejszenie, jeśli nie wyeliminowanie, liczby fałszywych raportów z wyścigów danych od Helgrind zastosowanych do programu OpenMP skompilowanego z GCC? Dzięki!

questionAnswers(2)

yourAnswerToTheQuestion