c - 普通的指针算术可以在 opencl 内核上工作吗?

标签 c opencl gpu gpgpu

例如,这段代码能否正常编译并执行?

int* end = local_buffer + BUFFER_SIZE;
for(int* x = local_buffer; x < end; ++x)
{
   ...
}

最佳答案

指针算术确实有效,但您需要使用适当的内存空间来注释指针。因此,您的示例代码很可能是错误的:如果 local_buffer 声明为

local int local_buffer[BUFFER_SIZE];

那么 endx 变量的类型必须也具有 local 说明符:

local int* end = …;
for (local int* x = …

默认值为全局,如果您的指针指向本地或常量内存,这将导致事情严重失败。我发现许多 OpenCL 实现不会就此发出警告,因此您必须非常小心。

关于c - 普通的指针算术可以在 opencl 内核上工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38216611/

相关文章:

tensorflow - GPU 未被 TensorFlow 捕获

gpu - VPU vs FPU vs GPU vs ALU

c++ - 在 CUDA 上乘以两个 float 变量

c - 在 C 中使用不同的分隔符拆分字符串

opencl - 实现零复制时使用 clEnqueueMapBuffer 和 clEnqueueUnmapMemObject 的建议方法

c - For 循环,显示从 -5 到 5 的值,然后以 1 的增量返回到 -5

c++ - OpenCL数据并行求和成一个变量

opencl - 在内核中使用 cl_khr_fp64 时出现错误 CL_INVALID_KERNEL_NAME

从程序集中调用 expf

c - CS50 Speller出现valgrind错误