cuda 11 内核无法运行
Posted
技术标签:
【中文标题】cuda 11 内核无法运行【英文标题】:cuda 11 kernel doesn't run 【发布时间】:2022-01-14 05:00:51 【问题描述】:这是一个demo.cu
,旨在从 GPU 设备打印 f:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void hello_cuda()
printf("hello from GPU\n");
int main()
printf("hello from CPU\n");
hello_cuda <<<1, 1>>> ();
cudaDeviceSynchronize();
cudaDeviceReset();
printf("bye bye from CPU\n");
return 0;
它编译并运行:
$ nvcc demo.cu
$ ./a.out
这是我得到的输出:
hello from CPU
bye bye from CPU
问:为什么 GPU 没有打印结果?
这似乎是因为我错误地配置了 cuda 工具包或其他东西,但是我能够从 cuda-samples 编译和运行各种程序。例如,matrixMul,或deviceQuery
【问题讨论】:
任何时候您在使用 CUDA 代码时遇到问题,最好包含 proper CUDA error checking。我的猜测是您使用的是 CUDA 11,因此编译的架构与您的 GPU 不匹配。您使用的是什么 CUDA 版本?你想在什么 GPU 上运行? (您显示的代码没有任何问题,CUDA 示例的编译方式与您在此处的编译方式不同。) cuda 11,GPU:特斯拉 K80。谢谢,我会检查 CUDA 错误检查。我了解我的问题并未针对特定问题。除非我找出根本原因,否则我会暂时保留我的问题 将以下开关添加到您的编译命令行:-arch=sm_37
像这样:nvcc -arch=sm_37 demo.cu
神奇!它与包含的标志一起使用。 @robert,介意给出官方答案吗?并且可能在您的答案中详细说明
虽然有效,但有一个警告。 nvcc 警告:“compute_35”、“compute_37”、“compute_50”、“sm_35”、“sm_37”和“sm_50”架构已弃用,可能会在未来版本中删除
【参考方案1】:
如果您的设备具有 3.0 或更低的计算能力,CUDA 11 将不再支持这些 GPU。您需要使用a prior CUDA version。
CUDA 编译器必须针对 GPU 目标(即设备架构)进行编译。如果你不在编译命令行上specify a target architecture,从历史上看,CUDA 选择了一个非常灵活的默认架构规范,可以在 CUDA 版本支持的所有 GPU 上运行。
That isn't always the case,然而,CUDA 11 并非如此。CUDA 11 编译为默认架构 sm_52
(计算能力 5.2,即好像您在命令行上指定了 -arch=sm_52
)。但 CUDA 11 支持的架构低至 sm_35
(计算能力 3.5)。
因此,如果您没有在 CUDA 11 的编译命令行上指定目标架构,并尝试在架构早于 sm_52
的 GPU 上运行,那么您编写的任何 CUDA 代码(内核)肯定会赢不行。
这是一种很好的做法,任何时候您在使用 CUDA 代码时遇到问题,都可以使用 proper CUDA error checking,如果您在此处这样做,您会立即收到运行时错误指示发现了问题(至少对于熟悉 CUDA 错误的人来说)。
在这些情况下,解决方案是指定一个编译命令,其中包含您打算在其上运行的 GPU(这通常是一种很好的做法)。如果您这样做,并且您指定的架构“已弃用”,那么nvcc
编译器将发出警告,让您知道未来的 CUDA 版本可能不支持您尝试运行的 GPU。该警告并不意味着您所做的任何事情都是错误或非法的或需要更改,而是意味着将来的 CUDA 版本可能不支持该 GPU。
如果您想取消该警告,您可以在编译命令行中传递-Wno-deprecated-gpu-targets
开关。
当然,同样的问题也可能出现在 Windows 上。在这种情况下,您需要修改以下 VS 项目设置以匹配您设备的架构:
【讨论】:
以上是关于cuda 11 内核无法运行的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow-gpu 问题(CUDA 运行时错误:设备内核映像无效)
在 Ubuntu 20.4 LTS 上使用 GPU (CUDA-11.0) 运行代码时的 TensorFlow 问题
win10安装cuda过程中出现提示“安装无法继续,有其它安装程序正在运行”