【问题标题】:OpenCL buffers and data calculationOpenCL 缓冲区和数据计算
【发布时间】:2018-01-28 14:54:01
【问题描述】:

如果我想将此代码格式化为 OpenCL,我应该考虑什么?比如我应该使用什么缓冲区? 如果我想知道内核为此使用了多少数据,我该如何计算呢?

int A[100000]
int B[100000]

    for(int i=1; i<100000 -1); i++) {
      B[i] = A[i-1] + A[i+1] - 2*A[i]
    }

感谢所有帮助

【问题讨论】:

  • 我建议您提出更精确的问题,有很多指南解释了如何使用 OpenCL。

标签: c kernel buffer opencl


【解决方案1】:

A 和 B 需要两个缓冲区。例如:

cl_int error = CL_SUCCESS;
cl_mem A_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int)*100000, A, &error);
cl_mem B_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, sizeof(int)*100000, B, &error);

如果您希望每个内核只使用 B 的一个元素,那么您的全局工作大小将等于 99999。

您的内核可能看起来像这样(如果一个线程使用一个值,您可能不需要这种并行性,这只是一个示例):

kernel void your_kernel(global int* A, global int* B) {
    int i = get_global_id(0);
    B[i] = A[i-1] + A[i+1] - 2*A[i];
}

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2016-04-17
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多