我应该在哪里使用 OpenCL 数据类型?但它没有回答我的问题。
(1) C++类型std::vector::size_type的绑定opencl类型和内核opencl类型应该是什么?
(2) 在将 std::vector::size_type 设置为 clCreateBuffer() 中的主机 ptr 之前,如何将 std::vector::size_type 转换为您在 (1) 的答案中提到的绑定类型?
我需要上述内容的原因是因为我试图将向量的大小传递到我的内核中。
我应该在哪里使用 OpenCL 数据类型?但它没有回答我的问题。
(1) C++类型std::vector::size_type的绑定opencl类型和内核opencl类型应该是什么?
(2) 在将 std::vector::size_type 设置为 clCreateBuffer() 中的主机 ptr 之前,如何将 std::vector::size_type 转换为您在 (1) 的答案中提到的绑定类型?
我需要上述内容的原因是因为我试图将向量的大小传递到我的内核中。
这取决于。cl_uint
/uint
和cl_ulong
/ulong
是可能的替代方案。当向量的大小最多为 2³² - 1 时,前者就足够了。当且仅当您超过该限制时,您应该考虑使用cl_ulong
/ ulong
。在此之前,您可能会打破一些其他限制,例如最大允许的缓冲区大小 ( CL_DEVICE_MAX_MEM_ALLOC_SIZE
) 或设备的地址空间 ( CL_DEVICE_ADDRESS_BITS
)。所以我的建议是坚持cl_uint
/uint
除非有很好的理由使用cl_ulong
/ ulong
。
static_cast<cl_uint>(v.size())
甚至boost::numeric_cast<cl_uint>(v.size())
(如果值不适合 a ,则会引发异常cl_uint
)。