gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:06:03 27 4
gpt4 key购买 nike

我试图指出使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com