从opencl内核中调用一个具有通过值概念的函数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从opencl内核中调用一个具有通过值概念的函数。相关的知识,希望对你有一定的参考价值。

例如,如果我想使用pass by values的概念。

void sum(int &u, int &v)
{    return u+v;  }

__kernel void testing(__global int *a, __global int *b, __global int *c)
{    int i = get_global_id(0);
     int u = max(a,b);
     int v = min(b,c);
     int x = sum(u,v);
}

现在我的错误在'&'符号处,我无法使用pass by reference概念传递参数,怎么办?

答案

C语言不支持通过引用传递变量,Opencl(v1.x)内核和C99一样工作。你需要使用直接指针(这是一种逐值传递)。

int sum(int *u, int *v)
{    return (*u)+(*v);  }

OpenCL v2.x可以编译C++,但还是需要先得到驱动和硬件的支持。

以上是关于从opencl内核中调用一个具有通过值概念的函数。的主要内容,如果未能解决你的问题,请参考以下文章

GPU 中的并行性 - CUDA / OpenCL

如何在 OpenCL 内核中更新 OpenCL-OpenGL 共享缓冲区数据?

OpenCL异构并行计算

Opencl:从 __constant 复制到 __global 内存

OpenCL 内核不向主机程序返回字符数据

OpenCL 中的全局内存是不是连续