के साथ स्थिरांक का उपयोग करना CUDA में स्थिरांक का उपयोग करने का सबसे अच्छा तरीका कौन सा है?CUDA
एक तरह से, निरंतर स्मृति में स्थिरांक परिभाषित करने के लिए है की तरह:
// CUDA global constants
__constant__ int M;
int main(void)
{
...
cudaMemcpyToSymbol("M", &M, sizeof(M));
...
}
एक वैकल्पिक रास्ता सी पूर्वप्रक्रमक उपयोग करने के लिए होगा:
#define M = ...
मैं सी पूर्वप्रक्रमक साथ स्थिरांक को परिभाषित करने लगता होगा बहुत तेज है। फिर एक CUDA डिवाइस पर निरंतर स्मृति का उपयोग करने के लाभ क्या हैं?
संकलन समय पर ज्ञात स्थिरांक प्रीप्रोसेसर मैक्रोज़ (यानी # परिभाषित') का उपयोग करके परिभाषित किया जाना चाहिए। अन्य मामलों में, '__constant__' [चर] [http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#constant) एक विकल्प हो सकता है जो CUDA प्रोग्रामर कोड को अनुकूलित करने के लिए उपयोग करता है जो एक्सेस करता है गणना किए गए चर जो बदलते नहीं हैं। ध्यान दें कि प्रतीक का संदर्भ देने के लिए 'एम "का उपयोग अब cuda 5 में मान्य नहीं है। –
यह जानना दिलचस्प होगा कि इन दो संभावनाओं के बीच रनटाइम अंतर कितना है। मैं कुछ सीएफडी कोडों पर काम कर रहा हूं और मैं पैरामीटर को प्रोग्राम के विकल्पों के रूप में पास करना चाहता हूं, इसलिए पहले दृष्टिकोण का उपयोग करना आवश्यक होगा। दूसरी ओर यदि मैं प्रीप्रोसेसर मैक्रोज़ का उपयोग करता हूं तो यह संभव नहीं होगा। – jrsm
चूंकि आपका दूसरा उदाहरण किसी भी प्रकार का मशीन कोड उत्पन्न नहीं करता है, यह एक समझदार सवाल नहीं है। उस प्रश्न की कोई समझ बनाने के लिए आपको वास्तविक रनटाइम उपयोग परिदृश्य तैयार करना होगा। एक एकल स्केलर के प्रारंभिक भार के लिए एक चर या रजिस्टर में तत्काल मूल्य के लिए, दूसरी विधि हमेशा तेज हो जाएगी। –