CUDA內核啓動宏我做了一個宏來簡化CUDA內核調用:使用模板
#define LAUNCH LAUNCH_ASYNC
#define LAUNCH_ASYNC(kernel_name, gridsize, blocksize, ...) \
LOG("Async kernel launch: " #kernel_name); \
kernel_name <<< (gridsize), (blocksize) >>> (__VA_ARGS__);
#define LAUNCH_SYNC(kernel_name, gridsize, blocksize, ...) \
LOG("Sync kernel launch: " #kernel_name); \
kernel_name <<< (gridsize), (blocksize) >>> (__VA_ARGS__); \
cudaDeviceSynchronize(); \
// error check, etc...
用法:
LAUNCH(my_kernel, 32, 32, param1, param2)
LAUNCH(my_kernel<int>, 32, 32, param1, param2)
也能正常工作;與第一個定義我可以啓用synronous調用和錯誤檢查調試。
但是它並不能與多個模板參數,像下面的工作:
LAUNCH(my_kernel<int,float>, 32, 32, param1, param3)
錯誤消息我在該行獲得,我調用宏:
error : expected a ">"
是否有可能使這個宏工作與多個模板參數?
這是真的發生在你給的情況下,還是隻有當模板有多個參數? – Angew 2013-02-14 12:12:51
是的,它只有多個參數失敗。我要糾正這個問題。 – hthms 2013-02-14 12:27:10
問題是預處理器對角度括號嵌套一無所知,所以它將它們之間的逗號解釋爲宏參數分隔符。 – Angew 2013-02-14 12:32:20