为什么使用pytest-xdist进行Astropy并行测试没有好的加速?

时间:2014-04-19 15:52:22

标签: pytest parallel-testing astropy

我在Macbook上使用python setup.py test --parallel N选项运行Astropy tests in parallel(4个真核,固态磁盘),它使用pytest-xdist并行运行~8000个测试

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

为什么加速比较低,如何获得良好的加速(在一台计算机上使用多个内核)?

更新

我尝试了来自@Iguananaut的ramdisk建议: 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 与SSD相比,现在的加速比为~2.2。 由于我有四个物理核心,我期望在3到4的范围内。 也许并行运行测试的开销非常大。

1 个答案:

答案 0 :(得分:2)

我怀疑SSD是那里的限制因素。许多测试都受CPU限制,但同样多的测试使用大量磁盘 - 临时文件等。通过并行运行可能会使速度更慢。除此之外,很难说很多,因为它取决于你的环境的细节。我在六核上运行测试得到了显着的加速。不是6倍,但确实有所作为。

您可能尝试的一件事是将ramdisk设置为临时目录。您可以在OSX中使用diskutil执行此操作。如果您不确定,Google可以如何执行此操作。然后你应该能够运行./setup.py test -A '--basetemp=path/to/ramdisk'。我实际上没有尝试使用Astropy测试,但我不确定它是如何工作的。但如果它确实有效,它至少会在某种程度上帮助排除I / O作为瓶颈。

那就是说我故意想要多少才能提供帮助。即使使用ramdisk - 现在你的RAM速度正成为I / O绑定测试的瓶颈。无论你拥有多少CPU,所有CPU绑定测试都可以立即完成,并且I / O绑定测试不会更快,所以你仍然需要等待一段时间(或几乎同样长)他们完成)。通过多处理,进程之间的消息传递也会产生额外的开销 - 具体如何执行此操作取决于很多因素,但最有可能通过某些共享内存。阅读此内容的任何人也无法知道您的计算机上正在运行哪些其他进程可能会争用相同的资源。即使您的系统监视器没有显示任何大量使用CPU的情况,但这并不意味着没有任何进程可以处理其他会增加某些瓶颈的事情。

TL; DR我不会让你的加速与你投入的科学数量成正比,尤其是像笔记本电脑那样。