openmp를 약간 새로 고쳐서이 이상한 상황에 처하게됩니다. 무리를 음모, 나는이 문제 맥에 플래그를 지정하지 않은, gfortran 4.3.4와간단한 프로그램을 위해 -fopenmp를 사용하는 segfault
program ex2
implicit none
integer, parameter :: n=10000000
integer :: i
real :: x(n)
do i=1,n
x(i) = 0.0d0
enddo
end program
(10.6에게) 보여주고 컴파일하고 프로그램이 제대로 실행이 최소한의 사소한 사건을 만들었습니다.
그러나 openmp와 -fopenmp를 함께 사용하면 프로그램이 세그먼트 화 오류로 종료됩니다. 코드가 즉시 실행되면서 코드가 실행되지 않습니다. 아시다시피 openmp는 코드를 병렬 처리하는 데 사용되지 않습니다. 나는 ulimit -fmax-stack-var-size를 사용하여 스택 크기를 수정하려고 시도했다. 그리고 어떤 경우에는 10 억 개의 실수가 큰 배열을 정의하지 않는다.
내가 뭘 잘못하고 있니?
나를 위해 작동하지만 -stack_addr 사양 만 제거하면됩니다. 나는 페이지 제로 세그먼트와 스택 세그먼트 사이의 세그먼트 오버랩을 얻는다. stack_size를 지정하면 스택 주소가 컴파일러에 의해 정렬 된 상태로 남을 것입니다. –