【发布时间】: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”架构已弃用,可能会在未来版本中删除