2013-03-05 2 views

उत्तर

9

असल में मैं इसे अपने स्वयं के द्वारा मिल गया! यहां एक उपयोगी आलेख है: http://www.netlib.org/utk/people/JackDongarra/PAPERS/parcocudaopencl.pdf

उत्तर है: __syncthreads() बाधा का उपयोग (CLK_LOCAL_MEM_FENCE); blockIdx.x के लिए get_group_id (0) का उपयोग करें!

5

__syncthreads() ->barrier(_) लेकिन barrier(CLK_LOCAL_MEM_FENCE) और barrier(CLK_GLOBAL_MEM_FENCE) जांच इस question या अधिक जानकारी के लिए इस documentation के बीच अंतर समझना सुनिश्चित करें।

blockIdx.x ->get_group_id(0) जो आप समूह/ब्लॉक के पहले/एक्स आयाम आईडी दे देंगे

0

वेब पर कई पृष्ठों है कि आप OpenCL के लिए CUDA पोर्टिंग के लिए मदद कर सकते हैं कर रहे हैं (उदाहरण के here के लिए)। मैं केवल टिप्पणी करना चाहता हूं, क्योंकि यह "बाधा" के लिए here इंगित करता है, कि barrier(CLK_LOCAL_MEM_FENCE) और barrier(CLK_GLOBAL_MEM_FENCE) हैं: मुख्य रूप से अंतर यह है कि जब आप स्थानीय (CUDA में साझा) मेमोरी का उपयोग कर रहे हैं तो पहला व्यक्ति स्मृति संचालन के सही क्रम को सुनिश्चित करता है और दूसरा जब आप वैश्विक स्मृति पर काम कर रहे हैं। अपने मामले के लिए सही का उपयोग करना सुनिश्चित करें।

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