নম্পির বেশিরভাগ ফাংশন ডিফল্টরূপে মাল্টিথ্রেডিং সক্ষম করবে।
উদাহরণস্বরূপ, আমি যদি একটি স্ক্রিপ্ট চালনা করি তবে আমি 8-কোর ইন্টেল সিপিইউ ওয়ার্কস্টেশনটিতে কাজ করি
import numpy as np
x=np.random.random(1000000)
for i in range(100000):
np.sqrt(x)
লিনাক্স top
চলমান চলাকালীন 800% সিপিইউ ব্যবহার দেখায়
যার অর্থ নম্পীটি স্বয়ংক্রিয়ভাবে সনাক্ত করে যে আমার ওয়ার্কস্টেশনটিতে 8 টি কোর রয়েছে এবং np.sqrt
স্বয়ংক্রিয়ভাবে সমস্ত 8 টি কোর ব্যবহারের গতি বাড়ানোর জন্য ব্যবহার করবে।
তবে আমি একটি অদ্ভুত বাগ পেয়েছি। আমি যদি স্ক্রিপ্ট চালাই
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.random((10,10)))
df+df
x=np.random.random(1000000)
for i in range(100000):
np.sqrt(x)
সিপিইউ ব্যবহার 100% !! এর অর্থ হ'ল যদি আপনি কোনও নিম্পী ক্রিয়াকলাপ চালানোর আগে দুটি পান্ডাস ডেটাফ্রেম যোগ করেন তবে নমপির অটো মাল্টিথ্রেডিং বৈশিষ্ট্যটি কোনও সতর্কতা ছাড়াই চলে যায়! এটি একেবারে যুক্তিসঙ্গত নয়, পান্ডাস ডেটা ফ্রেমের গণনা নম্পি থ্রেডিং সেটিংকে কেন প্রভাব ফেলবে? এটা কি বাগ? কিভাবে এই চারপাশে কাজ?
পুনশ্চ:
আমি লিনাক্স perf
সরঞ্জাম ব্যবহার করে আরও খনন করি ।
প্রথম স্ক্রিপ্ট শো চলছে
দ্বিতীয় স্ক্রিপ্ট শো চলাকালীন
সুতরাং উভয় স্ক্রিপ্ট জড়িত libmkl_vml_avx2.so
, প্রথম স্ক্রিপ্ট অতিরিক্ত জড়িতlibiomp5.so
যা ওপেনএমপি সম্পর্কিত বলে মনে হচ্ছে।
এবং যেহেতু ভিএমএল মানে ইনটেল ভেক্টর ম্যাথ লাইব্রেরি, সুতরাং ভিএমএল ডক অনুসারে আমার ধারণা কমপক্ষে নীচের ফাংশনগুলি সমস্ত স্বয়ংক্রিয়ভাবে মাল্টিথ্রেডেড
import numpy as np import pandas as pd import os os.environ["MKL_NUM_THREADS"] = '4' print(os.environ["MKL_NUM_THREADS"]) df=pd.DataFrame(np.random.random((10,10))) df+df print(os.environ["MKL_NUM_THREADS"]) a = np.random.random((20000000, 3)) b = np.random.random((3, 30)) for _ in range(10): c = np.dot(a, b)