2016-04-29 12 views
1

カーネル用のコードを記述する際に、汎用データ型を指定して、使用されているデータ型ごとにカーネルをコピーする必要はありませんか?現在私は、さまざまなデータ型で関数全体を定義するためにプリプロセッサマクロを使用しています:汎用データ型を持つOpenCLカーネル

#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \ 
{ \ 
// do something 
} \ 

REDUCTION(float) 
REDUCTION(float2) 

これは非常に快適ではありません。 gentypeのような型指定子がありますか?

答えて

2

OpenCL 2.1から、C++とテンプレートをカーネルコードKnronos's OpenCL pageで使用できるようにする必要があります。それと

、あなたは簡単に書くことができます。

template <class T> 
void reduce_f(__global __read_only T* a) { 
    // do something 
} 

私はテンプレートが__kernel関数の定義に利用できるようになる100%を確認していないが。そうでない場合は、カーネル宣言を前処理マクロ内に次のようにラップする必要があります。

#define REDUCTION(type) __kernel void reduce_##type##_f(__global __read_only type* a) \ 
{ \ 
    return reduce_t(a); \ 
} 

REDUCTION(float) 
+0

マクロの行末にバックスラッシュを入れてはいけませんか? – einpoklum

関連する問題