2013-03-29 83 views
0

我有一個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等 - 但我需要代碼中的性能,所以這種解決方案是不可接受的)?

+0

刪除cuda標籤 –

回答

0

所以顯然閱讀圖像通過read_imagei工作正常。我也看着規格,並發現你的設備可以鉗位非規範浮點數​​爲零。

+0

這應該是一個答案? – talonmies