首页 > 编程语言 >GPU通用计算编程模型

GPU通用计算编程模型

时间:2023-10-07 11:44:39浏览次数:43  
标签:模型 编程 AMD warp 线程 PTX GPU 共享内存

这是我阅读General-Purpose Graphics Processor Architecture的一篇笔记,本文对应书中第二章的内容。

执行模型

现代GPU普遍采用SIMD来实现数据级(data-level)并行,程序员通过诸如CUDA等API以在GPU上启动一系列的线程(thread)执行工作。其中,每个线程可以有独立的执行路径(execution path),并且可以访问不同区域的内存。从硬件的角度看,GPU会将线程分成若干组,每个组被称为一个warp(在AMD的术语中称为wavefront)以利用线程的规律性和空间局部性。这种执行模型被称为SIMT(single-instruction, multi-threads)。

GPU计算程序都从CPU开始。对于独立显卡而言,CPU需要首先为计算任务在GPU上申请显存,然后将数据传输到GPU,最后在GPU上加载计算任务。对于集成显卡而言,则可以直接在GPU上加载计算任务,而无需传输数据(集成显卡使用内存作为显存)。

CUDA的编程模型与compute shader很像。如上所述,GPU中若干线程组成一个warp,每个warp中的所有线程会尽量同时执行相同的指令以提高性能。多个warp组合在一起又组成线程块(thread block),这种组合方式很像划分网格。假设一个线程是第i个线程块的第j个warp的第k个线程,那么使用(i, j, k)可以唯一地标记这个线程。而又如果每个线程块包含warpNum个warp,每个warp包含threadNum个线程,那么用i * warpNum + j * threadNum + k就可以作为每个线程唯一的ID。

不过在实际的编程中,warp对程序员是不可见的。取而代之的是,j * threadNum + k这个整体作为线程的局部ID。在CUDA中,它对应内置变量threadIdx,而线程块的ID对应blockIdx,每个线程块包含的线程数量对应blockDim。而在HLSL的compute shader中,线程块的ID对应于SV_GroupID,而线程的局部ID对应于SV_GroupThreadID

同一线程块中的线程能够共享一块高速内存,这块内存在NVIDIA的术语中称为共享内存(shared memory)。GPU的每个流处理器(streaming multi-processor, SM)都包含一块独立的共享内存。在同一个流处理器内,这块共享内存根据线程块的数量又划分成多块。在AMD的术语中,共享内存被称为本地数据存储(local data storage, LDS),每个流处理器包含16-64KB的共享内存。共享内存的访问是很快的,合理利用共享内存做缓存能够有效提高运算速度。除了共享内存,AMD的GPU还存在一个全局数据存储(global data store, GDS)。在图形管线中,GDS用于在不同的shader之间传递运算结果。

GPU指令集架构

和CPU一样,GPU并不能直接执行高级语言,比如HLSL、GLSL或者CUDA,而只能执行二进制代码。不过与amd64和x86不太一样的是,GPU的指令集往往并不通用,而且很可能不向前兼容。诸如DirectX、Vulkan等API通常只能将shader交给驱动程序编译成GPU可执行的程序。

NVIDIA的ISA

NVIDIA提供了一组比较高级的ISA,叫做Parallel Thread Execution ISA(PTX)。PTX非常类似于汇编语言,但仍然不能在GPU上直接执行,它更像是DXIL、LLVM IR这种中间语言,也因此PTX不被局限在NVIDIA的某一个架构上。PTX仍然需要经过驱动程序转译或者CUDA SDK提供的ptxas来编译成GPU可执行的ISA,NVIDIA称之为SASS。不同GPU的SASS可能会有所差别甚至完全不同。

PTX与SASS都很像RISC ISA,它们的不同主要体现在两点上:

  1. PTX可以使用无限多的寄存器,但SASS只能使用有限的寄存器;
  2. SASS中可以使用非访存指令访问参数,但PTX的参数必须放在独立的参数地址空间。

AMD的ISA

AMD的GCN架构和NVIDIA的架构最主要的区别之一是AMD的标量与向量指令是分开的。在AMD的GCN架构中,每个计算单元包含1个标量单元和4个向量单元,向量单元的计算结果只对本线程可见,但标量单元的计算结果被一个warp内的所有线程共享。

标签:模型,编程,AMD,warp,线程,PTX,GPU,共享内存
From: https://www.cnblogs.com/icysky/p/17745914.html

相关文章

  • 详解PLC常用的编程语言
    大家都知道学习某种新知识,技巧跟方法是关键的。正如新手刚开始接触PLC,它的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,它既要满足易于编写又要满足易于调试的要求。早期的PLC仅支持梯形图编程语言和指令表编程语言,现根据国际电工委......
  • 三维模型3DTile格式轻量化的数据压缩与性能平衡关系分析
    三维模型3DTile格式轻量化的数据压缩与性能平衡关系分析 对于三维模型的3DTile格式轻量化处理,数据压缩和性能之间的平衡关系是一个重要的考虑因素。以下是这两者关系的详细分析:1、数据压缩与加载速度:显然,更高级别的压缩可以创造更小的文件大小,从而加快从服务器到客户端的传输......
  • 从GPU的内存访问视角对比NHWC和NCHW
    NHWC和NCHW是卷积神经网络(cnn)中广泛使用的数据格式。它们决定了多维数据,如图像、点云或特征图如何存储在内存中。NHWC(样本数,高度,宽度,通道):这种格式存储数据通道在最后,是TensorFlow的默认格式。NCHW(样本数,通道,高度,宽度):通道位于高度和宽度尺寸之前,经常与PyTorch一起使用。......
  • 基于AI模型的验证码安全识别(B站,知乎等)
     bilibili汉字识别顺序验证码实现基本思路:  先利用Selenium模拟登录,当然在这之前做好请求伪装,get方法使边框最大化,并且将系统的windows窗口缩放比例设置为100%,不推荐125%,否则可能导致xpath定位不准,使用send_key()方法导入账号密码,隐式等待验证码出现,这里B站可以获取验证......
  • LLM实践-在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理
    一、配置环境1、打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4GPU.2、pip安装依赖python包!pipinstall--upgradeaccelerate!pipinstallbitsandbytestransformers_stream_generator!pipinstalltransformers!pipinstallsentencepiece!pip......
  • 多线程编程
    多线程编程与资源同步1.基础  进程:一个进程代表计算机中实际运行的一个程序,在现代计算机操作系统的保护模式下,每个进程都具有自己独立的进程地址空间和上下文堆栈;进程并不负责执行进程代码,只是为程序提供一个大环境容器,进程中的实际执行体是线程(Thread),因此在一个进程中至......
  • 十四天学会C++之第四天(面向对象编程基础)
    类和对象是什么?在C++中,类是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。对象是类的实例,它是根据类的定义创建的,可以用来表示现实世界中的各种事物。对象具有类定义的属性和行为。面向对象编程思想面向对象编......
  • Python异步编程并发比较之循环、进程、线程、协程
    服务端现在有一个api接口http://127.0.0.1:18081/hello批量请求该接口,该接口中有一个5s的阻塞。使用循环,多进程,多线程,协程等四种方式,一共请求10次,比较总的请求耗时。importtimefromflaskimportFlaskapp=Flask(__name__)@app.route('/hello')defhello_world():......
  • 为研究不同宽度,厚度,重量,车间温度,冷却方式下,物料温度随时间呈指数衰减的模型函数,
    为研究不同宽度,厚度,重量,车间温度,冷却方式下,物料温度随时间呈指数衰减的模型函数,请使用python按照下面的表格形式,生成模拟数据,数据预处理,选择模型,划分数据集,训练模型,调整超参数,预测和评估,并绘图谢谢您的反馈。我可以尝试改进模拟生成的df数据,以让它更加真实。......
  • 不同宽度,厚度,重量,车间温度,冷却方式下,物料温度随时间衰减,请使用python机器学习,
    生成模拟数据、数据预处理、选择模型、划分数据集、训练模型、调整超参数、预测和评估以及绘图是一个相对复杂的流程。下面是一个示例流程,涵盖了这些步骤:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_......