opencl - 重新利用 openCL 内存

标签 opencl pyopencl

大家好, 作为一个例子,考虑两个 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/

相关文章:

使用 Random123 通过 OpenCL 生成随机数

c++ - OpenCL FFT 实现 - 无意义的输出数据 - 可能是正确的算法

python - 如何在 pyopencl 中明确设置工作维度?

python - 我可以使用 PyOpenCL 与 Scipy 集成来与 GPU 并行执行差分进化吗?

c - 纯 C OpenCL 与 Python OpenCL 性能对比

python - 有没有办法分析 OpenCL 或 pyOpenCL 程序?

c - (OpenCL+OpenCV) 如何使用clEnqueueWriteBuffer的偏移量?

python - 将向量 (float4) kernell 参数传递给 OpenCL (Python)

python - OpenCL:内核是在 CPU 还是 iGPU 上运行?

opencl - clBuildProgram 失败,错误代码为 -11 且没有构建日志