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)
これは正常に機能します。最初の定義で、デバッグのための同期呼び出しとエラーチェックを有効にできます。
ただし、以下のような複数のテンプレート引数では機能しません。
LAUNCH(my_kernel<int,float>, 32, 32, param1, param3)
マクロを呼び出した行に表示されるエラーメッセージ:
error : expected a ">"
このマクロを複数のテンプレート引数で機能させることは可能ですか?