ฉันไม่แน่ใจว่าสิ่งนี้นับเป็นปัญหาระบบปฏิบัติการมากกว่าหรือไม่ แต่ฉันคิดว่าฉันจะถามที่นี่ในกรณีที่ใครก็ตามมีความเข้าใจบางอย่างจากจุดสิ้นสุดของ Python
ฉันพยายามขนานfor
ลูปที่ใช้CPU หนักjoblib
แต่ฉันพบว่าแทนที่จะกำหนดให้แต่ละกระบวนการของผู้ปฏิบัติงานถูกกำหนดให้กับคอร์ที่แตกต่างกันฉันพบว่ากระบวนการทั้งหมดถูกกำหนดให้อยู่ในคอร์เดียวกันและไม่มีการเพิ่มประสิทธิภาพ
นี่เป็นตัวอย่างที่ไม่สำคัญมาก ...
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()
... และนี่คือสิ่งที่ฉันเห็นในhtop
ขณะที่สคริปต์นี้กำลังทำงาน:
ฉันใช้ Ubuntu 12.10 (3.5.0-26) บนแล็ปท็อปที่มี 4 คอร์ เห็นได้ชัดว่าjoblib.Parallel
กำลังวางไข่กระบวนการแยกกันสำหรับคนงานที่แตกต่างกัน แต่มีวิธีใดบ้างที่ฉันสามารถทำให้กระบวนการเหล่านี้ดำเนินการบนคอร์ที่ต่างกันได้