我无法通过程序的并行化进行优化

时间:2012-02-04 11:56:36

标签: c++ openmp parallel-processing

我试图用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);

1 个答案:

答案 0 :(得分:4)

启动线程和分配工作有一些不断的开销。对于像乘法一样的单个操作,这种开销远远超过了并行执行操作所节省的时间。

如果你给线程一些实际的工作要做,你就更有可能看到好处。