我使用OpenMP在quadcore系统上使用4个线程加速问题.使用2个线程时效率接近1但是使用4个线程减少到一半,运行时间与使用2个线程运行代码时的运行时间大致相同.我在OpenMP论坛上搜索过,之前我发现类似的问题是因为Inter turbo boost技术.请参阅这篇文章http://openmp.org/forum/viewtopic.php?f=3&t=1289&start=0&hilit=intel+turbo+boost
所以我试图在我的机器的所有4个处理器上禁用涡轮增压,但无法解决问题.
我只从上面的链接中获取了基准代码.
我有戴尔笔记本电脑和我的硬件/操作系统信息摘要如下:
OS : Linux3.0.0.12-generic , Ubuntu
KDE SC Version : 4.7.1
Processor: Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz
Run Code Online (Sandbox Code Playgroud)
请让我知道可能存在的其他问题是什么,这些问题不允许我加速使用4个线程/核心.作为附加信息.我已经检查过所有4个线程都在不同的核心上运行.
期待您的回答.
码:
#include <stdio.h>
#include <omp.h>
#include <math.h>
double estimate_pi(double radius, int nsteps){
int i;
double h=2*radius/nsteps;
double sum=0;
for (i=1;i<nsteps;i++){
sum+=sqrt(pow(radius,2)-pow(-radius+i*h,2));
//sum+=.5*sum;
}
sum*=h;
sum=2*sum/(radius*radius);
//printf("radius:%f --> %f\n",radius,sum);
return sum;
}
int main(int argc, char* argv[]){
double ser_est,par_est;
long int radii_range;
if (argc>1) radii_range=atoi(argv[1]);
else radii_range=500;
int nthreads;
if (argc>2) nthreads=atoi(argv[2]);
else nthreads=omp_get_num_procs();
printf("Estimating …Run Code Online (Sandbox Code Playgroud)