本系列代码托管于:https://github.com/chintsan-code/cuda_by_example
本篇使用的项目为:hello_world、simple_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语言的语法一致,下一篇将进行介绍。
参考:
- 《GPU高性能编程 CUDA实战》
评论 (0)