मेरे पास है:बेहतर या वही: सीपीयू memcpy() बनाम डिवाइस cudaMemcpy() पिन पर, cUDA में मैप मेमोरी?
- होस्ट स्मृति है कि सफलतापूर्वक पिन किए गए और
cudaHostAlloc(..., cudaHostAllocMapped)
याcudaHostRegister(..., cudaHostRegisterMapped)
का उपयोग कर मैप किया; - डिवाइस पॉइंटर्स
cudaHostGetDevicePointer(...)
का उपयोग करके प्राप्त किए गए हैं।
मैं src और गंतव्य डिवाइस संकेत दिए गए कि पिन किए गए + मैप की स्मृति के दो अलग-अलग क्षेत्रों के ऊपर तकनीक के द्वारा प्राप्त को इंगित पर cudaMemcpy(..., cudaMemcpyDeviceToDevice)
आरंभ करें। सबकुछ ठीक काम करता है।
प्रश्न: क्या मुझे यह करना जारी रखना चाहिए या पारंपरिक सीपीयू-शैली memcpy()
का उपयोग करना चाहिए क्योंकि सब कुछ सिस्टम मेमोरी में है? ... या वे समान (यानी cudaMemcpy
सीधे memcpy
पर नक्शा हैं जब दोनों स्रोत और dest पिन पिन किए जाते हैं)?
(मैं अभी भी cudaMemcpy
विधि का उपयोग कर रहा है, क्योंकि पहले से सब कुछ उपकरण वैश्विक स्मृति में किया गया था, लेकिन जब से gmem आकार की कमी के कारण पिन किए गए स्मृति में बदला गया है) (
यह एक दिलचस्प सवाल है। बशर्ते आप एक अनुकूलित memcpy का उपयोग करें, सीपीयू शायद बेहतर है - स्मृति इसके बाद से संबंधित है - और मेजबान करने के लिए एक अलग GPU की क्षमता-> मेजबान memcpy पीसीआई बैंडविड्थ तक ही सीमित है। लेकिन अगर जीपीयू अन्यथा निष्क्रिय होगा, तो क्यों नहीं? – ArchaeaSoftware
मुझे उम्मीद है कि जीपीयू प्रतिलिपि नहीं करेगा। मुझे उम्मीद है कि रनटाइम यह देखेगा कि पॉइंटर्स मेजबान पॉइंटर्स दोनों हैं और मेजबान memcpy का आह्वान करते हैं। मैंने यह जानने के लिए कहा है कि वास्तव में क्या होता है। – harrism