2つの__restrict__
int型の配列を使用して、このカーネルは、微細コンパイル:CUDA:配列へのポインタの配列に__restrict__を適用する方法は?
__global__ void kerFoo(int* __restrict__ arr0, int* __restrict__ arr1, int num)
{
for (/* Iterate over array */)
arr1[i] = arr0[i]; // Copy one to other
}
しかし、同じ2つの整数アレイが構成されるポインタ配列は、コンパイル失敗に:
__global__ void kerFoo(int* __restrict__ arr[2], int num)
{
for (/* Iterate over array */)
arr[1][i] = arr[0][i]; // Copy one to other
}
をコンパイラによって与えられたエラーがある:
error: invalid use of `restrict'
私は配列へのポインタの配列として構成されている特定の構造を持っています。 (例えば、構造体がint* arr[16]
のカーネルに渡されました)カーネルにそれらを渡して、それらに__restrict__
を適用できるようにするにはどうすればいいですか?
'__restrict__'はポインタには本当に便利ですが、' int * arr [2] 'は実際には2点の配列です。私は、それはホストコードのために動作しないと思う... – Yappie
制限は本当にあなたにいくつかのパフォーマンスの利点を得るのですか? – Yappie
'__restrict__'の2度目の使用は絶対に意味がありません。 '__restrict__'の全体のポイントは、2つ以上のポインタ引数がメモリ内で重複しないことをコンパイラに伝えることです。その場合、2つのポインタ引数がないので、 '__restrict__'は適用されません。 – talonmies