program test1
INTEGER :: q, CAPQ, ingrid(1:6), outgrid(1:10)
ingrid = (/1,2,3,4,5,6/)
outgrid = 0
CAPQ = 6
DO q=1,CAPQ
outgrid(q) = ingrid(q)
ENDDO
END
을하지만, 나는 그것이 습관 자동 병렬화 IT 빌드 할 때 이유는
색인 변수 Q가있는 루프는 너무 복잡하여 간략하게 분석 할 수없는 간접 메모리 참조가 포함되어 있기 때문에 병렬 처리 할 수 없습니다.
하지만 이것은 매우 간단한 메모리 액세스입니다. 배열에서 번호를 호출하여 다른 번호에 배치하기 만합니다. 어떤 순서로 발생하는지는 중요하지 않으므로 병렬화 될 수 있습니다.
컴파일러는 잘못된 공유가 발생할 수 있으므로 서로 128 바이트 내에 저장되는 스레드와의 병렬 처리를 피해야합니다. – tim18
병렬 처리를 금지하지 않기 위해이 문제를 해결할 수있는 방법이 있습니까? –
OpenMP에 대한 참조를 삭제했습니다. OpenMP는 자동 병렬화를 다루지 않으며, absoft pro가 자동 병렬화를 위해 OpenMP를 사용한다는 참조를 찾을 수 없습니다. OpenMP와 정말로 관련이 있다고 생각하는지 명확히하십시오. – Zulan