tech Jun 26, 2026
本文只讨论 Mirage(OSDI 25'),不讨论 python/mirage/mpk 下的 MPK 子系统(这个更偏向于runtime scheduling)。请注意,这两个项目几乎没有联系,我并不清楚为什么要放在同一个repo下。(当然也有可能是我没看出来联系) 文章按真实执行顺序展开:先用 Python 构造 highlevel graph,再进入 Cython/C++ search 生成候选 muGraph,随后 verifier 判断语义等价,最后由 CUDA 或 Triton backend 尝试 lower、compile、profile,并选出最快的 runnable graph。 1. 从 GQA benchmark 进入 benchmark/groupqueryattention.py 是一个适合读 Mirage 主线的入口。它构造的 highlevel graph 很短: 这条 graph 对应的 attention 形态是: 默认 batchsize=1 时,Q 是 (2, 256,
Read note 0 comments 0 likes
tech Jun 24, 2026
C++侧给python写接口 mirage/python/mirage/kernel.py .pyx .pyx 的开发范式可以概括为:Python 负责易用接口,Cython 负责跨语言 binding,C++ 负责真正逻辑。在这类代码里,Python 用户看到的是 DTensor、CyKNGraph 这种高级对象;但这些对象内部实际保存的是 CppDTensor、CppKNGraph 之类的 C++ 指针。每个 .pyx 方法通常都遵循同一个模式:先检查 Python 参数类型,把 list/tuple/str/dtype 等 Python 对象转换成 C++ 能接受的 vector/char/enum/raw pointer,然后调用 C++ core 的方法,最后把 C++ 返回的指针重新包装成 Python 对象返回。因此 .pyx 层不是主要算法实现层,而是 marshalling + thin wrapper + API facade:它让 Python 能自然地调用底层 C++ 编译器/IR/search/transpiler,同时避免把核心系统逻辑写在 Python 里。
Read note 0 comments 0 likes
tech Apr 27, 2026
CS3210 Parallel Computing Note 第 1 部分:导论与并行计算基础 (Introduction to Parallel Computing) 1. 为什么我们需要并行计算? 在过去,程序员通常依赖硬件制造商提高单核 CPU 的时钟频率(例如从 800 MHz 升级到 1 GHz)来自动提升程序的运行速度。然而,由于功耗和散热的物理限制,单核时钟频率的增长已经停滞。 当今,对于天气预报、机器学习、流体模拟等复杂问题,即使单线程代码在算法上已经做到了极致优化,其运行速度仍然无法满足需求。因此,“让程序变快”的唯一途径就是并行计算:利用更多的物理处理单元(Cores)同时处理任务。 2. 并行化问题的核心步骤 将一个串行程序转化为并行程序,通常需要经过以下三个核心步骤(在后续章节中这也演变为了 Foster 的 PCAM 设计方法学): 1. 分解 (Decomposition / Partitioning):将庞大的应用问题拆分成更小、更离散的部分,称为任务 (Tasks)。 2. 调度 (Scheduling):决定这些任务应该以何种顺序运行,必须严格遵守任务
Read note 0 comments 0 likes
tech Apr 21, 2026
Flash Attention笔记 在 FlashAttention(以及几乎所有现代 GPU 算子)中,计算绝不是一个 token 一个 token 算的,而是用masked attention一个tile一个tile算 硬件瓶颈:GPU 的 Tensor Core(MMA 单元)非常“饥渴”。如果你只给它算一个 token 的注意力,它的计算密度太低,根本跑不满,大部分时间都在等内存传输 。 分块(Tiling):FlashAttention 的核心就是将 N 个 token 划分成若干个 Tile 。在 Blackwell 架构上,由于第 5 代 Tensor Core 的硬约束,这个 Tile 的大小通常被固定为 128×128 。 并行维度:GPU 会同时启动成百上千个线程块(CTA),每个 CTA 负责处理一个 128×128 的小矩阵块 Flash attention 3 1. 数学定义与性能目标 FlashAttention3
Read note 0 comments 0 likes
tech Apr 03, 2026
在 H100 上超越 cuBLAS:一份工作日志 CUDA 矩阵乘法内核 从零开始 作者:Pranjal Shankhdhar | 2024年11月29日 来源: 在这篇文章中,我们将在最新一代 NVIDIA 硬件 H100 上,迭代地实现一个 CUDA 矩阵乘法内核。 我们将深入理解 H100 的架构,并一步步展示这些优化。最终内核在 N=4096 时比 cuBLAS 快 7%。它可以装进一个 C++ 文件中,没有任何依赖。 这篇文章可以看作是 Simon 的经典博客的续篇,该博客展示了在 A6000 GPU 上的类似优化。然而 H100 GPU 是完全不同的怪兽,需要完全不同的算法。举个例子,Simon 博客中的算法在 H100 上只能达到 cuBLAS 性能的 4%。在这篇文章中,我们将从 Simon 的博客出发,迭代地达到 cuBLAS 的 107%。 我所有的代码都可以在
Read note 0 comments 0 likes
tech Apr 03, 2026
如何优化一个 CUDA Matmul Kernel 以达到类 cuBLAS 的 Performance:一份 Worklog 搬运自: 2022年12月 在这篇文章中,我将迭代地优化一个用 CUDA 编写的 matrix multiplication 实现。 我的目标不是构建一个 cuBLAS 的替代品,而是深入理解用于现代 deep learning 的 GPUs 最重要的 performance 特性。 这包括 coalescing global memory 访问、shared memory caching 和 occupancy 优化等。 你可以从 下载所有 kernels 的代码。也可以查看 ,我从那里复制了 benchmarking 设置。 这篇文章比我通常上传的内容少了一些润色,包含了更多的 sidenotes。我在编写 kernels 时将其用作 ideas 和草图的笔记本。这就是为什么我称之为
Read note 0 comments 0 likes
tech Feb 26, 2026
CS2105 Note Lecture 0 Welcome to CS2105 0.1 课程核心目标与哲学 CS2105 并不是一门教你如何插网线、配置Cisco router hardware,或者考取网络工程师认证(如 CCNA)的职业培训课。这门课的核心目的是教授计算机网络的核心原理与概念 (Principles and Concepts),并以当今最成功的网络系统——Internet (互联网) 作为主要案例进行深度剖析。 不会涉及的内容:底层硬件的具体配置(这属于 CS3103 实验课的内容);移动与无线网络(Mobile and wireless networks,如 3G/4G/5G/WiFi 物理层细节,这部分在高级课程 CS4222 中讨论)。 教授的期望:不要只盯着分数(Grades),而是要理解网络架构的演进。现有的网络架构是几十年前的工程师在当时的视野下设计的(可能存在短视),作为新一代的计算机科学家,你们的目标是发现现有架构的缺陷,并思考如何构建更好的下一代网络。 0.2 课程考核分配与政策细则 期末考试 (Final Exam):50%。允许携带 Cheat
Read note 0 comments 0 likes
tech Jan 24, 2026
Git Note git init: 将当前文件夹作为git根目录 git add:将某个文件加入到staged中 git restore staged:将某个文件从staged中去除,但是不改变原有文件 git reset:上一条指令可能因为没有还任何commit而失败,这时用git reset.但是git reset有很多种语义,务必当心使用 git rm:从磁盘删除文件,并将删除动作放入staging area。若你后悔了,不想在下次操作中包含删除,执行restore staged <file(但是并不能恢复磁盘文件) git restore:从staged area中删除,并且恢复文件 git commit m "" git仓库下的文件夹里如果还有git仓库,它不会递归进入,两者隔离 git log:查看commit history setup github repo git remote add <anynameyouwant (preferred origin) <repo git remote v: 查看是否添加成功 git remote rename origin up
Read note 0 comments 0 likes
tech Nov 24, 2025
CS3230 notes greedy algo analysis 1. To prove suboptimal structure: Assume the overall solution X is optimal Assume the substructure is not optimal using an optimal substructure can result in a better overall solution contradiction 例子:MIS on tree 最优子结构性质: 如果 S 是图 G 的最大独立集,且 v∈S 是一个通过贪心选择选中的叶子节点,u 是 v 的邻居。那么,S∖{v} 必定是子图
Read note 0 comments 0 likes
tech Nov 22, 2025
A comprehensive Note
Read note 0 comments 0 likes
tech Nov 19, 2025
answers and take-aways
Read note 0 comments 0 likes
tech Oct 23, 2025
trivial ideas or great ideas
Read note 0 comments 0 likes
tech Apr 09, 2025
多线程基础 我们经常听说四核八线程等,所谓线程如同前台一样,可以处理task。但是线程从哪里取register呢?register是由核心提供的,每个核心有自己的一组registers。 如果两个线程使用同一个核心,那么就需要registers上下文的切换,在现代优化中切换已经很快了,但是这样毕竟还是同时只能有一个线程在运行。这种设计并非不如单线程操作,因为我可以例如间断性地发送网络请求,或者进行磁盘读写操作,由于这些非常慢,单线程需要等待很久,这时我们切换到其他任务,这些与线程无关地操作就可以自己进行了。 如果使用不同核心,那么就是真正的并行计算了。 Java并行计算语法 基础 使用java.lang.Thread包 创建线程初始任务:new Thread(() {}); 执行任务:.start() 暂停任务:Thread.sleep()为使当前运行这一命令的线程暂停 协调dependency 我们会使用Java.util.concurrent.CompletableFuture,这是一个Monad,存储了是否complete的side information。 新建一个任务: Co
Read note 0 comments 0 likes
tech Apr 08, 2025
多元一维约束与多元多维约束的简单数学推导
Read note 0 comments 0 likes
tech Apr 07, 2025
KMP算法补充解释
Read note 0 comments 0 likes
tech Apr 07, 2025
Kruskal算法和Prim算法
Read note 0 comments 0 likes
tech Apr 07, 2025
cache提要
Read note 0 comments 0 likes
tech Apr 05, 2025
Imported Markdown post.
Read note 0 comments 0 likes
tech Apr 03, 2025
CS2030S笔记补充
Read note 0 comments 0 likes
tech Apr 01, 2025
什么是pipelining pipelining的概念很像统筹规划,例如一个零件有需要五个机器依次工作。我们并不需要等一个零件完全做完后再开始下一个零件加工,而是可以第一个零件进入第二步时第二个零件就开始加工,这样可以节省很多时间。 mips将一个instruction的运行拆分成了五个步骤: 每两个步骤中间我们会加入一个pipeline registers(多个register的集合,包含data和control signals) 其作用是: 阶段隔离与时序稳定 流水线寄存器隔离了各个流水线阶段,使得每个阶段的数据和控制信号在时钟边沿被“锁定”,从而在整个时钟周期内保持稳定。这种稳定性确保了数据不会因信号传递延时或噪声而受到干扰。 辅助冒险检测和解决 通过将数据和控制信息保存到各个阶段的流水线寄存器中,冒险检测逻辑可以准确地分析和比较相邻阶段之间的信号,从而识别数据冒险、结构冒险或控制冒险。没有这些隔离寄存器,相关信号可能混合或不稳定,使得冒险检测变得更加复杂或不准确。 降低设计复杂性 使用流水线寄存器将每个阶段的操作独立开来,可以简化时序分析和设计验证工作,同时为系统提供更强的抗干
Read note 0 comments 0 likes
tech Mar 20, 2025
sequential circuits难点理解
Read note 0 comments 0 likes
tech Mar 20, 2025
补充一点《算法竞赛进阶指南》中缺失的部分
Read note 0 comments 0 likes
tech Mar 14, 2025
1. After git clone, and add the path to /.bashrc, there will be an error usr/bin/env bash/r
Read note 0 comments 0 likes
tech Mar 08, 2025
linux和各种语言的包管理器
Read note 0 comments 0 likes
tech Mar 04, 2025
AVL tree, scapegoat tree, B-tree
Read note 0 comments 0 likes
tech Mar 04, 2025
Karnaugh 图与 Quine–McCluskey 算法详解
Read note 0 comments 0 likes
tech Feb 18, 2025
博客搭建步骤及心路历程
Read note 0 comments 0 likes
tech Feb 16, 2025
this is a testing page.
Read note 0 comments 0 likes