只是想知道为什么对于C / C ++而言,可以使用关键字“ static”显式限定静态存储变量,而不在Cuda上强制执行相同的操作。据我了解,Cuda中设备上的静态变量很简单:int v = 0.0f;
对于那些了解更多的人,如果我错了,请纠正我。谢谢,
胺
这可能取决于您使用的精确程度static
以及期望值。据我所知,CUDA声称是一个相当完整的,符合标准的C ++实现,具有规定的限制和局限性,据我所知,这种简单的static
行为用法符合我的预期,并且肯定不是静态的隐含没有static
关键字的变量:
$ cat t80.cu
#include <cstdio>
__device__ void test(){
#ifdef USE_STATIC
static int i = 0;
#else
int i = 0;
#endif
printf("i = %d\n", i);
i++;}
__global__ void k(){
for (int i = 0; i < 3; i++) test();
}
int main(){
k<<<1,1>>>();
cudaDeviceSynchronize();
}
$ nvcc -o t80 t80.cu
$ ./t80
i = 0
i = 0
i = 0
$ nvcc -o t80 t80.cu -DUSE_STATIC
$ ./t80
i = 0
i = 1
i = 2
$
我看不出您如何支持该主张:
在Cuda中,例如device上的静态变量很简单:int v = 0.0f;
基于上述测试用例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句