【发布时间】:2011-12-07 07:35:06
【问题描述】:
这个使用两个__restrict__ int 数组的内核编译得很好:
__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]实际上是一个数组,如果有两个点。我认为,它不适用于主机代码... -
Restrict 真的能给你带来一些性能上的好处吗??
-
第二次使用
__restrict__完全没有意义。__restrict__的全部意义在于告诉编译器两个或多个指针参数永远不会在内存中重叠。在这种情况下,您没有两个指针参数,因此__restrict__不适用。 -
为什么不
int * __restrict__ * __restrict__ arr?不过,这可能太过分了。你可能只需要int * __restrict__ * arr。