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

标签 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);

最佳答案

旋转线程和分配工作会产生一些持续的开销。对于像乘法这样的单个简单运算,这种开销远远超过并行执行运算所节省的时间。

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

关于c++ - 我无法通过程序的并行化进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140667/

相关文章:

c++ builder, label.caption, std::string 到 unicode 转换

c++ - 为什么 std::queue 在使用 swap() 时不释放内存?

c++ - 使用lua协程api和lua_close时出现段错误

OpenMP 的代码执行速度较慢

c++ - 使用 C++ AMP 处理大型数组(65536+ 个元素)

python - 在 pandas groupby 之后并行化应用

c++ - 全局变量和对象变量之间的速度差异

optimization - N 个向量的内存布局

c++ - Eigen:OpenMP 的拆分数组

c - 具有功能的多个进程