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
swin_backbone Swin Transformer Swin Transformer 是一种用于 CV 的通用的 backbone。与传统的卷积神经网络(CNN)不同,Swin Transformer 综合了 CNN 和 VIT 的优点,在局部区域进行 self-attention 计算,捕捉长距离依赖关系也注重于局部信息。 Swin Transformer 的名称来源于其核心组件——滑动窗口(Slidi 2024-09-30