0
我在我的應用程序中使用了許多向量。在正方形網格中,這些是我可以從單元中心走向的主要方向和對角線方向的向量。我的OpenCL內核會經常使用它們,所以我想在常量內存中定義它們。我在我的內核文件中寫了如下一段代碼:OpenCL中常量數組初始值設定項中的三角函數
#define N_RADIAN 2 * M_PI_4_F
#define NE_RADIAN 1 * M_PI_4_F
#define E_RADIAN 0 * M_PI_4_F
#define SE_RADIAN 7 * M_PI_4_F
#define S_RADIAN 6 * M_PI_4_F
#define SW_RADIAN 5 * M_PI_4_F
#define W_RADIAN 4 * M_PI_4_F
#define NW_RADIAN 3 * M_PI_4_F
constant float2 E[8] = {
(float2)(cos(N_RADIAN), sin(N_RADIAN)), // N
(float2)(cos(NE_RADIAN), sin(NE_RADIAN)), // NE
(float2)(cos(E_RADIAN), sin(E_RADIAN)), // E
(float2)(cos(SE_RADIAN), sin(SE_RADIAN)), // SE
(float2)(cos(S_RADIAN), sin(S_RADIAN)), // S
(float2)(cos(SW_RADIAN), sin(SW_RADIAN)), // SW
(float2)(cos(W_RADIAN), sin(W_RADIAN)), // W
(float2)(cos(NW_RADIAN), sin(NW_RADIAN)) // NW
};
此代碼拒絕爲我編譯。我得到的錯誤消息是 錯誤:初始化程序元素不是編譯時常量。我可以理解,如果必須在設備上調用數學函數來獲取數組的值。如果是這樣的話,我可以做一個內核來計算這些值而不用大驚小怪。但是,這種方法對我來說會更方便。有沒有什麼辦法可以在常量內存中聲明這些值?你是否看到這種方法或代碼的其他問題?
簡單而準確。也許我會顛覆我最初的計劃。 – Steinin