Tôi không chắc liệu đây có phải là vấn đề của hệ điều hành hay không, nhưng tôi nghĩ tôi sẽ hỏi ở đây trong trường hợp bất cứ ai có cái nhìn sâu sắc từ phần cuối của Python.
Tôi đã cố gắng song song hóa một for
vòng lặp nặng CPU joblib
, nhưng tôi thấy rằng thay vì mỗi quy trình công nhân được gán cho một lõi khác nhau, tôi kết thúc với tất cả chúng được gán cho cùng một lõi và không tăng hiệu năng.
Đây là một ví dụ rất tầm thường ...
from joblib import Parallel,delayed
import numpy as np
def testfunc(data):
# some very boneheaded CPU work
for nn in xrange(1000):
for ii in data[0,:]:
for jj in data[1,:]:
ii*jj
def run(niter=10):
data = (np.random.randn(2,100) for ii in xrange(niter))
pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all')
results = pool(delayed(testfunc)(dd) for dd in data)
if __name__ == '__main__':
run()
... Và đây là những gì tôi thấy trong htop
khi tập lệnh này đang chạy:
Tôi đang chạy Ubuntu 12.10 (3.5.0-26) trên máy tính xách tay có 4 lõi. Rõ ràng joblib.Parallel
là sinh ra các quy trình riêng biệt cho các công nhân khác nhau, nhưng có cách nào để tôi có thể thực hiện các quy trình này trên các lõi khác nhau không?