나는 최근에 컴파일러 관련 openmp 문제가 발생했습니다. openmp 및 gfortran을 사용하여 올바르게 작동하는 코드를 작성했습니다. 나는 최근에 ifort와 openmp를 사용하여 같은 코드를 컴파일했고, 이제 openmp 섹션은 segfaults를 사용한다. 나는 멀리 지방의 대부분을 절단하고 그 요소들 사이의 루프를 내 오류이 모든 루프가 수행openmp : gfortran보다 ifort를 사용하는 다른 대답
!$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을 반복 할 때 코드가 segfault가됩니다. 다시 말하지만 코드는 gfortran과 함께 작동합니다. 왜 이런 사람이 있을지 아무도 모른다.
이것은 정의되지 않은 동작입니다. 당신은 전혀 놀랄 필요가 없습니다. –