私は、次のパラメータ受け入れカーネルがあります。OpenClカーネルのインデックスをオフセットする方法はありますか?
1)グローバルIDはローカルIDは16以下
は、私が使用しているカーネルではないですが、私はそれを使用しています)
2 1040です私が実装したいものを示しています。基本的にAとBの配列入力は1040 * 10です。
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, int Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
// Do the operation
C[i + Offset*constant] = A[i + Offset*constant] + B[i + Offset*constant];
}
定数が一定であるのに対し、私は、...、値0,1を含む、ある種の「アレイ」とオフセット9たい。私はすでに配列としてこれらの値を渡してみましたが、この方法でオフセットを使用する配列を持つことはできないと思います(プログラムがクラッシュする)。私が書きたいもののサンプルは以下の通りです:
__kernel void vector_add(__global const int *A, __global const int *B, __global int *C, __constant const int *Offset, int constant) {
// Index of the current element to be processed
int i = get_global_id(0);
for (int k = 0; k < 10; k++) {
// Do the operation
C[i + Offset[k]*constant] = A[i + Offset[k]*constant] + B[i + Offset[k]*constant];
}
}
ご注意:グローバルIDをスケーリング私のカーネルでは、それが固定されたままする必要があるため、オプションではありません。したがって、これを達成するためにとにかくありますか?
EDIT:私が実装したいものの例を追加しました。現在、このように動作しません。これは合法ですか?私が得た
配列要素が0の場合はクラッシュしないでください。クラッシュしないと、バッファの範囲外です。 –
@huseyintugrulbuyukisik私の質問を編集しました。私が投稿した2番目のカーネルは動作しません...これは合法だと言えば、ホストコードに問題があります – user1816546