江大白 | AI算法工程化落地,CUDA开发心得汇总

本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。

原文链接:AI算法工程化落地,CUDA开发心得汇总

以下文章来源于微信公众号:周彬

作者:周彬

链接:https://zhuanlan.zhihu.com/p/570795544

本文仅用于学术分享,如有侵权,请联系后台作删文处理

导读

CUDA编程在AI工程化过程中,是非常重要的一部分。本文详细汇总了作者对于CUDA开发过程中的一些心得和经验,希望对大家有帮助。

1 基本编程模型

CUDA开发中最基本的概念就是显存、kernel函数、线程块、stream:

  1. 开发者可以通过CUDA Runtime API,申请、释放显存,并在内存和显存间进行数据拷贝。

  2. 开发者可以编写专用于在GPU上执行的kernel函数,在主机侧通过CUDA C扩展调用kernel函数,调用将创建数以万计的GPU线程,每个GPU线程均会完整执行一次kernel函数,kernel函数内可以对显存进行读、写等各种操作。数以万计的GPU线程之间靠只读的内置变量(线程ID等)互相区分。

  3. 一次kernel调用对应的GPU线程,需划分为一个个尺寸相同的线程块。线程块是向GPU进行调度的最小单位,GPU同时支持多个线程块的执行,达到上限后,只有旧的线程块内的线程全部执行完成后,新的线程块才会被调度入GPU。

  4. stream相当于是GPU上的任务队列。每个kernel调用或大多数CUDA API都可以指定关联到某一个stream。同一个stream的任务是严格保证顺序的,上一个命令执行完成才会执行下一个命令。不同stream的命令不保证任何执行顺序。部分优化技巧需要用到多个stream才能实现。如在执行kernel的同时进行数据拷贝,需要一个stream执行kernel,另一个stream进行数据拷贝。

2 基本硬件架构及其在Kernel执行中的作用

显卡由内部的主板、显存颗粒、GPU芯片等组成。GPU内部的架构如下图:

GPU架构图

可以看到GPU由许许多多的SM(Stream Multiprocesser)组成。SM内部的架构如下图:

SM架构图

线程块就是被调度到SM上执行的,按照线程块占用的硬件资源不同,SM可以同时执行一个或多个线程块。

SM内部的主要部件有:

  1. L1 Cache及Shared Memory。

  2. L1 Cache是高速缓存。

  3. Shared Memory是一块可以由开发者编程控制的高速缓存。开发者可以在kernel函数内通过编程手段写入或读取数据。其访问latency远远小于全局显存。

  4. SM分为4个子区域,称为SMSP。每个SMSP包括如下功能单元。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值