{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "id": "title",
      "type": "text",
      "x": 250,
      "y": 25,
      "width": 980,
      "height": 35,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9000,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "CUTLASS 教程：从手写 GEMM 到 CuTe / Tensor Core Kernel",
      "fontSize": 28,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "CUTLASS 教程：从手写 GEMM 到 CuTe / Tensor Core Kernel",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "subtitle",
      "type": "text",
      "x": 170,
      "y": 72,
      "width": 1120,
      "height": 24,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "学习目标：看懂 CUTLASS 的层级抽象，能把 ThreadblockShape / WarpShape / InstructionShape 和数据搬运、pipeline、epilogue 对上",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "学习目标：看懂 CUTLASS 的层级抽象，能把 ThreadblockShape / WarpShape / InstructionShape 和数据搬运、pipeline、epilogue 对上",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "s0",
      "type": "rectangle",
      "x": 40,
      "y": 130,
      "width": 1310,
      "height": 170,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#dbe4ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 30,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9002,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "s0_label",
      "type": "text",
      "x": 58,
      "y": 142,
      "width": 1274,
      "height": 26,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9003,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "一、先把 GEMM 三重循环映射到 GPU 层级",
      "fontSize": 20,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "一、先把 GEMM 三重循环映射到 GPU 层级",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "g0",
      "type": "rectangle",
      "x": 80,
      "y": 195,
      "width": 210,
      "height": 70,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#a5d8ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9004,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "g0_text",
      "type": "text",
      "x": 92,
      "y": 207,
      "width": 186,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9005,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "数学 GEMM\nC[M,N] = A[M,K] x B[K,N]",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "数学 GEMM\nC[M,N] = A[M,K] x B[K,N]",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "g1",
      "type": "rectangle",
      "x": 350,
      "y": 195,
      "width": 230,
      "height": 70,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9006,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "g1_text",
      "type": "text",
      "x": 362,
      "y": 207,
      "width": 206,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9007,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "CTA / Threadblock Tile\nThreadblockShape{kM,kN,kK}\n一个 block 负责一个 C tile",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "CTA / Threadblock Tile\nThreadblockShape{kM,kN,kK}\n一个 block 负责一个 C tile",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "g2",
      "type": "rectangle",
      "x": 640,
      "y": 195,
      "width": 220,
      "height": 70,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9008,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "g2_text",
      "type": "text",
      "x": 652,
      "y": 207,
      "width": 196,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9009,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Warp Tile\n多个 warp 分摊 CTA tile\n从 smem 读到寄存器",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Warp Tile\n多个 warp 分摊 CTA tile\n从 smem 读到寄存器",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "g3",
      "type": "rectangle",
      "x": 920,
      "y": 195,
      "width": 190,
      "height": 70,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#d0bfff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9010,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "g3_text",
      "type": "text",
      "x": 932,
      "y": 207,
      "width": 166,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9011,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "MMA Atom\nmma.sync / wgmma\nTensor Core 指令",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "MMA Atom\nmma.sync / wgmma\nTensor Core 指令",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "g4",
      "type": "rectangle",
      "x": 1160,
      "y": 195,
      "width": 150,
      "height": 70,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#c3fae8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9012,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "g4_text",
      "type": "text",
      "x": 1172,
      "y": 207,
      "width": 126,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9013,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Epilogue\nalpha/beta\nbias/activation/store",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Epilogue\nalpha/beta\nbias/activation/store",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "a0",
      "type": "arrow",
      "x": 290,
      "y": 230,
      "width": 60,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9014,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          60,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "a1",
      "type": "arrow",
      "x": 580,
      "y": 230,
      "width": 60,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9015,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          60,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "a2",
      "type": "arrow",
      "x": 860,
      "y": 230,
      "width": 60,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9016,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          60,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "a3",
      "type": "arrow",
      "x": 1110,
      "y": 230,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9017,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "s1",
      "type": "rectangle",
      "x": 40,
      "y": 335,
      "width": 640,
      "height": 310,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#e5dbff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 30,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9018,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "s1_label",
      "type": "text",
      "x": 58,
      "y": 347,
      "width": 604,
      "height": 26,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9019,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "二、CUTLASS 2.x / 传统 GEMM API 怎么读",
      "fontSize": 20,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "二、CUTLASS 2.x / 传统 GEMM API 怎么读",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c20",
      "type": "rectangle",
      "x": 80,
      "y": 400,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#a5d8ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9020,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c20_text",
      "type": "text",
      "x": 92,
      "y": 412,
      "width": 226,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9021,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "device::Gemm\nhost 侧入口，语义接近 cuBLAS",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "device::Gemm\nhost 侧入口，语义接近 cuBLAS",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c21",
      "type": "rectangle",
      "x": 390,
      "y": 400,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9022,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c21_text",
      "type": "text",
      "x": 402,
      "y": 412,
      "width": 226,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9023,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "threadblock::MmaPipelined\nglobal -> shared -> register\nK 维 mainloop",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "threadblock::MmaPipelined\nglobal -> shared -> register\nK 维 mainloop",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c22",
      "type": "rectangle",
      "x": 80,
      "y": 520,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9024,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c22_text",
      "type": "text",
      "x": 92,
      "y": 532,
      "width": 226,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9025,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "warp::Mma\nwarp 级 outer-product 累加",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "warp::Mma\nwarp 级 outer-product 累加",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c23",
      "type": "rectangle",
      "x": 390,
      "y": 520,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9026,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c23_text",
      "type": "text",
      "x": 402,
      "y": 532,
      "width": 226,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9027,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Iterator / Layout\n描述 tile 访问、边界 predication、访存布局",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Iterator / Layout\n描述 tile 访问、边界 predication、访存布局",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c2a0",
      "type": "arrow",
      "x": 330,
      "y": 437,
      "width": 60,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9028,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          60,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c2a1",
      "type": "arrow",
      "x": 515,
      "y": 475,
      "width": 0,
      "height": 45,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9029,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          0,
          45
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c2a2",
      "type": "arrow",
      "x": 330,
      "y": 558,
      "width": 60,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9030,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          60,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c2note",
      "type": "text",
      "x": 80,
      "y": 605,
      "width": 560,
      "height": 22,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9031,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "读法：先定位 device API，再追 mainloop，最后看 iterator 如何把矩阵 tile 化。面试重点是 tile 层级、共享内存复用、bank conflict、occupancy 与 pipeline stage。",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "读法：先定位 device API，再追 mainloop，最后看 iterator 如何把矩阵 tile 化。面试重点是 tile 层级、共享内存复用、bank conflict、occupancy 与 pipeline stage。",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "s2",
      "type": "rectangle",
      "x": 720,
      "y": 335,
      "width": 630,
      "height": 310,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#d3f9d8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 30,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9032,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "s2_label",
      "type": "text",
      "x": 738,
      "y": 347,
      "width": 594,
      "height": 26,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9033,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "三、CUTLASS 3.x / CuTe 怎么理解",
      "fontSize": 20,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "三、CUTLASS 3.x / CuTe 怎么理解",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c30",
      "type": "rectangle",
      "x": 760,
      "y": 400,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9034,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c30_text",
      "type": "text",
      "x": 772,
      "y": 412,
      "width": 226,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9035,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Collective Mainloop\nGmemTiledCopy + SmemLayout\nTiledMma / pipeline",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Collective Mainloop\nGmemTiledCopy + SmemLayout\nTiledMma / pipeline",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c31",
      "type": "rectangle",
      "x": 1060,
      "y": 400,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#c3fae8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9036,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c31_text",
      "type": "text",
      "x": 1072,
      "y": 412,
      "width": 226,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9037,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Collective Epilogue\naccumulator -> output tile\n融合 scale/bias/activation",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Collective Epilogue\naccumulator -> output tile\n融合 scale/bias/activation",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c32",
      "type": "rectangle",
      "x": 760,
      "y": 520,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#d0bfff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9038,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c32_text",
      "type": "text",
      "x": 772,
      "y": 532,
      "width": 226,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9039,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "CuTe Layout Algebra\nShape / Stride / Layout\n把索引映射写成类型",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "CuTe Layout Algebra\nShape / Stride / Layout\n把索引映射写成类型",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c33",
      "type": "rectangle",
      "x": 1060,
      "y": 520,
      "width": 250,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9040,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "c33_text",
      "type": "text",
      "x": 1072,
      "y": 532,
      "width": 226,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9041,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Atom / Tiled MMA Copy\nMMA 原子操作 + 分块组合\nHopper/Blackwell 可接 TMA/WGMMA",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Atom / Tiled MMA Copy\nMMA 原子操作 + 分块组合\nHopper/Blackwell 可接 TMA/WGMMA",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "c3a0",
      "type": "arrow",
      "x": 1010,
      "y": 437,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9042,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c3a1",
      "type": "arrow",
      "x": 885,
      "y": 475,
      "width": 0,
      "height": 45,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9043,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          0,
          45
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c3a2",
      "type": "arrow",
      "x": 1010,
      "y": 558,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9044,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "c3note",
      "type": "text",
      "x": 760,
      "y": 605,
      "width": 530,
      "height": 22,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9045,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "读法：CuTe 的核心不是新数学，而是用 Layout/Tile/Atom 精确表达数据在哪、怎么搬、由哪个 MMA 原子消费。先学 layout，再学 tensor，再看 GEMM tutorial。",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "读法：CuTe 的核心不是新数学，而是用 Layout/Tile/Atom 精确表达数据在哪、怎么搬、由哪个 MMA 原子消费。先学 layout，再学 tensor，再看 GEMM tutorial。",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "s3",
      "type": "rectangle",
      "x": 40,
      "y": 690,
      "width": 1310,
      "height": 310,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 30,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9046,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "s3_label",
      "type": "text",
      "x": 58,
      "y": 702,
      "width": 1274,
      "height": 26,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9047,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "四、面试可讲的优化主线",
      "fontSize": 20,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "四、面试可讲的优化主线",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "o0",
      "type": "rectangle",
      "x": 80,
      "y": 755,
      "width": 230,
      "height": 82,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#a5d8ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9048,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "o0_text",
      "type": "text",
      "x": 92,
      "y": 767,
      "width": 206,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9049,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Global Memory\ncoalesced load\nA/B tile 从 gmem 搬入 smem",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Global Memory\ncoalesced load\nA/B tile 从 gmem 搬入 smem",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "o1",
      "type": "rectangle",
      "x": 350,
      "y": 755,
      "width": 230,
      "height": 82,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9050,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "o1_text",
      "type": "text",
      "x": 362,
      "y": 767,
      "width": 206,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9051,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Shared Memory\n数据复用\nbank conflict free layout",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Shared Memory\n数据复用\nbank conflict free layout",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "o2",
      "type": "rectangle",
      "x": 620,
      "y": 755,
      "width": 230,
      "height": 82,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9052,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "o2_text",
      "type": "text",
      "x": 632,
      "y": 767,
      "width": 206,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9053,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Register Accumulator\n每线程/warp 保持 C fragment\n提升 ILP",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Register Accumulator\n每线程/warp 保持 C fragment\n提升 ILP",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "o3",
      "type": "rectangle",
      "x": 890,
      "y": 755,
      "width": 230,
      "height": 82,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#d0bfff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9054,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "o3_text",
      "type": "text",
      "x": 902,
      "y": 767,
      "width": 206,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9055,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Pipeline Stage\ncp.async / TMA 预取\n隐藏 gmem latency",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Pipeline Stage\ncp.async / TMA 预取\n隐藏 gmem latency",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "o4",
      "type": "rectangle",
      "x": 1160,
      "y": 755,
      "width": 150,
      "height": 82,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#c3fae8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9056,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "o4_text",
      "type": "text",
      "x": 1172,
      "y": 767,
      "width": 126,
      "height": 60,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9057,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Epilogue Fusion\nstore 前融合\n减少额外 kernel",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Epilogue Fusion\nstore 前融合\n减少额外 kernel",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "oa0",
      "type": "arrow",
      "x": 310,
      "y": 796,
      "width": 40,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9058,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          40,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "oa1",
      "type": "arrow",
      "x": 580,
      "y": 796,
      "width": 40,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9059,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          40,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "oa2",
      "type": "arrow",
      "x": 850,
      "y": 796,
      "width": 40,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9060,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          40,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "oa3",
      "type": "arrow",
      "x": 1120,
      "y": 796,
      "width": 40,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9061,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          40,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "q0",
      "type": "rectangle",
      "x": 80,
      "y": 880,
      "width": 280,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffc9c9",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9062,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "q0_text",
      "type": "text",
      "x": 92,
      "y": 892,
      "width": 256,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9063,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "必会问题 1\nThreadblockShape 变大为什么可能更快，也可能 occupancy 下降",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "必会问题 1\nThreadblockShape 变大为什么可能更快，也可能 occupancy 下降",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "q1",
      "type": "rectangle",
      "x": 400,
      "y": 880,
      "width": 280,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffc9c9",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9064,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "q1_text",
      "type": "text",
      "x": 412,
      "y": 892,
      "width": 256,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9065,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "必会问题 2\nWarp tile / instruction tile 分别对应什么硬件层级",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "必会问题 2\nWarp tile / instruction tile 分别对应什么硬件层级",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "q2",
      "type": "rectangle",
      "x": 720,
      "y": 880,
      "width": 280,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#ffc9c9",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9066,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "q2_text",
      "type": "text",
      "x": 732,
      "y": 892,
      "width": 256,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9067,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "必会问题 3\n为什么需要 epilogue，bias/activation 放哪里融合",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "必会问题 3\n为什么需要 epilogue，bias/activation 放哪里融合",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "q3",
      "type": "rectangle",
      "x": 1040,
      "y": 880,
      "width": 270,
      "height": 75,
      "angle": 0,
      "strokeColor": "#1e1e1e",
      "backgroundColor": "#eebefa",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 9068,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "q3_text",
      "type": "text",
      "x": 1052,
      "y": 892,
      "width": 246,
      "height": 40,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 9069,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "练习路线\nnaive GEMM -> tiled GEMM -> WMMA -> CUTLASS profiler -> CuTe layout",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "练习路线\nnaive GEMM -> tiled GEMM -> WMMA -> CUTLASS profiler -> CuTe layout",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-bg",
      "type": "rectangle",
      "x": 80,
      "y": 1080.0,
      "width": 1280,
      "height": 300,
      "angle": 0,
      "strokeColor": "#64748b",
      "backgroundColor": "#e2e8f0",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 70,
      "groupIds": [],
      "seed": 93001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-title",
      "type": "text",
      "x": 108,
      "y": 1102.0,
      "width": 1224,
      "height": 38,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "练习题与面试题补充：CUTLASS/CuTe GEMM",
      "fontSize": 24,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "练习题与面试题补充：CUTLASS/CuTe GEMM",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-practice-box",
      "type": "rectangle",
      "x": 108,
      "y": 1158.0,
      "width": 598.0,
      "height": 190,
      "angle": 0,
      "strokeColor": "#2563eb",
      "backgroundColor": "#bfdbfe",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 93002,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-practice-text",
      "type": "text",
      "x": 130,
      "y": 1178.0,
      "width": 575.0,
      "height": 150,
      "angle": 0,
      "strokeColor": "#243042",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "练习题\n1. 把 CTA/warp/MMA tile 三层形状标在同一张图上\n2. 对比 threadblock swizzle 对 L2 locality 的影响\n3. 解释 epilogue fusion 如何减少 global memory 写读",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "练习题\n1. 把 CTA/warp/MMA tile 三层形状标在同一张图上\n2. 对比 threadblock swizzle 对 L2 locality 的影响\n3. 解释 epilogue fusion 如何减少 global memory 写读",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-interview-box",
      "type": "rectangle",
      "x": 734.0,
      "y": 1158.0,
      "width": 598.0,
      "height": 190,
      "angle": 0,
      "strokeColor": "#7c3aed",
      "backgroundColor": "#ddd6fe",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 93003,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-cutlass教程-gemm到cute原理图-interview-text",
      "type": "text",
      "x": 756.0,
      "y": 1178.0,
      "width": 575.0,
      "height": 150,
      "angle": 0,
      "strokeColor": "#243042",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "面试题\n1. CUTLASS 的层级 tiling 如何映射到 tensor core\n2. CuTe layout 解决了什么模板表达问题\n3. mainloop 和 epilogue 分别负责什么",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "面试题\n1. CUTLASS 的层级 tiling 如何映射到 tensor core\n2. CuTe layout 解决了什么模板表达问题\n3. mainloop 和 epilogue 分别负责什么",
      "autoResize": false,
      "lineHeight": 1.25
    }
  ],
  "appState": {
    "gridSize": null,
    "viewBackgroundColor": "#ffffff"
  },
  "files": {}
}