我正在对软件进行基准测试,该软件在 Intel 2670QM 上的执行速度比使用全部 8 个“逻辑”线程的串行版本快 4 倍。我想要一些社区反馈我对基准测试结果的看法s.
当我在 4 个核心上使用 4 个线程时,速度提高了 4 倍,整个算法是并行执行的。这对我来说似乎是合乎逻辑的,因为“阿姆达尔定律”预测了这一点。 Windows 任务管理器告诉我我正在使用 50% 的 CPU。
然而,如果我在所有 8 个线程上执行相同的软件,我会再次获得 4 倍的加速,not速度提高了 8 倍。
如果我理解正确的话:我的 CPU 有 4 个核心,频率分别为 2.2GHZ,但当应用于 8 个“逻辑”线程时,频率被划分为 1.1GHZ,其余组件(例如高速缓存)也是如此?如果这是真的,那么为什么任务管理器声称我的 CPU 只使用了 50%?
#define NumberOfFiles 8
...
char startLetter ='a';
#pragma omp parallel for shared(startLetter)
for(int f=0; f<NumberOfFiles; f++){
...
}
我不包括使用磁盘 I/O 的时间。我只对 STL 调用所花费的时间(STL 排序)感兴趣,而不是磁盘 I/O。
A i7-2670QM http://ark.intel.com/products/53469处理器有 4 个核心。但它可以并行运行8个线程。
这意味着它只有 4 个处理单元(核心),但硬件支持并行运行 8 个线程。这意味着最多有四个作业在核心上运行,如果其中一个作业由于内存访问等原因而停滞,另一个线程可以非常快速地开始在空闲核心上执行,而几乎没有什么损失。阅读有关超线程的更多信息 http://en.wikipedia.org/wiki/Hyper-threading。在现实中,超线程能够带来巨大性能提升的场景很少。更现代的处理器比旧处理器更好地处理超线程。
您的基准测试表明它受 CPU 限制,即管道中几乎没有停顿,这会给超线程带来优势。 50% CPU 是正确的,即 4 个核心正在工作,而 4 个额外核心没有执行任何操作。在 BIOS 中打开超线程,您将看到 CPU 为 100%。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)