c++ - clCreateImage2D(..., void* hst_ptr,..) 怎么用呢?

标签 c++ opencl

我在官方网站上阅读了正式定义,但仍然不明白:What is void* hst-ptr used for?例如here .为什么这里的buffer这么有用,为什么buffer是一个指向char的指针,大小是4*width*height

最佳答案

host_ptr 在指定标志 CL_MEM_USE_HOST_PTRCL_MEM_COPY_HOST_PTR 时使用。在这些情况下,host_ptr 指向包含要使用或复制的图像的 CPU 内存。

在您链接到的示例代码中,buffer 是主机端(CPU 内存)图像被复制到设备端(GPU typ.)图像(因为它们使用 CL_MEM_COPY_HOST_PTR 标志)。

他们将其设为指向 char 的指针并不重要,因为他们使用 memcpy 来填充它,但它有助于使用 new char 进行分配,因为 char 是大小为 1 个字节。

4 * width * height 是因为这是所需的字节(字符)总数。

  1. 4 是一个 CL_RGBA CL_UNORM_INT8 像素的大小(R、G、B、A 各为一个字节)。
  2. width * height 因为那是像素的总数。

这段代码为图像分配主机端内存,用一些东西填充它,然后使用这些字节创 build 备端图像,然后使用内核处理它,然后将字节复制回主机端图像.

关于c++ - clCreateImage2D(..., void* hst_ptr,..) 怎么用呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222850/

相关文章:

c++ - 在 OpenCL 中从 GPU 编程中获取初始值

c++ - 射线四边形相交代码的问题(看起来像撕裂)

c++ - 带有 nothrow 选项的 Operator new 仍然抛出异常

c++ - 如何将 ANSI 字节转换为 Unicode 字符串?

c++ _vsnprintf 意外的格式字符串

c++ - 如何创建一个创建自定义 make 目标的 qmake 函数?

opencl - global_work_size 和 local_work_size 对应用程序逻辑有什么影响吗?

c - 使用微软编译器减少 opencl 内置 vector 类型的功能?

opencl - 使用 NVIDIA 的 nvcc 编译器编译和构建 .cl 文件?

c++ - system() 返回错误语法错误 : "(" unexpected