5

我正在使用我的 Macbook(4 个真实内核,固态磁盘)上的选项并行运行Astropy测试,该选项使用pytest-xdist并行运行〜 8000 个测试。python setup.py test --parallel N

我在 1 到 10 范围内尝试了不同N的方法,但在所有情况下,我只能获得大约 2 的加速,但我希望在 3 到 4 范围内获得加速(因为运行测试应该受 CPU 限制)。

为什么加速比低,我怎样才能获得良好的加速(在一台计算机上使用多个内核)?

更新

我尝试了来自@Iguananaut 的 ramdisk 建议: 与 SSD 相比,加速现在约为 2.2。因为我有四个物理内核,所以我希望在 3 到 4 范围内。也许出于某种原因,并行运行测试的开销非常大。 diskutil erasevolume HFS+ 'ramdisk' hdiutil attach -nomount ram://8388608 mkdir /Volumes/ramdisk/tmp time python setup.py test -a '--basetemp=/Volumes/ramdisk/tmp' --parallel 8

4

1 回答 1

2

我怀疑SSD是那里的限制因素。许多测试都受 CPU 限制,但也有很多测试会占用大量磁盘——临时文件等。通过并行运行,这些可能会变得更慢。除此之外,很难说太多,因为它取决于您的环境的具体情况。我在六个核心上运行测试得到了显着的加速。不完全是 6 倍,但确实有所作为。

您可能会尝试的一件事是制作一个 ramdisk 以设置为您的临时目录。您可以在 OSX 中使用diskutil. 如果你不确定,你可以谷歌如何做到这一点。然后你应该可以运行了./setup.py test -A '--basetemp=path/to/ramdisk'。我实际上并没有在 Astropy 测试中尝试过,并且不确定它是如何工作的。但如果它确实有效,它至少有助于在一定程度上排除 I/O 作为瓶颈。

那就是说我故意对它可能有多大帮助一厢情愿。即使使用 ramdisk——现在你的 RAM 速度正在成为 I/O 绑定测试的瓶颈。无论您拥有多少 CPU,所有 CPU 密集型测试都可以立即完成,并且 I/O 密集型测试不会变得更快,因此您仍然需要等待同样长的时间(或几乎一样长的时间)结束)。使用多处理时,进程之间的消息传递也会产生额外的开销——确切的执行方式取决于很多因素,但最有可能是通过一些共享内存。阅读本文的任何人也无法知道您的机器上正在运行哪些其他进程可能会争用相同的资源。即使您的系统监视器没有显示任何大量使用 CPU 的东西,那也不会

TL; DR 我不会认为没有与你扔给它的 corse 数量成正比的加速,尤其是在笔记本电脑之类的东西上。

于 2014-04-21T03:43:02.403 回答