<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Triton on KKKZOZ&#39;s Blog</title>
    <link>http://blog.kkkzoz.top/tags/triton/</link>
    <description>Recent content in Triton on KKKZOZ&#39;s Blog</description>
    <image>
      <title>KKKZOZ&#39;s Blog</title>
      <url>http://blog.kkkzoz.top/images/papermod-cover.png</url>
      <link>http://blog.kkkzoz.top/images/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.147.0</generator>
    <language>en</language>
    <lastBuildDate>Tue, 11 Aug 2026 20:26:05 +0800</lastBuildDate>
    <atom:link href="http://blog.kkkzoz.top/tags/triton/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Triton: Notes and Paradigms</title>
      <link>http://blog.kkkzoz.top/posts/learning/triton/0-notes-and-paradigm/</link>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/learning/triton/0-notes-and-paradigm/</guid>
      <description>&lt;h2 id=&#34;kernel-paradigm&#34;&gt;Kernel Paradigm&lt;/h2&gt;
&lt;p&gt;triton 的 kernel 有两种写法:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;传统 kernel&lt;/li&gt;
&lt;li&gt;Persistent Kernel&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;传统-kernel&#34;&gt;传统 Kernel&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-ascii&#34; data-lang=&#34;ascii&#34;&gt;grid = (num_tiles,)
每个 block 处理一个 tile → 结束
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;每个 SM 从 grid 里领一个 work item，做完就退出, CTA 调度由硬件自动完成&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;persistent-kernel&#34;&gt;Persistent Kernel&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@triton.jit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n_tiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;constexpr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;program_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;n_progs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_programs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# grid(0) 启动的 program 数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n_tiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 处理 tile 对应的那一块工作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;tile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n_progs&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# 跳到下一个属于自己的 tile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;每个 CTA 长期驻留在 SM 上，自己软件调度 work&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;persistent kernel 常见动机：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;任务总 tile 数不够多（比如小 batch、小矩阵、很多小 GEMM / MoE / grouped GEMM）:普通写法 programs 数 &amp;lt; SM，GPU 吃不满；persistent 让每个 SM 都有活干，并通过循环把剩余工作吃完。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Triton: Built-in Tutorial</title>
      <link>http://blog.kkkzoz.top/posts/learning/triton/1-builtin-tutorial/</link>
      <pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate>
      <guid>http://blog.kkkzoz.top/posts/learning/triton/1-builtin-tutorial/</guid>
      <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;h3 id=&#34;gpu-memory-model&#34;&gt;GPU Memory Model&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SRAM (Static RAM)
&lt;ul&gt;
&lt;li&gt;Located inside the GPU core, it utilizes Registers, L1 Cache, and L2 Cache:&lt;/li&gt;
&lt;li&gt;Registers — These are tiny, ultra-fast memory locations within each GPU core. Registers store immediate values that a core is actively processing, making them the fastest type of memory.&lt;/li&gt;
&lt;li&gt;L1 Cache — This is the first-level cache inside a Streaming Multiprocessor (SM). It stores frequently accessed data to speed up calculations and reduce access to slower memory (like DRAM).&lt;/li&gt;
&lt;li&gt;L2 Cache — This is a larger, second-level cache that is shared across multiple SMs. It helps store and reuse data that might not fit in L1 cache, reducing reliance on external memory (VRAM).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HBM
&lt;ul&gt;
&lt;li&gt;Bigger capacity&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;pasted-image-20260107162911&#34; loading=&#34;lazy&#34; src=&#34;http://blog.kkkzoz.top/images/pasted-image-20260107162911.png&#34;&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
