c - 在 OpenCl 内核中使用指针

标签 c pointers opencl

我在 OpenCl 内核中有以下代码:

char* read_data(char* data) {
    return data;
}

__kernel void some_function(__global char* source_data, __global char*  output_data) {
    char *ptr = read_data(source_data); // <--- doesn't work
    char *ptr2;
    ptr = read_data(ptr2); // <--- works
}

当我为 source_data 调用函数 read_data 时,它不起作用,并且当我使用 clBuildProgram 构建它时,出现错误 -11 (CL_BUILD_PROGRAM _FAILURE) 。 如果我写

global char *ptr3 = source_data;

直接在内核函数中,它可以工作,但当我删除global时停止工作。但是,将 global 添加到 read_data 函数并没有帮助。

我使用的是 OpenCl 1.2,因此它应该允许使用 char*(与 1.0 不同)。

知道如何让它发挥作用吗?

最佳答案

所以,我能够通过将三件事全局化来解决这个问题:

  1. 函数read_data
  2. 该函数的参数
  3. 我将返回值分配给的变量

以下工作正常:

global char* read_data(global char* data) {
    return data;
}

__kernel void some_function(__global char* source_data, __global char* output_data) {
    global char *ptr = read_data(source_data);
}

关于c - 在 OpenCl 内核中使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868095/

相关文章:

c - 如何 printf ("%0x") 并根据类型确定位数?

c++ - 省略数据类型(例如 "unsigned"而不是 "unsigned int")

c - 在 C 编程中,如何将 char * 转换为 int,然后再转换回 char *?

c - OpenCL/C pow(x,0.5) != sqrt(x)

android - 带有Android OpenCV SDK的OpenCL和GPU

c - 使 DMA 内存可临时缓存

C递归函数传递char数组

c - 我想用 c 语言使用 libimobiledevice 但我不明白

c - 指针返回地址

opencl - 我可以分配大于 CL_DEVICE_MAX_MEM_ALLOC_SIZE 的内存吗?