我试图用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);
答案 0 :(得分:4)
启动线程和分配工作有一些不断的开销。对于像乘法一样的单个操作,这种开销远远超过了并行执行操作所节省的时间。
如果你给线程一些实际的工作要做,你就更有可能看到好处。