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

本文通过一个简单的Helloworld例程,介绍了CUDA编程的基本流程,包括创建主机程序、设备程序,以及使用nvcc编译器进行编译。文章详细展示了如何在GPU上运行线程,并解释了cudaDeviceReset函数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次目录

Hello world 例程

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

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

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

  2. 上面没有用到任何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抽象了硬件细节:线程组层次结构,内存层次结构,障碍同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值