什么是CUDA的__syncthreads()和blockIdx.x的OpenCL模拟?

时间:2013-03-05 13:02:43

标签: cuda parallel-processing opencl

我正在尝试将CUDA代码转换为OpenCL,现在我仍然坚持使用这些函数/变量:

  • __syncthreads()
  • blockIdx.x

3 个答案:

答案 0 :(得分:9)

其实我是靠自己找到的!这是一篇有用的文章:http://www.netlib.org/utk/people/JackDongarra/PAPERS/parcocudaopencl.pdf

答案是:对于__syncthreads()使用barrier(CLK_LOCAL_MEM_FENCE);对于blockIdx.x,请使用get_group_id(0)!

答案 1 :(得分:5)

__syncthreads() - > barrier(_)但请务必了解barrier(CLK_LOCAL_MEM_FENCE)barrier(CLK_GLOBAL_MEM_FENCE)之间的区别  查看此question或此documentation了解详情。

blockIdx.x - > get_group_id(0)将为您提供组/块的第一个/ x维度ID

答案 2 :(得分:0)

网上有很多页面可以帮助您将CUDA移植到OpenCl(例如here)。我只想说明,因为它指出here为“障碍”,有barrier(CLK_LOCAL_MEM_FENCE)barrier(CLK_GLOBAL_MEM_FENCE):主要区别在于第一个确保正确排序内存操作当您使用本地(在CUDA中共享)内存时,以及当您在全局内存上操作时使用第二个内存。请务必使用正确的一个。