मैं जीपीयू प्रोग्रामिंग के लिए काफी नया हूं, लेकिन चूंकि मेरे पास कम्प्यूटेशनल गहन कार्य है, इसलिए मैं संभावित प्रदर्शन लाभ के लिए जीपीयू में बदल गया हूं।कच्चे CUDA प्रोग्रामिंग बनाम ArrayFire?
मैंने ArrayFire Free संस्करण के साथ अपने प्रोग्राम को फिर से लिखने का प्रयास किया। यह बहु-थ्रेडिंग सक्षम के साथ मेरे सीपीयू रूटीन की तुलना में वास्तव में तेज़ है, लेकिन मुझे अपेक्षित डिग्री (यानी, < 100% स्पीडअप) नहीं है, और लौटाए गए परिणाम सही नहीं हैं (< सीपीयू रूटीन की तुलना में 1% त्रुटि, मानते हुए सीपीयू रूटीन के परिणाम सही हैं)।
मेरा काम मुख्य रूप से तत्व-वार फ्लोट -32 गणित के बड़े मैट्रिस (300 एमबी -500 एमबी आकार) पर छोटे-छोटे if-thens/स्विच-केस आदि के साथ संचालन है। मुझे लगता है कि प्रदर्शन की बाधा सीपीयू और जीपीयू के बीच बैंडविड्थ की संभावना है स्मृति क्योंकि बहुत सारे डेटा-रीडिंग इत्यादि हैं। जीपीयू का परीक्षण मैंने 3 जीबी वीडियो मेमोरी के साथ एक GeForce 580GTX है।
क्या मैं अभी भी अपने कार्य के लिए ArrayFire का उपयोग करने के बजाय कच्चे CUDA कोड (CUBLAS आदि और औसत अनुकूलन के साथ) लिखने के लिए अनुकूलन के लिए कुछ महत्वपूर्ण कमरा है? मैंने कुछ एनवीआईडीआईए अनुकूलन मार्गदर्शिकाएं पढ़ीं; ऐसा लगता है कि तेजी से डेटा-पहुंच और बैंक-विवादों को कम करने के लिए वहां कुछ स्मृति-पहुंच चालें हैं। क्या ArrayFire स्वचालित रूप से इन सामान्य चाल का उपयोग करता है या नहीं?
क्या वे दोनों आईईईई चश्मा का अनुपालन नहीं करते हैं? मुझे लगता है कि दोनों पर 'एकल प्रेसिजन' का उपयोग करना एक ही परिणाम उत्पन्न करना चाहिए। फिर, गणना के आदेश को मानना भी वही है। – Royi