小编use*_*200的帖子

OpenMP和C并行for循环:为什么我的代码在使用OpenMP时会变慢?

我是新手,也是C语言的初级程序员.我在使用openmp加速for循环方面遇到了一些问题.以下是简单的例子:

#include <stdlib.h>
#include <stdio.h>
#include <gsl/gsl_rng.h>
#include <omp.h>

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 );
  }
}
Run Code Online (Sandbox Code Playgroud)

代码从M个迭代的伽马随机分布中提取.事实证明,使用openmp(选项1)的并行方法大约需要1分钟,而顺序方法(选项2)只需要20秒.使用openmp运行时,我可以看到CPU使用率为800%(我使用的服务器有8个CPU).系统是使用GCC 4.1.3的linux.我正在使用的编译命令是gcc -fopenmp -lgsl -lgslcblas -lm(我正在使用GSL)

难道我做错了什么?请帮我!谢谢!

PS正如一些用户所指出的,它可能是由rng引起的.但即使我更换

tmp=gsl_ran_gamma_mt(rng, 4, 1./3 );
Run Code Online (Sandbox Code Playgroud)

通过说

tmp=1000*10000;
Run Code Online (Sandbox Code Playgroud)

问题仍然存在......

c gcc openmp

9
推荐指数
2
解决办法
2383
查看次数

标签 统计

c ×1

gcc ×1

openmp ×1