2017-07-21 27 views
0

我想編寫一個採用float3數據類型並返回bool4數據類型的內核。我看着說明書,布爾ñ是不內置矢量數據類型像浮ñ,相反,它是下保留數據類型上市下上市,所以我試圖用這樣的:什麼是OpenCL中的保留數據類型?

(__global const float3 *vectors , __global bool4 *booleans) 

但是它返回一個錯誤Unknown type name 'bool4'。那麼什麼是保留數據類型,我該如何使用它們?

+0

Google,第一個結果:它們[不能被應用程序用作用戶定義的類型名稱。](https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/reservedDataTypes。 html) – Lovy

+0

我讀到了,但我仍然不明白。爲什麼他們寫在規範中,如果他們不能使用?以及使用bool4的替代方法是什麼? –

+0

'bool4'不保留。好像'typen'是保留的,如果n不是2的冪。所以float3是保留的,但你可以簡單地使用一個float4。 – Lovy

回答

1

保留數據類型cannot be used by applications as user-defined type names

  • float3被保留,以及floatn,其中n不是2的冪。因此,我將使用推薦和float4不事有關的最後一個組件

  • bool4被保留,以及爲booln爲所有n。不過,您仍然可以使用char4

如果大小在內存中真的很重要,你可以使用以下命令:

union { 
    char raw; 
    struct st { 
     unsigned int i : 1; // bit field to use only one bit 
    } c[4]; 
} my_bool4; 

然後用my_bool4.c[i]訪問每個組件的所有我在[0,3],或my_bool4.raw和位掩碼。

這樣,my_bool4只會長度爲1個字節,而不是4個字節長爲char4(當然,這取決於編譯器,但你要求爲1個字節)。

相關問題