2014-02-27 2 views
1

C에서 함수를 사용하여 pragma omp for 루프에서 schedule 유형을 변경하는 방법이 있습니까? 병렬 문 앞에 setenv("OMP_SCHEDULE", "guided", 1);을 수행하려했으나, 내 코드에서 얻은 시간이 매우 비슷하기 때문에 완전히 작동하는지 확실하지 않습니다. , auto 등을 setenv 함수의 문자열로 사용하여 for 루프를 사용하여 시간을 비교하는 일정 유형을 변경하는 것입니다.C, OpenMP, 일정 유형 변경, setenv

+1

일정 (런타임)을 사용하고 OMP_SCHEDULE을 설정하십시오. 이 대답의 마지막 단락을 참조하십시오. http://stackoverflow.com/questions/10850155/openmp-for-schedule/10852852#10852852 –

답변

2

schedule (runtime)을 사용하고 OMP_SCHEDULE을 설정할 수 있습니다.

https://computing.llnl.gov/tutorials/openMP/

RUNTIME 에서 스케줄링 결정은 환경 변수 OMP_SCHEDULE 의해 실행까지 지연된다. 이 절의 청크 크기를 지정하는 것은 불법입니다.

은 미리 컴파일 된 코드는 최종 사용자가 일정을 제어 할 수 있다면 좋을 텐데 다양한 플랫폼에서 실행할 수 없었기 때문에 그는 이미 여기 OpenMP: for schedule

그것을 가장 말했다 때문에 나를 그냥 흐리 스토 일리 예프을 인용 보자. 이것이 OpenMP가 특별한 스케줄 (런타임) 절을 제공하는 이유입니다. 런타임 스케줄링을 사용하면 유형은 OMP_SCHEDULE 환경 변수의 내용에서 가져옵니다. 이를 통해 응용 프로그램을 다시 컴파일하지 않고도 다른 스케줄링 유형을 테스트 할 수 있으며 최종 사용자가 자신의 플랫폼을 미세 조정할 수 있습니다.

+0

schedule (runtime)은 루프가 호출 될 때마다 환경 변수가 읽히도록 보장합니까? 시작시 변수가 런타임에서 한 번 읽힐 수 있습니까? – pburka

0

표준 방법은 없지만 Intel의 라이브러리를 사용하는 경우 kmp_set_defaults() 확장자를 사용할 수 있습니다. 이 옵션은 | 문자로 분리 된 옵션 문자열을 사용하며 기본 OpenMP 비헤이비어를 무시합니다. 귀하의 예에서는 kmp_set_defaults("OMP_SCHEDULE=guided")가 원하는 것을 성취해야합니다.