OpenCL read_imagef奇怪的行为

我有一个CL_FLOAT格式的图像并存储所有RGBA通道。现在,图像的每4个像素已经存储在那里的整数,我clasically并将其作为:OpenCL read_imagef奇怪的行为

image[i * 4 + 3].x = *(float*)(&someInt); 

image[i * 4 + 3].y = *(float*)(&someInt2);

etc.

当我需要这些是整数(而不是浮动),像素的其余的都储存花车,所以我这里没有太多选择。

当我看到像从OpenCL的背我正确地获取值,问题就出现在OpenCL的内核:

每当我读到像这样的(采样设置只是最近过滤):

float4 fourthPixel = read_imagef(img, sampler, coords); 

我尝试将其转换为整数

int id = as_int(fourthPixel.x); 

我不读正确的数字(它总是返回0,除非数量是整数形式相当高的)。

到目前为止,我得到了几点 - 如果我存储号码像1505353234它工作,让我回6539629947781120.000000 - 这是正确的。如果我存储较小的数字,似乎read_imagef只是钳位然后下降到0.

所以很明显,所有的非规格化数字都被限制为零。那么,是否有任何好的方法来实际强制read_imagef不将非规范化数字限制为零,而无需添加进一步的指令(您可以添加0x7f000000等 - 但我需要代码中的性能,所以这种解决方案是不可接受的)?

回答:

所以显然阅读图像通过read_imagei工作正常。我也看着规格,并发现你的设备可以钳位非规范浮点数​​为零。

以上是 OpenCL read_imagef奇怪的行为 的全部内容, 来源链接: utcz.com/qa/258320.html

回到顶部