我試圖減少CUDA內核的指令和常量內存讀取次數。使用宏爲CUDA定義常量
因此,我意識到我可以從常量內存中取出瓦片大小並將它們變成宏。如何定義在預處理期間評估爲常量的宏,以便我可以簡單地調整三個值並減少每個內核中執行的指令數量?
下面是一個例子:
#define TX 8
#define TY 6
#define TZ 4
#define TX2 (TX * 2)
#define TY2 (TY * 2)
#define OVER_TX (1.0f/float(TX))
也許這已經是這樣了(或者可能由NVCC編譯器處理),但顯然我希望宏的第二塊由預處理器進行評估,而不是替換該代碼使其不在每個內核中執行。有什麼建議麼?
如果您打算使用預處理器定義來執行此操作,則最好將所有內容括起來,因此不要使用「#define TX2 TX * 2」來執行「#define TX2(TX * 2)」。這樣,如果使用常量的地方的操作的優先級等於或高於常量中的操作,那麼您不會收到意外的行爲。正如當前定義的「x/TX2」!=「x /(TX2)」,但如果它導致錯誤,很難找到它。 – asm 2010-03-04 11:29:23
你是完全正確的,編輯了答案。還增加了一個更復雜的例子... – Dan 2010-03-04 11:36:04