【发布时间】:2018-07-24 00:36:21
【问题描述】:
我在 Windows 上的 nvidia 显卡上使用 OpenCL 2.0 C,我想使用内置的矢量数据类型,但我不能使用它们,它们不知何故没有声明。例如,当我尝试初始化 float4 向量时,出现以下错误:
float4 data_vec = (float4)(1.0, 1.0, 1.0, 1.0);
错误:“float4”未在此范围内声明
我一直在查看 opencl 规范,但找不到原因。 虽然当我尝试获取任何矢量类型的首选宽度时,我得到 1 作为结果,例如:
cl_uint float_width;
err = clGetDeviceInfo(devices[0],
CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT,sizeof(char_width), &char_width, NULL);
printf("%d",float_width);
即使我尝试CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 或CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 结果我得到1。
谁能告诉我原因?
谢谢
【问题讨论】:
-
float4是一种设备类型,用于内核代码。你在哪里使用float4,在主机上还是在设备代码中?在您需要使用 cl_float4 的主机上。而且访问器是不同的(更像是数组表示法)。 -
哦,这就是重点,我在主机代码中使用它,我在内核上测试它没有错误,非常感谢。
-
我会把它作为未来观众的答案。