OpenCL on Xeon Phi: 2D Convolution Experience - OpenCL vs OpenMP -
ऑप्नेकल में 2 डी रूपांतरण के साथ बेंचमार्क Xeon Phi का प्रदर्शन एक ओपन एमपी कार्यान्वयन से बेहतर होता है, यहां तक कि कंपाइलर-सक्षम वेक्टराइजेशन के साथ। ओपनपीपी संस्करण को पीएचआई नेटिव मोड में चलाया गया था, और टाइमिंग केवल मोज़िशन भाग मापा गया: फॉर-लूप ओपनएक्ल कार्यान्वयन के लिए, समय केवल कर्नेल कंप्यूटिंग के लिए ही था: कोई डेटा स्थानांतरण शामिल नहीं था। OpenMp-enbaled संस्करण 2,4,60,120,240 धागे के साथ परीक्षण किया गया था। - 240 थ्रेड्स ने एक संतुलित धात्विक संबंध सेटिंग के लिए सर्वश्रेष्ठ प्रदर्शन दिया। लेकिन ओपेकल, 240-थ्रेड ओपन एमपी आधाररेखा के साथ-साथ प्रोग्मा-एनबल्ड व्हेक्टरसिजेशन के साथ 17 डिग्री बेहतर था, स्रोत कोड है। इनपुट छवि का आकार 1024x1024 तक 16384x16384 तक है, और 3x3 से 17x17 तक का फिल्टर आकार। कॉल रनों में, ओपनक्ल ओपन एमएफ़ से बेहतर था क्या यह opencl की एक उम्मीद की गति है ?? सही होना अच्छा लगता है।
संपादित करें:
संकलन (ओपनएम)
icc Convolve.cpp -fopenmp-mmic -O3 -vec- रिपोर्ट 1-ओ कन्वेंशन। कॉन्वल्वे सीपीपी (71): (कर्नल 17) टिप्पणी: लूप का अभिप्राय था स्रोत (कन्व्लू सीपीपी):
शून्य Convolution_Threaded (नाव * pInput, नाव * pFilter, नाव * pOutput, स्थिरांक पूर्णांक nInWidth, स्थिरांक पूर्णांक nWidth, स्थिरांक पूर्णांक nHeight, स्थिरांक पूर्णांक nFilterWidth, स्थिरांक पूर्णांक nNumThreads) {NUM_THREADS (nNumThreads) के लिए के लिए #pragma omp समानांतर (पूर्णांक yout = 0; yOut & lt; nHeight; yOut ++) {कोष्ठ int yInTopLeft = yOut; (Int xOut = 0; xOut & lt; nWidth; xOut ++) के लिए {const int xInTopLeft = xOut; फ्लोट योग = 0; (Int r = 0; r & lt; nFilterWidth; r ++) के लिए {const int idxFtmp = r * nFilterWidth; Const int yIn = yInTopLeft + r; Const int idxIntmp = yIn * nInWidth + xInTopLeft; #pragma ivdep // संकलक #pragma वेक्टर द्वारा मान लिया किसी भी डेटा निर्भरता गठबंधन // पाश में पहुँचा सभी डेटा ठीक से गठबंधन है को छोड़ देता है (पूर्णांक ग = 0; ग & LT; nFilterWidth; c ++) {स्थिरांक पूर्णांक idxF = idxFtmp + स; const int idxIn = idxIntmp + c; sum + = pFilter [idxF] * pInput [idxIn]; }} const int idxOut = yOut * nWidth + xOut; पॉउटपुट [idxOut] = sum; }}} स्रोत 2 (convolve.cl)
__kernel शून्य Convolve (स्थिरांक __global नाव * pInput, नाव __constant * pFilter, __global नाव * pOutput , कॉन्स्ट इंट एनआईविड्थ, कॉन्स्ट इंट एनफिलटरविड्थ) {कॉन्स्ट इंट nWidth = get_global_size (0); Const int xOut = get_global_id (0); Const int yOut = get_global_id (1); const int xInTopLeft = xOut; const int yInTopLeft = yOut; फ्लोट योग = 0; (Int r = 0; r & lt; nFilterWidth; r ++) के लिए {const int idxFtmp = r * nFilterWidth; Const int yIn = yInTopLeft + r; Const int idxIntmp = yIn * nInWidth + xInTopLeft; (इंट सी = 0; सी & lt; nFilterWidth; c ++) के लिए {कॉन्स्ट इंट आईडीएक्सएफ = आईडीएक्सएफटीएमपी + सी; Const int idxIn = idxIntmp + c; sum + = pFilter [idxF] * pInput [idxIn]; }} Const int idxOut = yOut * nWidth + xOut; पॉउटपुट [idxOut] = sum; } (OpenCL के साथ तुलना में) OpenMP का परिणाम:
छवि फिल्टर कार्यकारी अवधि (मिलीसेकंड) OpenMP 2048x2048 3x3 23.4 OpenCL 2048x2048 3x3 1.04 * * कच्चे कर्नेल निष्पादन समय पीसीआई बस में डेटा ट्रांसफर टाइम शामिल नहीं है।
इंटेल के ओपनसीएल का कार्यान्वयन उन लोगों का उपयोग करेगा जो वे "निहित सदिश" वेक्टर फ़्लोटिंग प्वाइंट इकाइयों का लाभ उठाने के लिए इसमें सीआईडीडी लेन पर मैपिंग काम-आइटम शामिल हैं आपके उदाहरण में, प्रत्येक कार्य-वस्तु एक एकल पिक्सेल पर कार्रवाई कर रही है, जिसका अर्थ है कि प्रत्येक हार्डवेयर धागा Xeon Phi 512-bit vector इकाइयों का उपयोग करते हुए एक समय में 16 पिक्सल को संसाधित करेगा।
इसके विपरीत, आपके ओपनएमपी कोड पिक्सल में समानांतर है, और फिर एक पिक्सेल के भीतर गणना को सदिश करना। यह लगभग निश्चित रूप से है जहां प्रदर्शन अंतर से आ रहा है।
आईसीसी को अपने ओपनएमपी कोड को ऐसे तरीके से सिकोड़ने के लिए प्राप्त करें, जो कि निहित वैक्टर वाले ओपनसीएल कोड के समान है, आपको अपना # अंदरूनी लूप से प्राइमा ivdep और #pragma वेक्टर गठबंधन स्टेटमेंट, और बजाय क्षैतिज पिक्सेल लूप के सामने एक #pragma simd रखें: #pragma omp समानांतर (int yOut = 0; yOut & lt; nHeight; yOut ++) {const int yInTopLeft = yOut; #pragma simd के लिए (int xOut = 0; xOut & lt; nWidth; xOut ++) { जब मैं इसे आईसीसी के साथ संकलित करता हूं, यह रिपोर्ट करता है कि यह वांछित लूप को सफलतापूर्वक सदिश करता है।
Comments
Post a Comment