История изменений
Исправление
Crocodoom,
(текущая версия)
:
это будет очень похоже на то что делает openMP по умолчанию (один из вариантов), но без балансировки
Вы правы. Но с двойным циклом вроде можно[1] итерироваться по
I
вместо i
. Массив Is
кстати лучше выкинуть, тогда будет не особо больше букв. Что-то типа:
#pragma omp parallel for
for(int t = 0; t < T; ++t) {
for(iterator_t I_t = I(t*N/T); I_t < I((t+1)*N/T); ++I_t){
//Работаем с итератором I_t
}
}
Если уж вы пользуетесь итераторами, надо стремиться избавлятся от обхода массива по int i
. Иначе вообще непонятно, нафига городить огород.
[1] Судя по SO, OpenMP 3.0 поддерживает parallel for
для итераторов, но каждый тред будет проходить весь массив, что не эффективно. Двойной цикл позволит избавиться от этого оверхеда.
P.S. Окончательно избавиться от int i
в интерфейсе и обходиться только I
тоже возможно.
Исходная версия
Crocodoom,
:
это будет очень похоже на то что делает openMP по умолчанию (один из вариантов), но без балансировки
Вы правы. Но с двойным циклом вроде можно[1] итерироваться по
I
вместо i
. Массив Is
кстати лучше выкинуть, тогда будет не особо больше букв. Что-то типа:
#pragma omp parallel for
for(int t = 0; t < T; ++t) {
for(iterator_t I_t = I(t*N/T); I_t < I((t+1)*N/T); ++I_t){
//Работаем с итератором I_t
}
}
Если уж вы пользуетесь итераторами, надо стремиться избавлятся от обхода массива по int i
. Иначе вообще непонятно, нафига городить огород.
[1] Судя по SO, OpenMP 3.0 поддерживает parallel for
для итераторов, но каждый тред будет проходить весь массив, что не эффективно. Двойной цикл позволит избавиться от этого оверхеда.