大家好, 作为一个例子,考虑两个 openCL 内核,一个内核让我们说 add,另一个是 sub。
添加内核是
__kernel void add(global int *output1,global int *input1,global int *input2
/* Put other parameters here */
)
{
int i = get_global_id(0);
output1[i] = input1[i] + input2[i];
}
子内核是
__kernel void add(global int *output2,global int *input1,global int *input2
/* Put other parameters here */
)
{
int i = get_global_id(0);
output2[i] = input1[i] - input2[i];
}
对于两个输入相同的两个内核,我需要将相同的输入(input1 和 input2)从主机内存复制到设备两次,这可能会增加一些性能成本。
有什么方法可以让我复制一次数据并在任何函数中重新使用它,直到我不释放内存为止?
最佳答案
将此作为答案,因为它似乎完全回答了问题。
您通常在设备内存中创建缓冲区,并且可以通过 clSetKernelArg() 重新定义内核参数来重用这些缓冲区(当然,除非您想同时使用它们,这比较棘手,我不确定 OpenCL 标准实际上是否允许这样做)。
关于opencl - 重新利用 openCL 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564460/