में पिन की गई मेमोरी/मैप की गई मेमोरी का उपयोग कैसे करें मेरे आवेदन के लिए मेजबान से डिवाइस में स्थानांतरण समय को कम करने के लिए, मैं पिन की गई मेमोरी का उपयोग करना चाहता हूं। NVIDIA's best practices guide मानचित्रण बफ़र्स का प्रस्ताव है और निम्नलिखित कोड का उपयोग कर डेटा लेखन:ओपनसीएल
cDataIn = (unsigned char*)clEnqueueMapBuffer(cqCommandQue, cmPinnedBufIn, CL_TRUE,CL_MAP_WRITE, 0, memSize, 0, NULL, NULL, NULL);
for(unsigned int i = 0; i < memSize; i++)
{
cDataIn[i] = (unsigned char)(i & 0xff);
}
clEnqueueWriteBuffer(cqCommandQue, cmDevBufIn, CL_FALSE, 0,
szBuffBytes, cDataIn, 0, NULL, NULL);
Intel's optimization guide clEnqueueReadBuffer या clEnqueueWriteBuffer के लिए कॉल के बजाय clEnqueueMapBuffer और clEnqueueUnmapBuffer के लिए कॉल उपयोग करने के लिए सिफारिश की।
पिन की गई मेमोरी/मैप किए गए मेमोरी का उपयोग करने का सही तरीका क्या है? क्या enqueueWriteBuffer का उपयोग कर डेटा लिखना आवश्यक है या enqueueMapBuffer पर्याप्त है?
इसके अलावा, CL_MEM_ALLOC_HOST_PTR और CL_MEM_USE_HOST_PTR के बीच क्या अंतर है?
यह वास्तव में अजीब बात है कि आपको मानचित्र/अनमैप के साथ clEnqueueWriteBuffer() का उपयोग करने की आवश्यकता है। चूंकि आप मानचित्र करते हैं, और उसके बाद होस्ट पॉइंटर बदलते हैं, तो आप वास्तव में दोनों CPU और GPU डेटा बदल रहे हैं। जब आप अनैप करते हैं, तो डेटा सीपीयू और जीपीयू पक्ष के बीच सिंक्रनाइज़ किया जाएगा। मैं एमएपी + सीडीटाइन और यूएनएमएपी के बीच एक clEnqueueWriteBuffer करने की आवश्यकता को समझ नहीं पा रहा हूं। बहुत अजीब... –