Debugging programu - dziwny problem

Zaczęty przez Rysiu, 02 Lipiec 2013, 10:41

Rysiu

Mam dziwny problem z programem. Otóż jeżeli kompiluję jego z optymalizacjami dla CPU i O3 to wykonuje się teoretycznie poprawnie. W przypadku gdy kompiluję bez optymalizacji CPU i z O2 podczas uruchamiania dostaję "Segmentation fault".

Program można pobrać z repozytorium googlecode:

svn checkout http://olib.googlecode.com/svn/trunk/ olib

Następnie należy wejść do odpowiedniego katalogu z przykładami:

cd olib/samples

I wykonać odpowiednie polecenie make:

make goldbach_odd

Po kompilacji program będzie znajdował się w podkatalogu mathematics, który znajduje się w katalogu samples.

cd mathematics

Wystarczy uruchomić program odpowiednią dość długą komendą:

time env OMP_NUM_THREADS=2 ./goldbach_odd 100000000209366024193 10000000000000000000000

i program powinien zwrócić Segmentation fault.

Można spróbować dodać optymalizacje CPU w pliku makefile (olib/samples/makefile). Odpowiada za to 71 linijka:

CPU_OPTYMALIZATION = no

Próbowałem debugować programem gdb. Udało mi się jednak uzyskać tylko:

Program received signal SIGSEGV, Segmentation fault.
0x000000000041de43 in __gmpz_set_str ()


Nic mi to nie mówi. Błąd z pewnością jest w sekcji OPenMP w pliku olib/samples/mathematics/goldbach_odd.cpp

    #pragma omp parallel shared(S, add_1, add_2, number_of_threads) private(thread_id, number, upper_range, counter)
   {


   }


Błąd jest jednak niezależny od ilości wątków na których będzie wykonywany program - występuje nawet gdy program uruchomimy na jednym wątku.

Czy ktoś mógłby pomóc i zrobić porządne debugowanie tego programu?