gpt4 book ai didi

c++ - Cuda 全局 __device__ 变量自动初始化

转载 作者:行者123 更新时间:2023-11-28 02:59:11 24 4
gpt4 key购买 nike

我正在使用 __device__ 说明符在设备上声明一个全局变量 myvar。我没有在任何地方将它设置为有意义的值(没有像您通常那样在我的内核启动方法中使用 cudaMemcpyToSymbol)。

我希望 myvar 的值是随机垃圾,但每次都是 0.0。 CUDA 是否自动初始化设备变量?

我也使用 CUDA 调试器检查过它,该值实际上是 0。

__device__ float myvar;

__global__ void kernel(){
printf("my var: %f", myvar);
}

int kernel_launch(){
kernel<<<1,5>>>();
cudaDeviceSynchronize();
return 0;
}

最佳答案

CUDA 不会自动初始化任何变量。 myvar 在您的测试应用程序中变为零只是基于 CUDA 实现的巧合。

在 IEEE-754 浮点(由 NVIDIA GPU 使用)中,全零模式对应于 0.0,因此它比 1.0f 更可能是“随机”值。

不要根据单个单词中的值来推断所有 GPU 内存的值...

我做了一个小实验,但对结果感到有些惊讶。我使用 __device__ float myvar(1.1f); 初始化了 myvar 并更改了 printf() 以便它打印值和地址变量。然后我运行它,得到 1.1f 输出并记下地址。然后我删除了初始化并再次运行它。这一次,值回到 0.0f 而地址保持不变,表明作为常规 CUDA 操作的一部分,这个变量所在的内存块确实被清零了。例如,如果将 CUDA 程序复制到固定大小块内的 GPU,其中其他数据为零,并且将 myvar 分配给该 block 内的地址,则可能会发生这种情况。

关于c++ - Cuda 全局 __device__ 变量自动初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21289058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com