我在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。
有人能告诉我原因吗?
由于
答案 0 :(得分:2)
float4
是设备类型,用于内核代码。在主机端,您需要使用cl_float4
,并且访问者是不同的(更像数组表示法)。