可伸缩性和加速之间的区别?

jus*_*rld 2 parallel-processing performance scalability

我正在阅读并行系统课程的教科书,发现了以下两个流行的概念:

在此处输入图片说明

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

回答后更新:

我认为我了解差异,但是仍然有一个问题:我正在优化代码。为了使我的并行版本很好地平衡,使用了近似结果。所不同的是非常小,被认为是微不足道的,但工作量大大平衡和可扩展性,从它极大地提高。

另外,我做了一些优化,例如使用原始指针而不是cv::Mat原始代码所基于的原始数据结构(例如)。

所以我的问题是:要衡量加速率,我应该使用原始代码(我链接的代码)还是想作弊?

Zul*_*lan 5

与顺序执行相比,并行度为1的并行执行仍会产生一些开销。想像:

gcc code.c
./a.out
Run Code Online (Sandbox Code Playgroud)

gcc code.c -fopenmp
OMP_NUM_THREADS=1 ./a.out
Run Code Online (Sandbox Code Playgroud)

由于需要在每个并行部分上执行代码,并检查应产生的线程数,因此后者可能较慢。

与顺序代码相比,您甚至可能要求并行代码的实现截然不同。

关于您的编辑:

最重要的是要对所比较的内容保持清晰和诚实!我认为最好的方法是将一般优化的加速与并行化工作分开。如果您只有未优化的串行版本和优化的并行版本,请使用优化的并行版本,例如在没有OpenMP的情况下编译为并行加速的基准。