本系列代码托管于:https://github.com/chintsan-code/cuda_by_example
本篇使用的项目为:hello_worldsimple_kernel

一. Hello World!

//hello_world

#include "stdio.h"

int main() {
    printf("hello world!\n");
}

这个就是最简单的CUDA C程序,其实CUDA C就是在标准C语言的基础上增加了一小部分关键字,因此和C非常相似。CUDA C是第一款专门由GPU公司设计的编程语言,用于在GPU上编写通用计算。从CUDA3.0开始支持C++和FORTRAN。

二. 核函数调用

在Hello World程序上加上一些代码:

//simple_kernel

#include <stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

__global__ void kernel() {
}

int main() {
    kernel <<<1, 1 >>> ();
    printf("hello world!\n");

return 0;
}

和”Hello World”相比,有两个值得注意的地方:

  • 一个空的函数kernel(),并且它带有修饰符__global__
  • 对这个函数的调用,并且带有修饰符<<<1, 1>>>

__global__修饰符代表告诉编译器,这个函数应该在编译完成之后运行在设备之上(即GPU),而不是主机(CPU)上。在这段代码中,kernel函数使用nvcc编译,main函数使用msvc编译。
尖括号<<<>>>表示要将一些参数传递给Runtime。这些参数并不是传递给设备代码的(可以看到kernel函数并没有对应的形参),而是告诉Runtime如何启动设备代码的。相对应的,传递给设备代码的参数是写在圆括号()中的,和标准C语言的语法一致,下一篇将进行介绍。


参考:

  1. 《GPU高性能编程 CUDA实战》