रॉबर्ट ए। वैन डे गीजन और एनरिक एस। क्विंटाना-ऑर्टि द्वारा एक अच्छी शुरुआत बिंदु द साइंस ऑफ प्रोग्रामिंग प्रोग्रामिंग मैट्रिक्स कंप्यूटर्स है। वे एक मुफ्त डाउनलोड संस्करण प्रदान करते हैं।
BLAS को तीन स्तरों में विभाजित किया गया है:
स्तर 1 रैखिक बीजगणित कार्यों के एक सेट को परिभाषित करता है जो केवल वैक्टर पर काम करते हैं। ये फ़ंक्शंस वैश्वीकरण (जैसे SSE का उपयोग करने से) से लाभान्वित होते हैं।
स्तर 2 फ़ंक्शन मैट्रिक्स-वेक्टर ऑपरेशन हैं, उदाहरण के लिए कुछ मैट्रिक्स-वेक्टर उत्पाद। इन कार्यों को Level1 कार्यों के संदर्भ में लागू किया जा सकता है। हालाँकि, आप इस फ़ंक्शन के प्रदर्शन को बढ़ा सकते हैं यदि आप एक समर्पित कार्यान्वयन प्रदान कर सकते हैं जो साझा मेमोरी के साथ कुछ मल्टीप्रोसेसर आर्किटेक्चर का उपयोग करता है।
स्तर 3 फ़ंक्शन मैट्रिक्स-मैट्रिक्स उत्पाद की तरह संचालन हैं। फिर से आप उन्हें Level2 कार्यों के संदर्भ में कार्यान्वित कर सकते हैं। लेकिन Level3 फ़ंक्शन O (N ^ 2) डेटा पर O (N ^ 3) ऑपरेशन करते हैं। इसलिए यदि आपके प्लेटफ़ॉर्म में कैश पदानुक्रम है तो आप प्रदर्शन को बढ़ावा दे सकते हैं यदि आप एक समर्पित कार्यान्वयन प्रदान करते हैं जो कैश ऑप्टिमाइज़्ड / कैश फ्रेंडली है । यह पुस्तक में अच्छी तरह से वर्णित है। Level3 फ़ंक्शन का मुख्य बढ़ावा कैश ऑप्टिमाइज़ेशन से आता है। यह बढ़ावा समानांतरता और अन्य हार्डवेयर अनुकूलन से दूसरे बढ़ावा को काफी हद तक बढ़ा देता है।
वैसे, उच्च प्रदर्शन BLAS कार्यान्वयन के अधिकांश (या यहां तक कि सभी) फोरट्रान में लागू नहीं होते हैं। C.L में ATLAS को लागू किया जाता है। GotoBLAS / OpenBLAS को C में लागू किया जाता है और असेंबलर में इसका प्रदर्शन महत्वपूर्ण होता है। केवल फोर्टिस में बीएलएएस का संदर्भ कार्यान्वयन लागू है। हालाँकि, ये सभी BLAS कार्यान्वयन एक फोरट्रान इंटरफ़ेस प्रदान करते हैं, ताकि इसे LAPACK (LAPACK द्वारा अपने सभी प्रदर्शन से लाभ प्राप्त किया जा सके) से जोड़ा जा सके।
इस संबंध में ऑप्टिमाइज्ड कंपाइलर एक छोटी भूमिका निभाते हैं (और गोटोब्लास / ओपनब्लास के लिए कंपाइलर बिल्कुल भी मायने नहीं रखता है)।
IMHO कोई BLAS कार्यान्वयन कोपरसमिथ-विनोग्राद एल्गोरिथ्म या स्ट्रैसन एल्गोरिथम जैसे एल्गोरिदम का उपयोग करता है। मैं कारण के बारे में बिल्कुल निश्चित नहीं हूं, लेकिन यह मेरा अनुमान है:
- हो सकता है कि इन एल्गोरिदम का कैश अनुकूलित कार्यान्वयन प्रदान करना संभव न हो (यानी आप अधिक ढीले होंगे तो आप जीत जाएंगे)
- ये एल्गोरिदम संख्यात्मक रूप से स्थिर नहीं हैं। चूंकि BLAS, LAPACK का कम्प्यूटेशनल कर्नेल है, यह एक नो-गो है।
संपादित करें / अद्यतन:
इस विषय का नया और ग्राउंड ब्रेकिंग पेपर BLIS पेपर हैं । वे असाधारण रूप से अच्छी तरह से लिखे गए हैं। मेरे व्याख्यान के लिए "उच्च प्रदर्शन कम्प्यूटिंग के लिए सॉफ़्टवेयर मूल बातें" मैंने उनके पेपर के बाद मैट्रिक्स-मैट्रिक्स उत्पाद को लागू किया। वास्तव में मैंने मैट्रिक्स-मैट्रिक्स उत्पाद के कई संस्करण लागू किए। सबसे सरल संस्करण पूरी तरह से सादे सी में लिखे गए हैं और कोड की 450 से कम लाइनें हैं। अन्य सभी संस्करण केवल छोरों का अनुकूलन करते हैं
for (l=0; l<MR*NR; ++l) {
AB[l] = 0;
}
for (l=0; l<kc; ++l) {
for (j=0; j<NR; ++j) {
for (i=0; i<MR; ++i) {
AB[i+j*MR] += A[i]*B[j];
}
}
A += MR;
B += NR;
}
मैट्रिक्स-मैट्रिक्स उत्पाद का समग्र प्रदर्शन केवल इन छोरों पर निर्भर करता है। यहां लगभग 99.9% समय व्यतीत होता है। दूसरे वेरिएंट में मैंने परफॉर्मेंस को बेहतर बनाने के लिए इंट्रिंसिक्स और असेंबलर कोड का इस्तेमाल किया। आप यहाँ सभी प्रकार के ट्यूटोरियल देख सकते हैं:
ulmBLAS: GEMM (मैट्रिक्स-मैट्रिक्स उत्पाद) पर ट्यूटोरियल
BLIS पेपर्स के साथ मिलकर यह समझना काफी आसान हो जाता है कि Intel MKL जैसी लाइब्रेरी इस तरह का प्रदर्शन कैसे हासिल कर सकती हैं। और इससे कोई फर्क नहीं पड़ता कि आप पंक्ति या स्तंभ प्रमुख भंडारण का उपयोग करते हैं!
अंतिम बेंचमार्क यहां हैं (हमने अपनी परियोजना को ulmBLAS कहा है):
UlmBLAS, BLIS, MKL, openBLAS और Eigen के लिए बेंचमार्क
एक और संपादन / अद्यतन:
मैंने कुछ ट्यूटोरियल भी लिखे कि कैसे बीएलएएस को संख्यात्मक रेखीय बीजगणित की समस्याओं के लिए उपयोग किया जाता है जैसे कि रैखिक समीकरणों की एक प्रणाली को हल करना:
उच्च प्रदर्शन एलयू फैक्टराइजेशन
(यह LU फ़ैक्टराइज़ेशन उदाहरण के लिए मैटलैब द्वारा रैखिक समीकरणों की प्रणाली को हल करने के लिए उपयोग किया जाता है।)
मैं समय को खोजने के लिए आशा का वर्णन और तरीका प्रदर्शित करने में की तरह LU गुणन के एक उच्च स्केलेबल समानांतर कार्यान्वयन का एहसास करने के लिए ट्यूटोरियल का विस्तार करने के प्लाज्मा ।
ठीक है, यहाँ आप जाते हैं: कैशिंग एक अनुकूलित ऑप्टिमाइज़ समानांतर एलयू फैक्टराइजेशन
पुनश्च: मैंने uBLAS के प्रदर्शन को बेहतर बनाने के लिए कुछ प्रयोग किए हैं। यह वास्तव में बढ़ावा देने के लिए बहुत आसान है (हाँ, शब्दों पर खेलें :)) uBLAS का प्रदर्शन:
UBLAS पर प्रयोग ।
यहाँ BLAZE के साथ एक समान परियोजना है :
ब्लाजी पर प्रयोग ।