可扩展性和加速之间的区别?

时间:2017-05-30 10:37:42

标签: performance parallel-processing scalability

我正在阅读我的并行系统课程的教科书,我找到了这两个流行的概念:

enter image description here

有人可以告诉我区别吗?对我来说,Tseq在语义上(和实际上)等于Tpar(1)

回答后更新:

我认为我了解其中的差异,但我还有一个问题:我正在优化this代码。为了使我的并行版本平衡良好,使用了近似结果。区别是非常小,可以忽略不计,但工作负载大大平衡,可扩展性大大提高。

此外,我做了一些优化,比如使用原始指针而不是原始代码中使用的原始指针(例如cv::Mat)。

所以我的问题是:如果我使用原始代码(我链接的代码)或者像作弊那样来衡量加速?

2 个答案:

答案 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的性能与不同算法(即算法的顺序版本)进行比较。