समस्या पहले से ही 'अभिव्यक्ति टेम्पलेट्स (ET)' शब्द से शुरू होती है। मुझे नहीं पता कि इसके लिए कोई सटीक परिभाषा है या नहीं। लेकिन इसके आम उपयोग में यह किसी भी तरह से 'कैसे आप रैखिक बीजगणित अभिव्यक्ति कोड' और 'यह कैसे गणना की जाती है' जोड़ों। उदाहरण के लिए:
आप वेक्टर ऑपरेशन को कोड करें
v = 2*x + 3*y + 4*z; // (1)
और यह एक लूप द्वारा गणना की जाती है
for (int i=0; i<n; ++i) // (2)
v(i) = 2*x(i) + 3*y(i) + 4*z(i);
मेरी राय में यह दो अलग-अलग चीजें हैं और इसे डिकोड करने की आवश्यकता है: (1) एक इंटरफ़ेस और (2) एक संभावित कार्यान्वयन है। मेरा मतलब है कि यह प्रोग्रामिंग में आम बात है। ज़रूर (2) एक अच्छा डिफ़ॉल्ट कार्यान्वयन हो सकता है, लेकिन सामान्य तौर पर मैं एक विशेष, समर्पित कार्यान्वयन का उपयोग करने में सक्षम होना चाहता हूं। उदाहरण के लिए, मैं चाहता हूँ कि एक समारोह की तरह
myGreatVecSum(alpha, x, beta, y, gamma, z, result); // (3)
जब मुझे कोडिंग (1) आती है तो मुझे फोन किया जाता है। शायद (3) सिर्फ (2) की तरह आंतरिक रूप से एक लूप का उपयोग करता है। लेकिन वेक्टर आकार के आधार पर अन्य कार्यान्वयन अधिक कुशल हो सकते हैं। वैसे भी, उच्च प्रदर्शन में कुछ विशेषज्ञ जितना संभव हो उतना लागू और ट्यून (3) कर सकते हैं। इसलिए यदि (1) को (3) के कॉल पर मैप नहीं किया जा सकता है, तो मैं तुरंत (1) और सीधे कॉल (3) के सेनेटरी शुगर से बचता हूं।
मैं जो वर्णन करता हूं वह कोई नई बात नहीं है। इसके विपरीत, यह BLAS / LPACK के पीछे का विचार है:
- LAPACK में सभी प्रदर्शन महत्वपूर्ण संचालन BLAS फ़ंक्शन को कॉल करके किया जाता है।
- BLAS सिर्फ उन रैखिक बीजगणित अभिव्यक्तियों के लिए एक इंटरफ़ेस को परिभाषित करता है जिनकी आमतौर पर आवश्यकता होती है।
- बीएलएएस के लिए अलग-अलग अनुकूलित कार्यान्वयन मौजूद हैं।
यदि BLAS का दायरा पर्याप्त नहीं है (जैसे यह एक फ़ंक्शन प्रदान नहीं करता है जैसे (3)) तो कोई BLAS का दायरा बढ़ा सकता है। तो 60 और 70 के दशक के इस डायनासोर को अपने पाषाण युग के उपकरण के साथ इंटरफ़ेस और कार्यान्वयन के स्वच्छ और ऑर्थोगोनल पृथक्करण का एहसास होता है। यह एक तरह से मज़ेदार है कि (अधिकांश) संख्यात्मक C ++ लाइब्रेरीज़ इस स्तर की सॉफ़्टवेयर गुणवत्ता को प्राप्त नहीं करती हैं। हालाँकि प्रोग्रामिंग भाषा अपने आप में बहुत अधिक परिष्कृत है। इसलिए यह कोई आश्चर्य की बात नहीं है कि BLAS / LAPACK अभी भी जीवित है और सक्रिय रूप से विकसित है।
इसलिए मेरी राय में ईटी प्रति से बुराई नहीं हैं। लेकिन वे आम तौर पर संख्यात्मक सी ++ पुस्तकालयों में कैसे उपयोग किए जाते हैं, ने उन्हें वैज्ञानिक कंप्यूटिंग हलकों में बहुत खराब प्रतिष्ठा अर्जित की।