BLAS, LAPACK और ATLAS के बीच क्या संबंध है


143

मुझे समझ में नहीं आता है कि कैसे BLAS, LAPACK और ATLAS संबंधित हैं और मुझे उनका एक साथ उपयोग कैसे करना चाहिए! मैं उनके सभी मैनुअल देख रहा हूं और मेरे पास BLAS और LAPACK का एक सामान्य विचार है और मैं उन्हें बहुत कम उदाहरणों के साथ उनका उपयोग कैसे करता हूं, लेकिन मैं ATLAS का उपयोग करके कोई वास्तविक उदाहरण नहीं देख सकता कि यह किस तरह से संबंधित है ये दोनों।

मैं मैट्रिक्स पर कुछ निम्न स्तर का काम करने की कोशिश कर रहा हूं और मेरी प्राथमिक भाषा सी है। पहले मैं जीएसएल का उपयोग करना चाहता था, लेकिन यह कहता है कि यदि आप सबसे अच्छा प्रदर्शन चाहते हैं तो आपको BLAS और ATLAS का उपयोग करना चाहिए। क्या कोई अच्छा वेबपेज है जो इन (सी) में सभी का एक साथ उपयोग करने के कुछ अच्छे उदाहरण दे रहा है? दूसरे शब्दों में, मैं इन तीनों (या उनमें से किसी भी सबसेट!) का उपयोग करने पर एक ट्यूटोरियल की तलाश कर रहा हूं। संक्षेप में मैं उलझन में हूँ!


जवाबों:


156

BLAS निम्न-स्तरीय मैट्रिक्स और वेक्टर अंकगणितीय संचालन का एक संग्रह है ("स्केलर द्वारा एक वेक्टर को गुणा करें", "दो मैट्रिक्स को गुणा करें और तीसरे मैट्रिक्स में जोड़ें", आदि ...)।

LAPACK उच्च-स्तरीय रैखिक बीजगणित संचालन का एक संग्रह है। मैट्रिक्स फैक्टरलाइज़ेशन (LU, LLt, QR, SVD, Schur, इत्यादि) जैसी चीज़ें जिनका उपयोग "मैट्रिक्स के स्वदेशी खोजने", या "मैट्रिक्स के एकवचन मूल्यों को खोजने", या "रैखिक प्रणाली को हल करने" जैसी चीज़ों के लिए किया जाता है। "। LAPACK को BLAS के ऊपर बनाया गया है; LAPACK के कई उपयोगकर्ता केवल LAPACK इंटरफेस का उपयोग करते हैं और उन्हें कभी भी BLAS के बारे में जानने की आवश्यकता नहीं होती है। LAPACK को आम तौर पर BLAS से अलग संकलित किया जाता है, और जो भी आपके द्वारा उपलब्ध है, वह अत्यधिक-अनुकूलित BLAS कार्यान्वयन का उपयोग कर सकता है।

एटलस बीएलएएस इंटरफेस का एक पोर्टेबल उचित रूप से अच्छा कार्यान्वयन है, जो कि सबसे अधिक इस्तेमाल किए जाने वाले LACKACK कार्यों में से कुछ को भी लागू करता है।

"आपको क्या उपयोग करना चाहिए" इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं और आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं। हालाँकि आप "ATLAS + LAPACK का उपयोग करें" के साथ बहुत गलत नहीं होंगे।


स्पष्टीकरण के लिए धन्यवाद। क्या आप जानते हैं कि कैसे ATLAS + LAPACK का उपयोग करने के लिए कोई उदाहरण है? मुझे यह समझने के लिए कुछ उदाहरण देखने की जरूरत है कि इनका उपयोग कैसे किया जाए! मैं समझता हूं कि वे क्या कर रहे हैं और वे क्या करते हैं के सिद्धांत, लेकिन मैं शायद ही कभी सी में कोई उदाहरण पा सकता हूं कि व्यवहार में कैसे लागू किया जाए।
मखलाघी

1
@astroboy: क्या आप मुझे इस बारे में कुछ जानकारी दे सकते हैं कि आप वास्तव में क्या करने की कोशिश कर रहे हैं? LAPACK विशेष रूप से एक विशाल पुस्तकालय है।
स्टीफन कैनन

सादगी के लिए, मैं कहता हूं कि मेरे पास एक मैट्रिक्स है और मैं इसे एक निश्चित मूल्य से गुणा करना चाहता हूं। मैं C में ATLAS और (LAPACK या BLAS) का संयोजन कैसे कर सकता हूं? मैं केवल यह देखना चाहता हूं कि इनमें से किसी भी कार्य को कैसे लागू किया जाए। Netlib.org/lapack/lapacke.html में कुछ उदाहरण हैं लेकिन ATLAS का कोई उल्लेख नहीं है!
मचलगि

क्या BLAS, LAPACK या MKL जैसी कोई भी चीज है जो मेमोरी से ज्यादा बड़े objetcs के साथ पारदर्शी तरीके से काम करने में सक्षम है?
स्कैन

1
@ MinNghla: एक मानक है, netlib.org/blas/blast-forum , लेकिन (ए) कोई प्रवर्तन नहीं है - एक परीक्षण सूट के बिना एक मानक वास्तव में एक मानक नहीं है - और (बी) मुझे नहीं लगता कि कोई भी उस दस्तावेज़ द्वारा वर्णित इंटरफेस का पूरा सेट लागू करता है। यह उह, आकांक्षा है।
स्टीफन कैनन

40

इससे पहले, जब मैंने कुछ रैखिक बीजगणित करना शुरू किया C, तो यह देखकर आश्चर्य हुआ कि इस तरह के कुछ ट्यूटोरियल हैं BLAS, LAPACKऔर अन्य मौलिक हैं API, इस तथ्य के बावजूद कि वे किसी तरह कई अन्य पुस्तकालयों के कोने हैं। यही वजह है कि मैं के लिए इंटरनेट पर सभी उदाहरणों / ट्यूटोरियल मैं सभी मिल सकता है इकट्ठा करने शुरू कर दिया BLAS, CBLAS, LAPACK, CLAPACK, LAPACKE, ATLAS, OpenBLAS... में इस Github रेपो

खैर, मुझे आपको चेतावनी देनी चाहिए कि एक मैकेनिकल इंजीनियर के रूप में मुझे इस तरह के गिट रिपॉजिटरी या गिटहब के प्रबंधन का बहुत कम अनुभव है। यह पहली बार आप लोगों को पूरी तरह से गड़बड़ लगेगा। हालाँकि यदि आप गन्दे ढाँचे पर जाने का प्रबंधन करते हैं तो आपको सभी प्रकार के उदाहरण और निर्देश मिलेंगे जो एक मदद हो सकती है। मैंने उनमें से अधिकांश की कोशिश की है, यह सुनिश्चित करने के लिए कि वे संकलन करें। और जिन लोगों का संकलन नहीं है, उनका मैंने उल्लेख किया है। मैं उनमें से कई के साथ compilable होने के लिए संशोधित किया है GNU compilers( gcc, g++और gfortran)। मैं बना दिया है MakeFileरों आप जानने के लिए कैसे आप अलग-अलग कॉल कर सकते हैं पढ़ सकते हैं जो Fortran/FORTRANएक में दिनचर्या Cया C++कार्यक्रम। मैंने मैक और लिनक्स के लिए कुछ इंस्टॉलेशन निर्देश भी दिए हैं (क्षमा करें विंडोज़ लोग!)। मैंने भी कुछ बनाया हैbash .sh इनमें से कुछ पुस्तकालयों के स्वत: संकलन के लिए फाइलें।

लेकिन अपने अन्य प्रश्न के लिए जा रहे हैं : BLASऔर विशिष्ट नहीं हैं । वे केवल कार्यान्वयन या पुस्तकालयों के बजाय विनिर्देशों या भाषा एक्सटेंशन की एक सूची हैं। इसके साथ ही कहा, वहाँ से मूल कार्यान्वयन हैं Netlib में है, जो ज्यादातर लोगों का उल्लेख (भ्रमित करने वाले!) जब के बारे में बात और । इसलिए यदि आप इन एस का उपयोग करते समय बहुत सी अजीब चीजें देखते हैं क्योंकि आप वास्तव में पुस्तकालयों और कार्यों के बजाय रूटीन कह रहे थे । और का सबसे अच्छा कार्यान्वयन में से कुछ हैं और जहाँ तक मुझे पता है। वे मूल के अनुरूप हैं , भले ही, मेरे ज्ञान के लिए उन्हें लागू किया गया होLAPACKAPISDKFORTRAN 77BLASLAPACKAPIFORTRANCCATLASOpenBLASBLASLACPACKAPIC/C++खरोंच से (यकीन नहीं!)। वहाँ की GPGPU कार्यान्वयन हैं APIs का उपयोग करके OpenCL: CLBlast , clBLAS , clMAGMA , ArrayFire और ViennaCL कुछ का उल्लेख। विशिष्ट हार्डवेयर या प्लेटफ़ॉर्म के लिए अनुकूलित वेंडर विशिष्ट कार्यान्वयन भी हैं, जो मैं किसी को भी उनका उपयोग करने के लिए दृढ़ता से हतोत्साहित करता हूं।

किसी को जो का उपयोग कर सीखना चाहता है मेरे सिफारिश BLASऔर LAPACKमें Cजानने के लिए है FORTRAN-Cमिश्रित प्रोग्रामिंग पहले। उल्लिखित रेपो का पहला अध्याय इस मामले के लिए समर्पित है और वहाँ मैंने कई अलग-अलग उदाहरण एकत्र किए हैं।

पुनश्च मैं समय-समय पर भंडार की देव शाखा पर काम कर रहा हूं । यह थोड़ा कम गन्दा लगता है!


LAPACK के लिए विकिपीडिया पृष्ठ "LAPACK (रैखिक बीजगणित पैकेज) एक मानक सॉफ्टवेयर लाइब्रेरी है" से शुरू होता है। क्या आप कह रहे हैं कि यह गलत है, क्योंकि यह एपीआई विनिर्देश है और कार्यान्वयन नहीं है?
नूह_एस

1
कुछ शोधों के बाद ऐसा लगता है कि LAPACK और BLAS वास्तव में कार्यान्वयन हैं। BLAS पर NetLib के faq से: "BLAS (बेसिक लीनियर अलजेब्रा सबप्रोग्राम्स) रूटीन हैं जो बुनियादी वेक्टर और मैट्रिक्स ऑपरेशन करने के लिए मानक बिल्डिंग ब्लॉक प्रदान करते हैं"। LAPACK के GitHub पृष्ठ से: "LAPACK फोरट्रान सबरूटीन्स का एक पुस्तकालय है"। उसके आधार पर, और LAPACK के गिटहब प्रोजेक्ट के माध्यम से पढ़ने पर, मेरी धारणा है कि BLAS और LAPACK वास्तव में कार्यान्वयन हैं - LAPACK अधिक परिष्कृत कार्यक्षमता प्रदान करने के लिए BLAS पर बनाता है।
नूह_एस

1
@ नोहा_एस मैंने विकिपीडिया का उपयोग "संदर्भ" के रूप में नहीं किया है, लेकिन मेरे सीमित ज्ञान के लिए, लैपैक के कई कार्यान्वयन हैं। मुझे लगता है कि इसे एपीआई कहना अब अधिक सटीक है। लेकिन कृपया मुझे सही करें अगर मैं गलत हूं।
फाद

2
मुझे लगता है कि भ्रम का एक हिस्सा यह है कि BLAS एक API / विनिर्देशन है, लेकिन BLAS का एक "संदर्भ कार्यान्वयन" भी है (Netlib से) जिसे केवल "BLAS पुस्तकालय" भी कहा जाता है। आमतौर पर जब लोग कहते हैं कि BLAS का मतलब एपीआई है, क्योंकि संदर्भ कार्यान्वयन गैर-अनुकूलित है, इसलिए इसका उपयोग अभ्यास / उद्योग में ज्यादा नहीं किया जाता है। ATLAS कुछ LAPACK सबरूटीन्स का एक अनुकूलित कार्यान्वयन प्रदान करता है, और फिर वैकल्पिक रूप से LAPACK से शेष उन में खींचता है जो कि निर्मित ATLAS lib फ़ाइलों में एक पूर्ण LAPACK कार्यान्वयन का निर्माण करता है।
एंड्रयू जंके

1
@ नोहा_एस कोई विरोधाभास नहीं है, प्रत्येक पुस्तकालय में एक एपीआई होता है, जो एपीआई को संगत रहते हुए वास्तविक कार्यक्षमता को फिर से लागू करना संभव बनाता है और यही LAPACK के साथ हुआ है।
एंड्री

17

एटलस अब काफी पुराना हो चुका है। यह ऐसे समय में विकसित किया गया था जब यह सोचा गया था कि विभिन्न प्लेटफार्मों के लिए BLAS का अनुकूलन करना मनुष्यों की क्षमता से परे था, और परिणामस्वरूप ऑटोगेनरेशन और ऑटोट्यूनिंग जाने का रास्ता था।

2000 के दशक की शुरुआत में, काजुशिगे गोटो आए, जिन्होंने दिखाया कि अत्यधिक कुशल कार्यान्वयन को हाथ से कैसे कोडित किया जा सकता है। आप न्यूयॉर्क टाइम्स में एक दिलचस्प लेख का आनंद ले सकते हैं: https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- कंप्यूटर keeps.html

एक ओर काजुशिगे के मैट्रिक्स-मैट्रिक्स गुणा के उच्च-प्रदर्शन कार्यान्वयन के पीछे सिद्धांत में बेहतर अंतर्दृष्टि थी, और दूसरी ओर इन बेहतर इंजीनियर थे। उनका दृष्टिकोण, जो वर्तमान सीपीयू पर आमतौर पर सबसे अधिक प्रदर्शन करता है, एटीएलएएस ऑटोट्यून्स कि खोज स्थान में नहीं है। इसलिए, एटलस स्वाभाविक रूप से हीन है। काज़ुशियल के BLAS के कार्यान्वयन को GotoBLAS के रूप में जाना जाता है। जब वह उद्योग में शामिल हुए तो ओपनब्लस के रूप में इसे फोर्क किया गया था।

गोटोब्लास के पीछे के विचारों को एक नए कार्यान्वयन, बीएलएएस-लाइक लाइब्रेरी इंस्ट्रूमेंटेशन सॉफ्टवेयर (बीएलआईएस) ढांचे ( https://github.com/flame/blis ) के रूप में दर्शाया गया था , जो समान एल्गोरिदम को लागू करता है, लेकिन कोड को इतना ढाँचा देता है कि कम एक नई वास्तुकला के लिए कस्टम लागू करने की आवश्यकता है। BLIS C में कोडित है।

यह चर्चा क्या दिखाती है कि BLAS के कई कार्यान्वयन हैं। BLAS स्वयं इंटरफ़ेस के लिए एक वास्तविक मानक है। एटलस कभी कला का राज्य था। वो नहीं रहा।


0

जहाँ तक मुझे पता है, और एटलस रिपॉजिटरी के माध्यम से काम करने के बाद, ऐसा लगता है कि इसमें सी। में बीएलएएस को फिर से लागू करना शामिल है। इससे थोड़ा सा अधिक है लेकिन मुझे उम्मीद है कि यह सवाल का जवाब देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.