gpt4 book ai didi

python - 使用 joblib 会使程序运行得更慢,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:21 35 4
gpt4 key购买 nike

我在 for 循环中有许多小任务要做。我想使用并发来加速它。我使用 joblib 因为它易于集成。但是,我发现使用 joblib 使我的程序运行速度比简单的 for 迭代要慢得多。这是演示代码:

import time
import random
from os import path
import tempfile
import numpy as np
import gc
from joblib import Parallel, delayed, load, dump

def func(a, i):
'''a simple task for demonstration'''
a[i] = random.random()

def memmap(a):
'''use memory mapping to prevent memory allocation for each worker'''
tmp_dir = tempfile.mkdtemp()
mmap_fn = path.join(tmp_dir, 'a.mmap')
print 'mmap file:', mmap_fn
_ = dump(a, mmap_fn) # dump
a_mmap = load(mmap_fn, 'r+') # load
del a
gc.collect()
return a_mmap

if __name__ == '__main__':
N = 10000
a = np.zeros(N)

# memory mapping
a = memmap(a)

# parfor
t0 = time.time()
Parallel(n_jobs=4)(delayed(func)(a, i) for i in xrange(N))
t1 = time.time()-t0

# for
t0 = time.time()
[func(a, i) for i in xrange(N)]
t2 = time.time()-t0

# joblib time vs for time
print t1, t2

在我的笔记本电脑上,i5-2520M CPU,4 核,Win7 64 位,joblib 的运行时间是6.464s,简单的 for 循环。

我将参数作为内存映射来防止为每个工作人员重新分配的开销。我红了这个亲戚post ,仍然没有解决我的问题。为什么会这样?我是否错过了正确使用 joblib 的一些纪律?

最佳答案

“许多小任务”不适合 joblib。任务粒度越粗,joblib 导致的开销越少,您将从中获得更多好处。对于微型任务,设置工作进程和向它们传输数据的成本将超过并行化带来的任何好处。

关于python - 使用 joblib 会使程序运行得更慢,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24382744/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com