国产芯片编程
文章平均质量分 91
本专栏重点关注国产芯片编程技术,致力于推动国产芯片走进校园,包括寒武纪(MLU),华为昇腾(Ascend)。国产芯片编程和英伟达CUDA编程差异较大,本专栏重点描述在寒武纪芯片编写神经网络算子的高性能计算代码。
Galerkin码农选手
这个作者很懒,什么都没留下…
展开
-
大模型推理常见采样策略:Top-k, Top-p, Temperature以及rotary embedding的寒武纪编程
这个random sample本质上是一种采样策略,可以参考链接https://blog.csdn.net/qq_43243579/article/details/136331123给定input = {source, topp, topk, temperature},输出output = {index}source是一个一维的长度为voc的向量,数据类型为float或者halftopp是一个位于(0,1)之间的float类型的常数topk是一个正整数。原创 2024-08-22 17:08:36 · 116 阅读 · 0 评论 -
寒武纪实现高维向量的softmax进阶优化和库函数对比
关于寒武纪编程可以参考本人之前的文章实验证明,axis=0和axis=-1的时候,手写softmax速度可以和库函数媲美,甚至于更甚一筹。原创 2024-07-01 16:05:39 · 111 阅读 · 0 评论 -
寒武纪显卡实现rmsNorm算子
rmsNorm算子的数学定义下面这个是针对一维向量的rmsNorm算子,对于高维向量,比如说形状为[A,B,C,D]的4维向量x,此时权重向量w长度默认为D,也就是说变换主要是针对axis=-1这个维度进行操作。关于寒武纪显卡的编程可以参考本人之前编写的文章添加链接描述和添加链接描述rmsNorm算子的实现思路由于寒武纪编程比较特殊,这里我们稍微复习一下寒武纪编程的特点:一张寒武纪显卡往往可以有8个或者4个cluster,其中一个cluster包含4个core,也就是说,对于4个cluster的显卡原创 2024-06-05 15:46:10 · 240 阅读 · 0 评论 -
寒武纪显卡实现高维向量的softmax并行优化
关于寒武纪编程可以参考本人之前的文章添加链接描述,添加链接描述,添加链接描述高维向量的softmax实现更加复杂,回忆之前在英伟达平台上实现高维向量的softmax函数,比如说我们以形状为[1,2,3,4,5,6]的6维向量举例,变换维度假设axis=2,之前英伟达平台的实现,我们计算出变换维度的长度dimsize=3,其他维度的乘积othersize=1×2×4×5×6 = 240,步长stride= 1×6×5×4 = 120,使用othersize=240个线程块,其中每个线程块处理对应一份数据,计算原创 2024-02-06 15:35:24 · 235 阅读 · 0 评论 -
寒武纪显卡实现softmax的pingpong流水并行
在上一篇文章中我们介绍了寒武纪显卡实现基本的softmax代码,这里我们借助于寒武纪的流水并行来编写进一步的策略。原创 2024-01-17 17:35:08 · 271 阅读 · 0 评论 -
寒武纪显卡实现softmax算子
寒武纪实现softmax包括下面5个步骤,我们也采取5个kernel来实现softmax:unionMaxKernel(float* middle, float* source1, int num),这个kernel使用的任务类型是union1,其中middle的长度为taskDim,达到的目的是middle对应元素存储的是不同taskId处理的那部分数据的局部max。原创 2024-01-10 17:49:23 · 587 阅读 · 0 评论 -
寒武纪bang的基础向量除法和规约编程
Queue是用来管理并行操作的一种方式。在同一个Queue中所下发的操作顺序是依次按照下发顺序执行的,在不同Queue中的执行操作则是乱序的。Queue所支持的操作不仅包括Kernel(在设备上的执行程序),还包括Notifier、内存拷贝、设备与主机的数据传输等一系列操作,所有需要按序执行的操作都可以下发至同一个Queue,Queue在当前操作满足执行条件后会依次按照进入顺序执行操作;而不同Queue的操作则不保证顺序,这些操作的顺序是无法预测的。原创 2024-01-10 16:54:01 · 616 阅读 · 0 评论