조건에 따라 schedule(static)
또는 schedule(dynamic, 10)
을 사용하여 실행할 수있는 for 루프가 있습니다. 현재 내 코드 (자신을 반복하지 마십시오) 충분하고 다음 반복이 이전 기능 수용 할 DRY되지 않습니다 :이 스레드를 읽은 후openMP 조건부 pragma "else else"
boolean isDynamic; //can be true or false
if(isDynamic){
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(dynamic, 10)
for(...){
//for code inside
}
}else{
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(static)
for(...){
//SAME for code inside, in fact, this is the EXACT same for as before
}
}
을, 나는 OpenMP를이 #if(expression)
프라그를 가지고 나타났습니다 :
- OpenMP: conditional use of #pragma
- http://msdn.microsoft.com/en-us/library/5187hzke.aspx
- Choose OpenMP pragma according to condition
- 나는 내 문제로 많은 사람들을 본 적이 있지만,3210
- http://openmp.org/mp-documents/ntu-vanderpas.pdf
는하지만, 일반적인 솔루션을 부족한 것 같습니다. 가장 좋은 해결책은 for 루프의 본문을 함수로 변환 한 다음 함수를 호출하는 것입니다. 그러나이 솔루션은 나에게 충분하지 않습니다.
OpenMP에는 #if(expression) else
종류의 pragma가 있습니까?
#if(isDynamic)pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(dynamic, 10)
else
pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(static)
을 아니면 별도의 함수로 루프 본문 내를 배치하고 그런 식으로 전화를 강제 이니 뭔가처럼?
나는이 제안에 대해 이야기하고 있다고 가정합니다 (http://stackoverflow.com/questions/4085595/conditional-pragma-omp/4087196#4087196). Tbh, 나는 컴파일하는 것조차 생각하지 않는다. OMP_FOR도 정의되지 않았다. OMP_SCHEDULE이가는 한 그것에 대해서는 전혀 몰랐습니다. 나는 주변을 둘러보고 내가 찾을 수있는 것을 보게 될 것이다. –