我试图指出使用 OpenMP 的串行和并行程序之间的区别。我在科学 Linux 上工作。 这是一个简单的程序,执行求和和乘法,然后对结果求和。
我使用函数 omp_get_wtime()
来检查执行时间,结果是并行部分比串行部分运行得更慢。
我认为问题出在案例中,因为两个线程都进入了开关,这增加了执行时间。
我希望第一个线程进行求和,第二个线程进行乘法运算,以加快最终结果的速度。你能帮帮我吗?
在我使用的程序的开头:
#define NUM_THREADS 2
...
omp_set_num_threads(NUM_THREADS);
这是程序:
double a,b,c,d,g,timer,timer2;
printf("Insert 2 numbers \n"); cin >> a; cin >> b;
timer = omp_get_wtime();
c = a+b;
d = a*b;
g = c+d;
printf("the result is: %f\n\n",g);
printf("time: %f seconds\n\n",omp_get_wtime()-timer);
timer2 = omp_get_wtime();
#pragma omp parallel
{
switch ( omp_get_thread_num() )
{
case 1: c=a+b;
case 2: d=a*b;
}
}
g = c+d;
printf("parallel time: %f seconds\n\n",g,omp_get_wtime()-timer2);
最佳答案
旋转线程和分配工作会产生一些持续的开销。对于像乘法这样的单个简单运算,这种开销远远超过并行执行运算所节省的时间。
如果您给线程一些实际工作要做,您就更有可能看到好处。
关于c++ - 我无法通过程序的并行化进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140667/