[英]Difference between scalability and speedup?
我正在阅读我的并行系统课程的教科书,我找到了这两个流行的概念:
有人可以告诉我区别吗? 对我来说,Tseq在语义上(和实际上)等于Tpar(1)
答案后更新:
我认为我理解了差异,但我还有一个问题:我正在优化这段代码。 为了使我的并行版本平衡良好,使用了近似结果。 差异非常小,可以忽略不计,但工作量大大平衡,可扩展性大大提高。
另外,我做了一些优化,比如使用原始指针而不是原始代码中使用的原始指针(例如cv::Mat
)。
所以我的问题是:如果我使用原始代码(我链接的代码)或者像作弊那样来衡量加速?
与顺序执行相比,并行度为1的并行执行仍然会产生一些开销。 想像:
gcc code.c
./a.out
VS
gcc code.c -fopenmp
OMP_NUM_THREADS=1 ./a.out
由于需要在每个并行部分上执行的代码,后者可能会更慢,检查应该生成的线程数。
与顺序代码相比,您甚至可能需要明显不同的并行代码实现。
关于你的编辑:
最重要的是要明确和诚实地比较你所做的事情! 我认为最好的方法是将一般优化的加速与并行化工作分开。 如果您只有未优化的串行和优化并行版本,请使用优化的并行版本,例如在没有OpenMP的情况下编译,作为并行加速的基准。
Speedup告诉你并行算法比顺序算法快多少。 可伸缩性告诉您并行算法的性能在添加硬件时的行为方式。
请注意,在两个公式对你的并行算法相比不同之处:扩展性公式中,你是并行算法和N个CPU对本身的性能与1个CPU比较。 在加速公式中,您将并行算法与N CPU的性能与不同算法 (即算法的顺序版本)进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.