我正在尝试使用openmp来使用odeint和openmp并行化我的代码,但是当我更改线程数时,并行性不起作用,完成执行的时间并没有改善。我做错了什么?
以下是代码的基本部分:
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。
非常感谢你的帮助。
答案 0 :(得分:0)
你的州的大小为2.这太小了,不能指望并行化有任何改进。尝试使用类似~1000变量的示例,看看是否有一些改进......