-2
我最近遇到了編譯器特定的openmp問題。我寫了一個使用openmp和gfortran正確工作的代碼。我最近使用了ifort和openmp來編譯相同的代碼,現在openmp部分是segfaults。我已經削減大部分的脂肪去,寫了這個代碼片段其再現了我的錯誤openmp:使用ifort比gfortran不同的答案
!$omp parallel do schedule(dynamic) reduction(+:energy) default(private) shared(r,tr)
do i=0,listvar%ncellT-1
c1s = tr(i)%start
c1e = tr(i)%end
do j = c1s,c1e
x1 = r(j)%x; y1 = r(j)%y; z1 = r(j)%z
energy = energy + x1
enddo
enddo
!$omp end parallel do
所有這些循環的作用是訪問指針元素r中從陣列TR,然後將這些元素之間循環。但是,ifort由於某種原因將無意義的值分配給c1s和c1e,導致代碼在我遍歷r時發生段錯誤。再次,代碼與gfortran一起工作。有沒有人有任何想法,爲什麼這可能是?
這稱爲未定義的行爲。你不應該感到驚訝。 –