我正在阅读我的并行系统课程的教科书,我找到了这两个流行的概念:
有人可以告诉我区别吗?对我来说,Tseq在语义上(和实际上)等于Tpar(1)
回答后更新:
我认为我了解其中的差异,但我还有一个问题:我正在优化this代码。为了使我的并行版本平衡良好,使用了近似结果。区别是非常小,可以忽略不计,但工作负载大大平衡,可扩展性大大提高。
此外,我做了一些优化,比如使用原始指针而不是原始代码中使用的原始指针(例如cv::Mat
)。
所以我的问题是:如果我使用原始代码(我链接的代码)或者像作弊那样来衡量加速?
答案 0 :(得分:5)
与顺序执行相比,并行度为1的并行执行仍然会产生一些开销。想象:
gcc code.c
./a.out
VS
gcc code.c -fopenmp
OMP_NUM_THREADS=1 ./a.out
由于需要在每个并行部分执行的代码,后者可能会变慢,检查应该生成的线程数。
与顺序代码相比,您甚至可能需要明显不同的并行代码实现。
关于你的编辑:
最重要的是要清楚明白你所比较的内容!我认为最好的方法是将一般优化的加速与并行化工作分开。如果您只有未经优化的串行和优化并行版本,请使用优化的并行版本,例如编译时没有OpenMP作为并行加速的基准。
答案 1 :(得分:2)
Speedup告诉你并行算法比顺序算法快多少。可伸缩性告诉您并行算法的性能在添加硬件时的行为方式。
请注意两个公式中与 比较并行算法的区别:在可伸缩性公式中,您将并行算法的性能与N CPU的性能进行比较本身 1个CPU。在加速公式中,您将并行算法与N CPU的性能与不同算法(即算法的顺序版本)进行比较。