आपकी समझ, सही है एक संभावित ख़तरा को छोड़कर: documentation कहा गया है कि
OpenCL कार्यान्वयन बफर सामग्री डिवाइस स्मृति में host_ptr
द्वारा की ओर इशारा किया कैश करने के लिए अनुमति दी जाती है। इस कैश की गई प्रति को का उपयोग किया जा सकता है जब किसी डिवाइस पर कर्नेल निष्पादित किए जाते हैं।
इसका मतलब है कि कर्नेल द्वारा किए गए डेटा में किए गए परिवर्तनों को तुरंत host_ptr
में प्रतिबिंबित नहीं किया जा सकता है। वास्तव में, इस बात की कोई गारंटी नहीं है कि host_ptr
में वैध डेटा होता है जबकि इसका उपयोग बफर के लिए किया जाता है।
वैध और अद्यतित डेटा रखने के लिए आपको सिंक्रनाइज़ेशन को मजबूर करना होगा। offcial प्रलेखन इस पल के बारे में थोड़ा अस्पष्ट है, लेकिन निश्चित रूप से buffer mapping/unmapping काम करता है:
तो बफर वस्तु mem_flags
में CL_MEM_USE_HOST_PTR
सेट के साथ बनाया जाता है, host_ptr
clCreateBuffer
में निर्दिष्ट की गारंटी है में नवीनतम बिट्स को रोकने के लिए clEnqueueMapBuffer
कमांड पूरा हो गया है जब क्षेत्र मैप किया जा रहा है; और पॉइंटर मान clEnqueueMapBuffer
द्वारा लौटाया गया host_ptr
से बफर ऑब्जेक्ट बनाया गया है जब निर्दिष्ट किया जाएगा।
यहाँ एक उदाहरण Khronos group forum post से अनुकूलित है:
cl_mem device_output = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, size, original_output, NULL);
// run the kernel
void* pointer = clEnqueueMapBuffer(queue, device_output, CL_TRUE, CL_MAP_READ, size, 0, 0, NULL, NULL, NULL);
// work with 'original_output'
clEnqueueUnmapMemObject(queue, device_output, pointer, 0, NULL, NULL);
clReleaseMemObject(device_output);
यह एक सूक्ष्म पकड़ लिया है और मैं इस से भी काट लिया गया है, तो यह अच्छी बात है कि आप इस लाया। – Ani
@aland मुझे लगता है कि मैं बहुत देर से पूछ रहा हूं .. लेकिन स्मृति को मैप करने की बजाय, अगर मैं घटना का उपयोग कर इंतजार कर रहा हूं .. क्या यह होस्ट डिवाइस में मेरी उचित सरणी अपडेट करेगा? मेरे लिए यह काम कर रहा है (हो सकता है कि मैं कर्नेल खत्म करने के लिए घटना का उपयोग कर रहा हूं)। लेकिन फिर मैं मैपिंग छोड़ सकता हूँ? –
@ विश्ववाडे बस निष्पादन खत्म करने के लिए कर्नेल की प्रतीक्षा कर रहे हैं [* नहीं * पर्याप्त] (http://www.khronos.org/message_boards/showthread.php/6912-Clarify-CL_MEM_USE_HOST_PTR?p=22099&viewfull=1#post22099)। आपका दृष्टिकोण काम कर सकता है, especitally अगर आप केवल सीपीयू का उपयोग कंप्यूट डिवाइस के रूप में करते हैं, लेकिन यह अभी भी अपरिभाषित व्यवहार है। – aland