joblib parallel compuction time
Joblib 用于并行计算,njob>1(njob=2 完成需要 12.6 秒)比 njob=1(1.3 秒完成)花费更多时间。我在 16GB RAM 的 mac OSX 10.9 中。我做错了什么吗?这是一个简单的演示代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from joblib import Parallel, delayed def func(): for i in range(200): for j in range(300): yield i, j def evaluate(x): if __name__ == ‘__main__’: |
简短的回答:Joblib 是一个多处理系统,并且在为 3 个同时作业的每一个启动一个新的 python 进程时有相当多的开销。因此,如果您添加更多作业,您的特定代码可能会变得更慢。
这里有一些关于此的文档。
解决方法不是很好:
也就是说,对于需要很长时间的函数,多处理通常是值得的。根据您的应用程序,这确实是一个判断电话。请注意,函数中使用的每个变量都被复制到每个进程中——变量复制在 python 中很少见,所以这可能是一个惊喜。因此,开销部分取决于显式或隐式传递的变量大小(例如,通过使用全局变量)。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/267846.html