shared_memory CUDA共享内存概述 GPU内存按照类型(物理上的位置)可以分为 板载内存 片上内存 全局内存是较大的板载内存,延迟高,共享内存是片上的较小的内存,延迟低,带宽高。前面我我们讲过工厂的例子,全局内存就是原料工厂,要用车来运输原料,共享内存是工厂内存临时存放原料的房间,取原料路程短速度快。 共享内存是一种可编程的缓存,共享内存通常的用途有: 块内线程通信的通道 用于全局内存数据的可编程管理的 2024-10-17
loop_unroll 循环展开(Loop Unrolling) 循环展开的概念 GPU 编程偏向于使用确定的代码,GPU没有分支预测能力,所有每一个分支都是要执行的,所以在内核里尽量别写分支,分支包括什么?包括 if 还有 for 之类的循环语句,例如: 123for (itn i=0;i<tid;i++) { // to do something} 如果上面这段代码出现在内 2024-10-15
reduction 归约问题 并行归约问题 在串行编程中,、最常见的一个问题就是一组特别多数字通过计算变成一个数字,比如加法,也就是求这一组数据的和,这种计算当具有交换律和结合律的时候,我们可以用并行归约的方法处理他们 为什么叫归约,归约是一种常见的计算方式(串并行都可以),归约的归有递归的意思,约就是减少,这样就很明显了,每次迭代计算方式都是相同的(归),从一组多个数据最后得到一个数(约) 归约的方式基 2024-10-15
excute_model CUDA编程的组件与逻辑 下图从逻辑角度和硬件角度描述了CUDA编程模型对应的组件。 SM 中共享内存,和寄存器是关键的资源,线程块中线程通过共享内存和寄存器相互通信协调。寄存器和共享内存的分配可以严重影响性能! 因为SM有限,虽然我们的编程模型层面看所有线程都是并行执行的,但是在微观上看,所有线程块也是分批次的在物理层面的机器上执行,线程块里不同的线程可能进度都不一样,但是同一个 2024-10-14
thread_parallel 并行组织线程 使用块和线程建立矩阵索引 为了简便起见,我们先只从二维线程块进行介绍而不是使用三维 线程模型前面文章中已经有个大概的介绍,但是下图可以非常形象的反应线程模型,不过注意硬件实际的执行和存储不是按照图中的模型来的: 这里 (ix,iy)(ix,iy)(ix,iy) 就是整个线程模型中任意一个线程的索引,或者叫做全局地址,局部地址就是 (threadIdx.x,thr 2024-10-14
Pytorch_cuda拓展(1) Pytorch_cuda拓展(1) 什么情况下需要扩展 原生 Pytorch 和 Python 提供的 API 操作无法进行非平行计算,例如:For each batch, do an operation that depends on the data length (s.g. volume rendering) 可化简的大量的串列计算,例如:x=f1(x),x=f2(x),…,f=fn( 2024-10-13
triton-MM triton Matrix Multiplication triton入门:Matrix Multiplication 直接从 Triton 的官方教程入手。对 MM 做优化, 不论用的是 Triton, 还是 CUDA 目标都是一样的,一句话概括:计算一般是没办法省的, 主要是优化内存的使用, 尽可能的用高速但是比较小的 shared memory 驱动程序(Driver Progr 2024-10-11
GPU GPU 工作原理 本节首先讲解 CPU 和 GPU 架构的区别,之后以 AX+YAX+YAX+Y 这个例子来探究 GPU 是如何做并行计算的,为了更好地了解 GPU 并行计算,对并发和并行这两个概念进行了区分。此外会讲解 GPU 的缓存机制,因为这将涉及到 GPU 的缓存(Cache)和线程(Thread)。 CPU vs GPU 先探讨一下 CPU 和 GPU 在架构方面的主要区别 2024-10-10
torch_compile torch.compile解析 torch.compile是PyTorch 2.2版本中的一个重要新特性。它是一种新的 PyTorch 编译器,它可以将 Python 和 TorchScript 模型编译成 TorchDynamo 图,从而提高模型的运行效率。是加速 PyTorch 代码速度的最新方法! torch.compile 通过将 PyTorch 代码 JIT(just in tim 2024-10-06
alchemy tricks alchemy tricks 本文用于记录炼丹过程中的各种心得经验,长期更新 computer vision Transformer 架构主要关注全局的,低频信号信息(就是一个近视眼);CNN 架构主要关注局部的,高频信号,对细节信息敏感但是缺乏全局的语义信息。如果想把两种架构的优点都用上,可以考虑以下几种技巧: 在生成多尺度特征图时,用 transformer 架构生成低分率的,具有 2024-10-03