让我们推出一个单独的 CUDA 线程来打招呼
这个简单的 CUDA 程序演示了如何编写将在 GPU(又称设备)上执行的函数。CPU 或主机通过调用称为内核的特殊函数来创建 CUDA 线程。CUDA 程序是具有附加语法的 C++程序。
要查看它是如何工作的,请将以下代码放在名为 hello.cu
的文件中:
#include <stdio.h>
// __global__ functions, or "kernels", execute on the device
__global__ void hello_kernel(void)
{
printf("Hello, world from the device!\n");
}
int main(void)
{
// greet from the host
printf("Hello, world from the host!\n");
// launch a kernel with a single thread to greet from the device
hello_kernel<<<1,1>>>();
// wait for the device to finish so that we see the message
cudaDeviceSynchronize();
return 0;
}
(请注意,为了在设备上使用 printf
功能,你需要一台计算能力至少为 2.0 的设备。有关详细信息,请参阅版本概述 。)
现在让我们使用 NVIDIA 编译器编译程序并运行它:
$ nvcc hello.cu -o hello
$ ./hello
Hello, world from the host!
Hello, world from the device!
有关上述示例的一些其他信息:
nvcc
代表“NVIDIA CUDA 编译器”。它将源代码分为主机和设备组件。__global__
是函数声明中使用的 CUDA 关键字,表示该函数在 GPU 设备上运行并从主机调用。- 三角括号(
<<<
,>>>
)标记从主机代码到设备代码(也称为内核启动)的调用。这三个括号中的数字表示并行执行的次数和线程数。