OpenCL向量数据类型的用法

时间:2019-03-21 16:16:46

标签: opencl

我正在使用经过优化的GPU驱动程序,以与16元素矢量数据类型一起使用。 但是,我不确定如何正确使用它。

  • 我应该在主机上声明其大小为原始数组16倍的cl_float16吗?
  • 在OpenCL内核上访问此类型的更好方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

在主机代码中,您可以使用cl_float16主机类型。像数组一样访问它(例如value.s[5])。作为内核参数传递。在内核中,像value.s5这样访问。

答案 1 :(得分:0)

如何在主机上声明它几乎无关紧要。重要的是如何分配它,即使仅当计划使用CL_MEM_USE_HOST_PTR和GPU使用系统内存来创建缓冲区时,也是如此。这是因为您的内存需要正确对齐以实现GPU零复制,否则驱动程序将创建一个背景副本。如果您的GPU不使用系统内存作为缓冲区,或者您不使用CL_MEM_USE_HOST_PTR,则没关系-驱动程序将在GPU上分配适当的缓冲区。

更大的问题是您的GPU需要使用16个元素的向量。您将必须向量化要在其上运行的每个内核。 IOW我们算法的每个部分都需要使用float16类型。如果仅使用简单的浮点数,或者将缓冲区声明为global float16* X,然后使用元素访问(X.s0,Xw等)并对其进行处理,则性能将与声明缓冲区{ {1}}-很可能会胡扯。