ওএস ইস্যু হিসাবে এটি আরও বেশি গণ্য হয়েছে কিনা তা আমি নিশ্চিত নই, তবে আমি ভেবেছিলাম যে বিষয়গুলির পাইথনের শেষের দিক থেকে যদি কারও কিছু অন্তর্দৃষ্টি থাকে তবে আমি এখানে জিজ্ঞাসা করব।
আমি সিপিইউ-ভারী for
লুপটি ব্যবহার করে সমান্তরাল করার চেষ্টা করেছি 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
এই স্ক্রিপ্টটি চলাকালীন আমি এখানে যা দেখতে পাচ্ছি তা এখানে :
আমি 4 টি কোর সহ ল্যাপটপে উবুন্টু 12.10 (3.5.0-26) চালাচ্ছি। স্পষ্টতই joblib.Parallel
বিভিন্ন শ্রমিকদের জন্য পৃথক প্রক্রিয়া তৈরি করা হচ্ছে, তবে কি কোনও উপায় আছে যে আমি এই প্রক্রিয়াগুলি বিভিন্ন কোরে কার্যকর করতে পারি?