gpt4 book ai didi

cuda 11内核不运行

转载 作者:行者123 更新时间:2023-12-05 08:49:36 25 4
gpt4 key购买 nike

这里是一个 demo.cu 旨在从 GPU 设备打印:

#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 示例编译和运行各种程序。例如,matrixMul , 或 deviceQuery

最佳答案

如果您的设备具有 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(和 CUDA 12.0)针对 sm_52 的默认架构进行编译(计算能力 5.2,即就像您指定了 -arch= sm_52 在命令行上)。但 CUDA 11 支持低至 sm_35(计算能力 3.5)的架构。 (CUDA 12 已放弃对 sm_3x GPU 的支持。)

因此,如果您没有在 CUDA 11 的编译命令行上指定目标架构,并尝试在架构早于 sm_52 的 GPU 上运行,任何 CUDA 代码(内核)你写的肯定不行。

这是个好习惯,任何时候当您在使用 CUDA 代码时遇到问题,都可以使用 proper CUDA error checking ,如果您在此处执行此操作,您会得到一个运行时错误指示,该指示会立即识别出问题(至少对于熟悉 CUDA 错误的人来说是这样)。

在这些情况下,解决方案是指定一个编译命令,其中包括您打算运行的 GPU(无论如何,这通常是一种很好的做法)。如果您这样做,并且您指定的体系结构“已弃用”,则 nvcc 编译器将发出警告,让您知道 future 的 CUDA 版本可能不支持您尝试运行的 GPU。该警告并不意味着您所做的任何事情都是错误的、非法的或需要更改的,而是意味着在未来, future 的 CUDA 版本可能不支持该 GPU。

如果您想抑制该警告,可以在编译命令行上传递 -Wno-deprecated-gpu-targets 开关。

当然,同样的问题也可能发生在windows上。在这种情况下,您需要修改以下 VS 项目设置以匹配您设备的体系结构:

enter image description here

关于cuda 11内核不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63675040/

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