si uso paralelo bucles for anidados como esto:OpenMP paralelo bucles for anidados vs paralelo interno para
#pragma omp parallel for schedule(dynamic,1)
for (int x = 0; x < x_max; ++x) {
#pragma omp parallel for schedule(dynamic,1)
for (int y = 0; y < y_max; ++y) {
//parallelize this code here
}
//IMPORTANT: no code in here
}
es esto equivale a:
for (int x = 0; x < x_max; ++x) {
#pragma omp parallel for schedule(dynamic,1)
for (int y = 0; y < y_max; ++y) {
//parallelize this code here
}
//IMPORTANT: no code in here
}
es el paralelo externa para hacer otra cosa que creando una nueva tarea?
Estoy usando VS2008, así que no creo que pueda usar el colapso, pensé en hacerlo de la segunda forma que mencionaste, pero esperaba no tener que cambiar el código significativamente. Es para un rastreador de rayos, por lo que algunos rayos primarios pueden tardar hasta 10 veces más que otros. –
Aparentemente incluso VS2010 solo admite OpenMP 2.0. –
ok, lo implementé de la segunda manera, con suerte MS se pondrá al día eventualmente ... –