Cuda C权威指南学习笔记(一)

本次目录

  • Hello world 例程

Hello world 例程

  1. 编译第一个hello文件, 首先创建hello.cu

    #include
    using namespace std;
    int main(){
      cout<<"Hello world"<<endl;
    }

    执行nvcc hello.cu -o hello, ./hello得到nvcc编译得到的可执行文件并运行

  2. 上面没有用到任何GPU特性,只是个主机程序,下面编写我们第一个设备程序,修改上面的代码得到新的代码

    #include
    #include
    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抽象了硬件细节:线程组层次结构,内存层次结构,障碍同步。

你可能感兴趣的:(并行计算)