检查CUDA编译器是否正确安装
which nvcc
检查机器上是否安装了GPU加速卡
ls -l /dev/nv*
CPU输出Hello Word
编写C语言,用CPU输出Hello Word
vim hello.cu
c代码
#include <stdio.h>
int main(void)
{
printf("Hello Word from cpu!\n");
}
编译
nvcc hello.cu -o hello
运行可执行文件hello效果
./hello
GPU 输出Hello Word
修改代码,用GPU输出
vim hello.cu
修改代码如下
#include <stdio.h>
__global__ void helloFromGPU(void)
{
printf("Hello World from GPU!\n");
}
int main(void)
{
printf("Hello Word from cpu!\n");
helloFromGPU <<<1, 10>>>();
cudaDeviceReset();
return 0;
}
代码解读
- 内核函数
helloFromGPU()
- 修饰符
__global__
告诉编译器这个函数将会从cpu调用,然后在GPU上执行 - 三重尖括号
<<< >>>
意味着从主线程到设备端代码的调用.
一个内核函数通过一组线程来执行,所有线程执行相同的代码.
三重尖括号里面的参数是执行配置,用来说明使用多少线程来执行内核函数,该代码有10个GPU线程被调用. cudaDeviceReset()
用来显示地释放和清空当前进程与当前设备有关的所有资源.
nvcc 使用 -arch sm_20
进行编译
-arch sm_20
使编译器为Fermi架构生成设备代码
nvcc -arch sm_20 hello.cu -o hello
运行可执行文件hello效果
./hello