खिलौना प्रदर्शन का उदाहरण चलाने के बाद, अब हम कुछ हद तक पीछे हटेंगे और प्रदर्शन की तुलना
से करेंगे।
कुछ पायथन कार्यान्वयन। सबसे पहले आइए गणनाओं के लिए चरण तैयार करें, और कमांडलाइन प्रदान करें
पायथन लिपि की क्षमताएं।
import argparse import time import math import numpy as np import os from numba import njit from joblib import Parallel, delayed parser = argparse.ArgumentParser() parser.add_argument("--workers", type=int, default=8) parser.add_argument("--arraysize", type=int, default=100_000_000) args = parser.parse_args() # Set the number of threads to 1 for different libraries print("=" * 80) print( f"\nStarting the benchmark for {args.arraysize} elements " f"using {args.workers} threads/workers\n" ) # Generate the data structures for the benchmark array0 = [np.random.rand() for _ in range(args.arraysize)] array1 = array0.copy() array2 = array0.copy() array_in_np = np.array(array1) array_in_np_copy = array_in_np.copy()
और यहां हमारे प्रतियोगी हैं:
for i in range(len(array0)): array0[i] = math.cos(math.sin(math.sqrt(array0[i])))
np.sqrt(array_in_np, out=array_in_np) np.sin(array_in_np, out=array_in_np) np.cos(array_in_np, out=array_in_np)
def compute_inplace_with_joblib(chunk): return np.cos(np.sin(np.sqrt(chunk))) #parallel function for joblib chunks = np.array_split(array1, args.workers) # Split the array into chunks numresults = Parallel(n_jobs=args.workers)( delayed(compute_inplace_with_joblib)(chunk) for chunk in chunks )# Process each chunk in a separate thread array1 = np.concatenate(numresults) # Concatenate the results
@njit def compute_inplace_with_numba(array): np.sqrt(array,array) np.sin(array,array) np.cos(array,array) ## njit will compile this function to machine code compute_inplace_with_numba(array_in_np_copy)
और यहां समय परिणाम हैं:
In place in ( base Python): 11.42 seconds In place in (Python Joblib): 4.59 seconds In place in ( Python Numba): 2.62 seconds In place in ( Python Numpy): 0.92 seconds
सुंबा आश्चर्यजनक रूप से धीमा है!? क्या यह संकलन के ओवरहेड के कारण हो सकता है जैसा कि इस मुद्दे के बारे में आईआरसी एक्सचेंज में मोहॉक2 द्वारा बताया गया है?
इसका परीक्षण करने के लिए, हमें बेंचमार्क निष्पादित करने से पहले एक बार compute_inplace_with_numba को कॉल करना चाहिए। ऐसा करने से पता चलता है कि नुम्बा अब नम्पी से तेज़ है।
In place in ( base Python): 11.89 seconds In place in (Python Joblib): 4.42 seconds In place in ( Python Numpy): 0.93 seconds In place in ( Python Numba): 0.49 secondsआखिरकार, मैंने उसी उदाहरण में सवारी के लिए आधार आर लेने का फैसला किया:
In place in ( base Python): 11.89 seconds In place in (Python Joblib): 4.42 seconds In place in ( Python Numpy): 0.93 seconds In place in ( Python Numba): 0.49 secondsपर्ल परिणामों की तुलना में हम इस उदाहरण के बारे में निम्नलिखित नोट करते हैं:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3