我在这里是一个新手,并且是C语言的初级程序员。我在使用openmp加速for循环时遇到了一些问题。下面是一个简单的例子:OpenMP和C并行循环:为什么我的代码在使用OpenMP时变慢?
#include
#include
#include
#include
gsl_rng *rng;
main()
{
int i, M=100000000;
double tmp;
/* initialize RNG */
gsl_rng_env_setup();
rng = gsl_rng_alloc (gsl_rng_taus);
gsl_rng_set (rng,(unsigned long int)791526599);
// option 1: parallel
#pragma omp parallel for default(shared) private(i, tmp) schedule(dynamic)
for(i=0;i<=M-1;i++){
tmp=gsl_ran_gamma_mt(rng, 4, 1./3);
}
// option 2: sequential
for(i=0;i<=M-1;i++){
tmp=gsl_ran_gamma_mt(rng, 4, 1./3);
}
}
该代码从M次迭代的伽马随机分布绘制。事实证明,使用openmp(选项1)的并行方法大约需要1分钟,而顺序方法(选项2)仅需要20秒。当使用open