本次目录
Hello world 例程
-
编译第一个hello文件, 首先创建
hello.cu
#include<iostream> using namespace std; int main(){ cout<<"Hello world"<<endl; }
执行
nvcc hello.cu -o hello
,./hello
得到nvcc编译得到的可执行文件并运行 -
上面没有用到任何GPU特性,只是个主机程序,下面编写我们第一个设备程序,修改上面的代码得到新的代码
#include<iostream> #include<stdio.h> using namespace std; __global__ void helloFromGPU(void){ printf("Hellow World from GPU\n"); } int main(){ cout<<"Hello World from CPU"<<endl; helloFromGPU<<<1,1>>>(); }
执行同样的编译步骤,得到结果在这里插入代码片
Hello World from CPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU Hellow World from GPU
可以看到 cpu运行了1次,gpu运行了10次·,这是因为有十个线程运行,特别注意cudaDeviceReset这个函数,没有这个函数printf是没法输出的。
Cuda的编程结构:
1. 分配GPU内存
2. 从CPU内存中拷贝数据到GPU内存。
3. 调用CUDA内核函数完成运算
4. 将数据烤回到CPU内存
— 《CUDA C权威指南》Cuda抽象了硬件细节:线程组层次结构,内存层次结构,障碍同步。