2012-04-05 31 views
10

के लिए समांतर रैखिक बीजगणित मैं एक प्रोग्राम विकसित कर रहा हूं जिसमें भारी रैखिक बीजगणित गणना करने की आवश्यकता है।मल्टीकोर सिस्टम

अब मैं LAPACK/BLAS दिनचर्या का उपयोग कर रहा हूं, लेकिन मुझे अपनी मशीन (24 कोर ज़ीऑन X5690) का फायदा उठाने की आवश्यकता है।

मैं pblas और scalapack जैसी परियोजनाओं मिल गया है, लेकिन वे सभी वितरित अभिकलन पर और एमपीआई के प्रयोग पर ध्यान केंद्रित करने लगते हैं।

मेरे पास कोई क्लस्टर उपलब्ध नहीं है, सभी कंप्यूटेशंस एक सर्वर पर किए जाएंगे और एमपीआई का उपयोग ओवरकिल की तरह दिखता है।

क्या किसी के पास इस पर कोई सुझाव है?

+3

करें का उपयोग कर को बट्टे खाते में नहीं एमपीआई, विशेष रूप से नहीं यदि आप एमपीआई-सक्षम पुस्तकालयों को अपने भारी उठाने के लिए पा सकते हैं। साझा-मेमोरी रैखिक बीजगणित के लिए पुस्तकालयों को ढूंढना या अपना स्वयं का साझा-मेमोरी कोड लिखना आसान हो सकता है। एक अच्छा एमपीआई कार्यान्वयन एक साझा-मेमोरी कंप्यूटर पर कुशलतापूर्वक चलाएगा। –

+0

मुझे पता है। मेरा मतलब यह नहीं था कि मैंने अपने द्वारा एमपीआई कोड लिखा होगा। मैं बस सब कुछ इस के बाद से एमपीआई का उपयोग करता है एक क्लस्टर कार्यक्रम नहीं होगा बचना चाहते थे और मैं किसी भी अनावश्यक भूमि के ऊपर – Patrik

+0

वोटिंग से बचने के लिए उपकरण आरईसी/बहुत व्यापक रूप बंद करना चाहते हैं। –

उत्तर

2

Intel MKL का उपयोग करने पर विचार करें। OpenBLAS भी तेज़ हो सकता है, हालांकि मैंने इसे अभी तक> क्वाडकोर मशीनों पर नहीं चलाया है।

+0

अच्छी कॉल, लेकिन इसका उपयोग कैसे करें? दस्तावेज़ीकरण से पता चलता है कि कार्यों का नाम LAPACK जैसा ही है। क्या मुझे सिर्फ लैपैक ब्लैस और गोरफ्रान के बजाय एमकेएल के खिलाफ लिंक करने की ज़रूरत है? (मेरे वर्तमान ldflags हैं -llapack -lblas -lgfortran)। मूल रूप से मैं DSTEBZ और DSTEIN – Patrik

+0

@Patrik के लिए एक समानांतर बदलने की जरूरत है: MKL BLAS संगत डिज़ाइन किया गया है, तो बस फिर कंपाइल और जोड़ने * चाहिए * काम करते हैं। मैं मानता हूं कि मैं यह सी से सीधे का उपयोग कभी नहीं, लेकिन हमेशा Numpy के माध्यम से। –

+2

फोरट्रान से यह @larsmans अनुमान, (दाएं) पुस्तकालयों के विरुद्ध लिंक का एक सीधा आपरेशन के रूप में, है। यदि आपको परेशानी हो रही है, तो इंटेल लिंक-लाइन सलाहकार देखें: http://software.intel।कॉम/एन-हम/लेख/इंटेल-एमकेएल-लिंक-लाइन-सलाहकार/ –

10

जैसा कि @larsmans (साथ, कहें, एमकेएल) द्वारा उल्लिखित है, आप अभी भी LAPACK + BLAS इंटरफेस का उपयोग करते हैं, लेकिन आपको बस अपने प्लेटफ़ॉर्म के लिए एक ट्यूनेड, मल्टीथ्रेड संस्करण मिलता है। एमकेएल महान है, लेकिन महंगा है। अन्य, खुला स्रोत, विकल्पों में शामिल हैं:

  • OpenBLAS/GotoBLAS, Nehalem समर्थन Westmere के लिए अभी तक ठीक है, लेकिन कोई देखते समर्थन काम करना चाहिए। Multithreading बहुत अच्छी तरह से करता है।
  • Atlas: स्थापना समय पर स्वचालित रूप से आपके आर्किटेक्चर पर ट्यून करता है। शायद "ठेठ" मैट्रिक्स (उदाहरण के लिए, वर्ग एसजीईएमएम) के लिए धीमा है लेकिन अजीब मामलों के लिए तेज़ हो सकता है, और वेस्टमेरे के लिए ओपनबीएलएस/गोटोब्लास को भी हराया जा सकता है, मैंने इसका परीक्षण नहीं किया है। अधिकांशतः धारावाहिक मामले के लिए अनुकूलित, लेकिन समानांतर multithreading दिनचर्या शामिल है।
  • Plasma - LAPACK कार्यान्वयन विशिष्ट रूप से मल्टीकोर के लिए डिज़ाइन किया गया।

मैं मार्क की टिप्पणी से भी सहमत हूं; आप जिस LAPACK रूटीन का उपयोग कर रहे हैं उसके आधार पर, एमपीआई के साथ वितरित मेमोरी सामग्री वास्तव में बहुप्रचारित से तेज हो सकती है। यह बीएलएएस दिनचर्या के मामले में होने की संभावना नहीं है, लेकिन कुछ और जटिल के लिए (LAPACK में eigenvalue/वेक्टर रूटीन कहें) यह परीक्षण के लायक है। हालांकि यह सच है कि एमपीआई फ़ंक्शन कॉल एक ओवरहेड कर रहे हैं, एक वितरित स्मृति मोड मतलब है कि आप झूठी साझा करने के बारे इतनी चिंता करने के लिए, साझा चर के लिए उपयोग सिंक्रनाइज़ करने की जरूरत नहीं है में काम करने, आदि

+0

मैं dlamch, dstebz, dstein, dlamch और dstebz – Patrik

+0

का उपयोग कर रहा हूं शायद pdstebz और pdstein वह फ़ंक्शन है जिसे मैं ढूंढ रहा हूं, लेकिन उनके पास एक अलग इंटरफ़ेस है। उन आलसी, liwork और ऑर्थोगोनलाइजेशन पैरामीटर क्या हैं? Dstebz और dstein कॉल करने में एकाधिक कोर का फायदा उठाने का सबसे अच्छा तरीका क्या है? – Patrik

+0

मुझे लगता है कि पहली बात यह है कि बस मल्टीथ्रेडेड ब्लैस/लैपैक इंस्टॉलेशन के साथ प्रयास करें - ओपनब्लैस या गेटोबलास कहें। स्केलपैक के साथ शुरू करना कुछ कर रहा है, क्योंकि कोर के बीच मैट्रिक्स का वितरण गैर-स्पष्ट है। अच्छी खबर यह है कि एक बार जब आप स्केलपैक का उपयोग करने की परेशानी में जाते हैं, तो यह नोड्स में भी काम करेगा। मैंने यहां स्केलापैक का उपयोग करने का एक उदाहरण दिया: http://scicomp.stackexchange.com/questions/1688/how-do-i-use-scalapack-pblas-for-matrix-vector-multiplication/1713#1713 –