Bir koşula bağlı olarak schedule(static)
veya schedule(dynamic, 10)
kullanarak yürütülebilen bir for döngüsüm var. Şu anda, Kodum (Kendini tekrar etme) yeterince ve aşağıdaki tekrarını sahiptir önceki işlevselliği içerecek şekilde KURU değildir: bu konuları okuduktan sonraopenMP koşullu pragma "if 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
}
}
, ben OpenMP bir #if(expression)
pragma olduğunu fark:
- OpenMP: conditional use of #pragma
- http://msdn.microsoft.com/en-us/library/5187hzke.aspx
- Choose OpenMP pragma according to condition
- Benim problem ile insan gördüm rağmen
- http://openmp.org/mp-documents/ntu-vanderpas.pdf
Ama genel bir çözüm eksik gibi görünüyor. En iyi çözüm, for döngüsünün gövdesini bir fonksiyona dönüştürmektir ve daha sonra aranan işleve sahip olmaktır, ancak bu çözüm benim için yeterince iyi değildir.
Açıkçası, OpenMP'nin #if(expression) else
türünde bir pragma var mı?
#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)
Ya ayrı fonksiyonu içine döngü vücut için yerimi ve bu şekilde aramak zorunda değilim: şey gibi?
Bu öneri hakkında konuştuğunuzu varsayalım (http://stackoverflow.com/questions/4085595/conditional-pragma-omp/4087196#4087196). Tbh, derlemenin bile OMP_FOR'un bile tanımlanmadığını sanmıyorum. OMP_SCHEDULE kadarıyla ilgili hiçbir fikrim yoktu. Etrafa bakıp neyi bulabileceğimi görmeye çalışacağım, thx! –