【问题标题】:What's the OpenCL equivalent of the C++ type std::vector::size_type?C++ 类型 std::vector::size_type 的 OpenCL 等价物是什么?
【发布时间】:2012-09-11 22:09:42
【问题描述】:

Where should I using OpenCL data types? 提到了这个话题,但它没有回答我的问题。

(1)对于C++类型std::vector::size_type,绑定opencl类型和内核opencl类型应该是什么?

(2) 在将 std::vector::size_type 设置为 clCreateBuffer() 的主机 ptr 之前,如何将其转换为您在 (1) 的答案中提到的绑定类型?

我需要上面的原因是因为我试图将向量的大小传递到我的内核中。

【问题讨论】:

  • 没有“std::vector::size_t”这样的东西。只有std::vector::size_type,通常与std::size_t 相同。
  • 谢谢。我已经在我的问题中更正了这一点。
  • @KerreSB:确实,std::allocator<T>::size_type 必须是std::size_t。所以vector<T>::size_type不同会有点令人困惑,不同的分配器可能会有所不同。

标签: c++ opencl


【解决方案1】:
  1. 视情况而定。 cl_uint/uintcl_ulong/ulong 是可能的替代方案。当向量的大小最多为 2³² - 1 时,前者就足够了。当且仅当您超过该限制时,您应该考虑使用 cl_ulong/ulong。在此之前,您可能会打破其他一些限制,例如设备的最大允许缓冲区大小 (CL_DEVICE_MAX_MEM_ALLOC_SIZE) 或地址空间 (CL_DEVICE_ADDRESS_BITS)。所以我的建议是坚持使用cl_uint/uint,除非有充分的理由使用cl_ulong/ulong

  2. static_cast<cl_uint>(v.size()) 甚至boost::numeric_cast<cl_uint>(v.size())(如果值不能放入cl_uint,则会引发异常)。

【讨论】:

  • 非常感谢 reima。一个完美的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2016-10-18
相关资源
最近更新 更多