我正在使用经过优化的GPU驱动程序,以与16元素矢量数据类型一起使用。 但是,我不确定如何正确使用它。
cl_float16
吗?谢谢。
答案 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}}-很可能会胡扯。