2012-08-11 17 views
5

मैंने स्वयं को CUDA कर्नेल प्रोग्राम किया। सीपीयू कोड की तुलना करें, मेरा कर्नेल कोड CPUs से 10 गुना तेज है।सीयूडीए प्रदर्शन का मूल्यांकन कैसे करें?

लेकिन मेरे प्रयोगों से मुझे सवाल है।

क्या मेरा प्रोग्राम पूरी तरह से सभी जीपीयू कोर, उचित साझा मेमोरी उपयोग, पर्याप्त पंजीकरण गिनती, पर्याप्त अधिभोग का उपयोग करके अनुकूलित किया गया है?

मैं अपने कर्नेल कोड के प्रदर्शन का मूल्यांकन कैसे कर सकता हूं?

मैं सैद्धांतिक रूप से CUDA के अधिकतम थ्रूपुट को कैलकुलेटर कैसे कर सकता हूं?

क्या मैं सही हूं कि सीपीयू के जीएफएलपीएस और जीपीयू के जीएफएलपीएस और जीएफएलओपीएस दर के बीच की तुलना उनके पारदर्शी सैद्धांतिक प्रदर्शन है?

अग्रिम धन्यवाद।

उत्तर

5

क्या मेरा प्रोग्राम पूरी तरह से सभी जीपीयू कोर, उचित साझा मेमोरी उपयोग, पर्याप्त पंजीकरण गिनती, पर्याप्त अधिभोग का उपयोग करके अनुकूलित किया जा सकता है?

यह पता लगाने के लिए, आप CUDA प्रोफाइलरों में से एक का उपयोग करते हैं। देखें How Do You Profile & Optimize CUDA Kernels?

मैं सैद्धांतिक रूप से CUDA के अधिकतम थ्रूपुट को कैलकुलेटर कैसे कर सकता हूं?

वह गणित थोड़ा सा शामिल है, प्रत्येक वास्तुकला के लिए अलग है और गलत पाने में आसान है। अपने चिप के लिए चश्मा में संख्याओं को देखने के लिए बेहतर है। विकिपीडिया पर टेबल हैं, जैसे this one, for the GTX500 cards। उदाहरण के लिए, आप तालिका से देख सकते हैं कि जीटीएक्स 580 में 1 9 2.4 जीबी/एस की सैद्धांतिक चोटी बैंडविड्थ है और 1581.1 जीएफएलओपी की गणना थ्रूपुट है।

क्या मैं सही हूं कि सीपीयू के जीएफएलपीएस और जीपीयू के जीएफएलपीएस और जीएफएलओपीएस दर के बीच की तुलना पारदर्शी सैद्धांतिक प्रदर्शन है?

अगर मैं सही ढंग से समझ, आप अगर एक GPU पर सैद्धांतिक उच्च GFLOPS की संख्या सीधे एक सीपीयू पर इसी संख्या के साथ तुलना की जा सकती पूछ रहे हैं। ऐसी कुछ चीज़ें हैं जब इन नंबरों तुलना करने पर विचार करने के लिए कर रहे हैं:

  • पुराने GPUs डबल परिशुद्धता (डीपी) चल बिन्दु, केवल एकल परिशुद्धता (सपा) का समर्थन नहीं किया।

  • डीपी का समर्थन करने वाले जीपीयू एसपी की तुलना में एक महत्वपूर्ण प्रदर्शन गिरावट के साथ ऐसा करते हैं। ऊपर उद्धृत जीएफएलओपी संख्या एसपी के लिए थी। दूसरी ओर, सीपीयू के लिए उद्धृत संख्या अक्सर डीपी के लिए होती है, और सीपीयू पर एसपी और डीपी के प्रदर्शन के बीच कम अंतर होता है।

  • सीपीयू उद्धरण दरों कि प्राप्त केवल जब SIMD (एकल अनुदेश, एकाधिक डेटा) vectorized निर्देशों का उपयोग कर रहे हैं के लिए हो सकता है, और आम तौर पर बहुत एल्गोरिदम कि सैद्धांतिक अधिकतम संपर्क कर सकते हैं लिखने के लिए कठिन है (और वे लिखा जा करना पड़ सकता है असेंबली में)। कभी-कभी, सीपीयू उद्धरण विभिन्न कंप्यूटिंग संसाधनों के संयोजन के लिए होते हैं जो विभिन्न प्रकार के निर्देशों के माध्यम से उपलब्ध होते हैं और अक्सर एक प्रोग्राम लिखना लगभग असंभव है जो उन्हें एक साथ उपयोग कर सकता है।

  • जीपीयू के लिए उद्धृत दरों का मानना ​​है कि आपके पास GPU को संतृप्त करने के लिए पर्याप्त समानांतर कार्य है और यह कि आपका एल्गोरिदम बैंडविड्थ बाध्य नहीं है।

+0

धन्यवाद, रोजर। आपकी टिप्पणी मेरे लिए अच्छा है। –

+0

मेरे पास अतिरिक्त प्रश्न है। मान लीजिए सीपीयू: 2.8GHz, 1 कोर GPU: 1.6GHz, 384 कोर (GTX 560 ती युक्ति) इस उदाहरण में, CPU के अपेक्षित प्रदर्शन 2.8GHz एक्स 1 कोर = 2.8GHz · कोर GPU की उम्मीद प्रदर्शन है 0.8GHz x 384 कोर = 307.2 गीगा · कोर यह गणना मान्य है? –

+2

आप जीएचजेड में प्रदर्शन को माप नहीं सकते हैं। सैद्धांतिक प्रदर्शन खोजने के लिए, आपको यह पता लगाना होगा कि प्रत्येक घड़ी चक्र में सीपीयू/जीपीयू क्या कर सकता है। और मैंने जो विचारों का उल्लेख किया है, वे आपके द्वारा प्राप्त किए जा सकने वाले प्रदर्शन को प्रभावित करते हैं। उदाहरण के लिए, यदि आप इंटेल सैंडी ब्रिज के प्रदर्शन को देख रहे हैं, तो आपको यह ध्यान रखना होगा कि इसमें एवीएक्स नामक एक निर्देश सेट है जो प्रति निर्देश 8 एसपी ऑपरेशंस कर सकता है। –

3

प्रदर्शन का पसंदीदा उपाय समाप्त हो गया है। जीएफएलओपी को तुलनात्मक विधि के रूप में उपयोग किया जा सकता है लेकिन निर्देश सेट, कंपाइलर कोड पीढ़ी, और एफएलओपी गिनने की विधि में मतभेदों के कारण कंपाइलर्स और आर्किटेक्चर के बीच तुलना करना अक्सर मुश्किल होता है।

सबसे अच्छा तरीका एप्लिकेशन के प्रदर्शन के समय है। सीयूडीए कोड के लिए आपको प्रत्येक कोड का समय देना चाहिए जो प्रति लॉन्च होगा। इसमें स्मृति प्रतियां और सिंक्रनाइज़ेशन शामिल है।

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

+0

मैं बीत चुके समय का उपयोग करके सीपीयू और जीपीयू के प्रदर्शन की जांच करता हूं। मेरा सवाल यह है कि उनमें से अंतर दर सीपीयू और जीपीयू के बीच 10 गुना है। लेकिन क्या मैं कह सकता हूं कि 10 गुना (दर) सर्वश्रेष्ठ प्रदर्शन है? यदि हां, क्यों? यदि नहीं, क्यों ?? यह मेरा सवाल है .. –

संबंधित मुद्दे