這個內核使用兩個__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
}
但是,組合成一個指針數組相同的兩個int陣列失敗編譯:
__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]'實際上是一個數組,如果兩個點。我認爲,它不適用於主機代碼... – Yappie
限制是真的讓你獲得一些性能優勢? – Yappie
'__restrict__'的第二次使用完全沒有意義。 '__restrict__'的要點是告訴編譯器兩個或更多的指針參數不會在內存中重疊。在這種情況下,你沒有兩個指針參數,所以'__restrict__'不適用。 – talonmies