2013-09-16 4 views
0

Мне нужна небольшая помощь здесь. Я пытаюсь использовать opemmp, и у меня есть ошибка seg. Когда я комментирую #pragma ... программа работает нормально, но с #pragma я получил seg и гораздо больше предупреждений, я не знаю, что я делаю неправильно, я новый на opemmp, и любая помощь будет приветствоваться. вот мой код.сегмент Opemmp Ошибка

http://pastebin.com/KXrkxQXx

компилировать с -g3 к БГД, но говорят, что ошибки сегментный происходить подавление на

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 0x7ffff70eb700 (LWP 19010)] 
0x0000000000400c5a in condicoes_iniciais() 

Спасибо за помощь. и извините за плохой английский.

ответ

0

Я не читал ваш код полностью, но я видел ошибку, которую я могу вам рассказать.

В строке 125 вы выделяете память для xnew, а в строке 140 вы делаете этот указатель приватным для каждого потока. Когда вы объявляете переменную как приватную в OpenMP, ее значение не определено в начале, поэтому вам не хватает адреса в выделенной памяти. Например:

int a = 10; 
#pragma omp parallel private(a) 
{ 
    a += 5; // wrong, a is not initialized in the thread 
} 

Чтобы решить эту проблему, объявить xnew в firstprivate. То же самое происходит с другими переменными.

+0

В строке 146 я делаю все инициализацию xnew и других. Я делаю это частным, потому что я не хочу, чтобы другие потоки меняли свои значения. –

+0

Я делаю это, чтобы проверить работу. Ну, теперь seg fault находится на функции parametro_ordem. –

+0

Проблема заключается в том, что в строке 146 вы храните значения в массивах 'xold' и т. Д., Но они не указывают на выделенную вами память, если они являются omp-private. – ChronoTrigger

Смежные вопросы