Cuda中的静态关键字

只是想知道为什么对于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章