Я пытаюсь использовать openmp для параллелизации моего кода с помощью odeint и openmp, но когда я изменяю количество потоков, параллелизм не работает, время завершения выполнения не улучшается. Что я делаю неправильно?Использование openmp с odeint
Вот основные части кода:
using namespace boost::numeric::odeint;
using namespace std;
typedef std::vector<double> state_type;
struct ode {
void operator()(const state_type &XY , state_type &dUdt , double t) {
const size_t N = XY.size();
#pragma omp parallel for schedule(runtime)
for (size_t aux = 0; aux <= N; aux++) {
dUdt[0] = XY[1];
dUdt[1] = 2 * w * XY[3] + 3 * (w * w) * XY[0];
}
}
};
main() {
typedef runge_kutta4<
state_type , double ,
state_type , double ,
openmp_range_algebra
> rk4;
state_type XY(2);
int number_threads = 1;
omp_set_num_threads(number_threads);
int chunk_size = omp_get_max_threads();
omp_set_schedule(omp_sched_static , chunk_size);
integrate_n_steps(rk4() , ode() , XY , 0.0 , 0.00001 , 200);
}
Я надеюсь, что я достаточно ясно, я просто хотел бы иметь возможность использовать OpenMP с моим кодом.
Большое спасибо за помощь.
Переменная 'aux' не используется в этом for-loop, возможно, компилятор/время выполнения достаточно умен, чтобы заметить это (хотя должно быть предупреждение?) и ничего не распараллеливает. Существуют ли опции компилятора '-fopenmp'? –