2017-08-04 58 views

回答

1

缓存失效是一个很大的问题。让我们假设每个核心将在两个线程上工作。当一个线程换出另一个线程时,所有的缓存条目都将失效,因此需要从新线程的更高级缓存或主内存中加载数据。这会降低处理速度。如果将线程数保持为8,但不会保证不会发生这种情况,但机会较少(在多处理环境中,任何时候新进程移到内核上都会发生)。

+0

另外,考虑到OpenMP运行时(至少LLVM和英特尔编译器所使用的[其实是相同的:-)])具有默认设置,在没有超额订购时运行良好。特别是他们让工作线程在各个地方旋转了一段时间(例如进入障碍时),而不是立即进入内核,因为这样可以在没有超额订阅时提高性能。但是,一旦你超额认购它是不好的!所以你需要设置KMP_BLOCKTIME = 0,如果你打算用这些编译器来做到这一点! –