Cuda中的静态关键字

Cuda中的静态关键字,cuda,Cuda,只是想知道为什么对于C/C++来说,会显式地用关键字“static”限定静态存储变量,而不会在Cuda上强制执行相同的操作。据我所知,Cuda中的静态变量(例如设备)是:intv=0.0f 对于那些知道更多的人,如果我错了,请纠正我。谢谢 Amine这可能取决于您使用静态的准确程度以及您的期望值。据我所知,CUDA声称自己是一个,从我所知道的情况来看,static的这种简单用法的行为与我所期望的一样,并且肯定不是在没有static关键字的情况下隐含静态变量: $ cat t80.cu #incl

只是想知道为什么对于C/C++来说,会显式地用关键字“static”限定静态存储变量,而不会在Cuda上强制执行相同的操作。据我所知,Cuda中的静态变量(例如设备)是:
intv=0.0f

对于那些知道更多的人,如果我错了,请纠正我。谢谢


Amine

这可能取决于您使用静态
的准确程度以及您的期望值。据我所知,CUDA声称自己是一个,从我所知道的情况来看,
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
$
$cat t80.cu
#包括
__设备无效测试(){
#ifdef使用_静态
静态int i=0;
#否则
int i=0;
#恩迪夫
printf(“i=%d\n”,i);
i++;}
__全局无效k(){
对于(int i=0;i<3;i++)test();
}
int main(){
k();
cudaDeviceSynchronize();
}
$nvcc-o t80 t80.cu
美元/t80
i=0
i=0
i=0
$nvcc-o t80 t80.cu-DUSE_静态
美元/t80
i=0
i=1
i=2
$
我不明白你怎么能支持这个说法:

Cuda中,例如设备上的静态变量为:int v=0.0f


基于上述测试案例。

为隐含的声明道歉,我完全误解了我正在阅读的解释的上下文。这与静态初始化有关,而不是静态变量。我的错误。谢谢