Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BlackholeおよびTensixアーキテクチャのNoCを用いたデータ転送

Avatar for Tenstorrent Japan Tenstorrent Japan
July 22, 2025
140

 BlackholeおよびTensixアーキテクチャのNoCを用いたデータ転送

Tenstorrent Tech Talk #2, Session1

Avatar for Tenstorrent Japan

Tenstorrent Japan

July 22, 2025
Tweet

Transcript

  1. 前回のおさらい: TenstorrentのAI HW戦略 • TenstorrentのAI向けVision • AI Everywhere 誰でもが利用可能な安価で高性能な製品 mWからMW

    同じアーキテクチャとSDKで小型から大型システムまで対応 • 様々なフォームファクタで提供 • IP, Chip,Chiplet,PCIカード、サーバー、Data Center • Tensix CoreをベースとしたScale-out • オープンなSDK • Firmwareから上は全部OSS • グラフコンパイラ〜Tensix Core1個単位の記述まで 全部がホワイトボックス 2 ANY AI MO DE L OPEN SOURCE OPEN SOURCE O P T I M I ZE D M L R E S U L T S CUSTOM OPS BUILD ANYTHING OPEN SOURCE OPEN SOURCE Compiler
  2. 前回のおさらい2: AIアクセラレータ/ Tensix Coreの基本的な構造 Compute RISC-V 2 RISC-V 3 RISC-V

    4 RISC-V 5 RISC-V 1 Router 0 L1 Memory • 5 “Baby RISC-V” Cores • 32-bit RISC-V ISA • 2 Network-on-Chip • 1.5MB SRAM Cache Router 1 Compute Vector Math Engine Tile Math Engine
  3. 前回のおさらい3: AIアクセラレータ/ Tensix Core内部のデータフロー CONFIDENTIAL - CONTAINS TRADE SECRETS Compute

    RISC-V 2 RISC-V 3 RISC-V 4 RISC-V 5 RISC-V 1 Router 1 Router 0 L1 Memory NoC 0 data movement kernel data movement kernel compute kernel NoC 1 CBs CBs • Baby riscは, Compute, Routerの実行命令を生成する役割. • メモリを覗き見て動的に命令列生成→他のMIMD型アクセラレータに比べ, コード量圧縮ができる • AIワークロードは5つのCPUで動くプログラムに落ちる • データ入力, 計算(3スレッド), データ出力のC言語で記述可能な3 Device Kernelに落ちる • Sram上に確保できるCircular Buffer (CB)が3カーネルを束ねる • Tensixの上を計算しながらデータが流れていく
  4. 今日のトピック1: Tensix Coreのメモリ構造, NoC Compute RISC-V 2 RISC-V 3 RISC-V

    4 RISC-V 5 RISC-V 1 Router 0 L1 Memory • 5 “Baby RISC-V” Cores • 32-bit RISC-V ISA • 2 Network-on-Chip • 1.5MB SRAM Cache Router 1
  5. 今日のトピック2: TT-metaliumのプログラミングモデル Partners TT-Forge vLLM Python kernels TT-NN TT-Metalium TT-LLK

    (low-level-kernels) PyTorch models TT-Fabric (unified scale-up and scale-out) Manually optimized models TT-Train TT- Transformer LLM training LLM inference models LLM, t2s, s2t models Jax PyTorch TF ONNX Models General: https://github.com/tenstorrent TT-Metalium : https://github.com/tenstorrent/tt-metal TT-Forge : https://github.com/tenstorrent/tt-forge AI Workloads Open Source Partners Tenstorrent Open Source Software 第3回予定?? 第5回予定 第4回予定 第?回予定
  6. Tensix AI アクセラレータの論理的な見た目 Tensix同士, DRAM, Ethernetの全てはNoCでのやり取り W Tensix cores D

    DRAM cores E ETH cores P PCIe core A ARC core A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D NoCの読み書き → DRAM/別のTensix Coreの任意のアドレスを対象にできる
  7. NoC/IOの基本的なパフォーマンス CONFIDENTIAL - CONTAINS TRADE SECRETS Memory & I/O Data

    Movement Pattern Bandwidth SRAM Local / Sharded 94 TB/s SRAM Neighbor (Halo) 47 TB/s SRAM Row / Column / Mesh Multicast 24 TB/s SRAM Gather / Scatter (3 hops) 16 TB/s SRAM Gather / Scatter (10 hops) 5 TB/s DRAM Row 512 GB/s Ethernet Column 1 TB/s local column gather, 3 hops neighbor multicast Hop Type Throughput (per NoC) Latency NIUから Router 512b/cycle ~5 cycle 隣のrouter 512b/cycle & axis 9 cycle Routerから NIU 512b/cycle 5cycle
  8. NoCからTensixへの繋がり部分 12 Router: NoC0, NoC1に其々一つずつ NIU(NoC Interface): パケット転送を仕掛けるためのユニット パケット構成はheader flit

    32Bに続き256個のペイロード flits(それぞれ32B). Tensix Core内部の2RISCコアに制御用のレジスタが見え ている. Read: 指定されたL1アドレスに受信したものを書き込み Write: 指定されたアドレス(DRAM/別TensixのL1)にL1アド レスの内容 or 即値を書き込み Overlay: NoC制御のためのco-procesor 2x512b
  9. IO系 Tileの構造 • 一部Tensix Coreと部品が共通化されている. NoC I/F, Baby RISC, L1Memory

    • IO系Tileの場合 NIUで NoCからAXIバスへの変換が入って, 各PHYに行く 13 GDDR6 Controller RISC-V 1 Router 0 L1 Memory RISC-V 1 Router 1 Ethernet PHY 6 in1 MUX D D D DRAM Tile Ethernet Tile E ETH 2 x RISC 512 KB L1 8 KB i$ 8 KB local data mem DRAM 1 x RISC 128 KB L1 8 KB i$ 8 KB local data mem RISC-V 0 Router 1 L1 Memory NIU1 Router 0 NIU0
  10. BlackHole: DRAMの扱い • 8個の4GB DRAMバンク → 32GBのデバイスメモリ • 3個のDRAM Tile(2個のNoC)が1つのDRAMバンクを共有

    • Tensixコアの位置によってDRAMのレイテンシが違う. • どのアドレス(バンク)をアクセスするかによっても違う (0,5) (0,6) (0,7) 0-4GB NoC0 NoC 1 6:1 xbar NoC0 NoC 1 NoC0 NoC 1 GDDR DRAM Controller A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D 14 15 16 9 7 6 5 4 3 2 1 8 11 10 9
  11. BlackHole: DRAMの扱い • 8個の4GB DRAMバンク → 32GBのデバイスメモリ • 3個のDRAM Tile(2個のNoC)が1つのDRAMバンクを共有

    • Tensixコアの位置によってDRAMのレイテンシが違う. • どのアドレス(バンク)をアクセスするかによっても違う A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D 14 15 16 9 7 6 5 4 3 2 1 8 11 10 9 D D D D D D D D
  12. TT-metaliumにおけるNOC関連API • よく使う読み書き • noc_async_read(src_noc_addr, dest_addr, size, noc_index); • noc_async_write(src_addr,

    dest_noc_addr, size, noc_index); • そのほかタイル〜ページ単位, 単一パケットのみ等のサイズしていもあり • アドレス生成関数 • get_noc_addr(noc_x, noc_y, addr) - XY座標からNOCアドレス生成 • get_noc_multicast_addr() - マルチキャスト用NOCアドレス生成 • get_noc_addr_from_bank_id() - DRAMバンクIDからNOCアドレス取得 • マルチキャスト • get_noc_multicast_addr(start_x, start_y, end_x, end_y, local_addr, noc_index); • noc_async_write_multicast(src_addr, multicast_noc_addr, size, noc_index); • Semaphore • noc_semaphore_set(semaphore_addr, value); • noc_semaphore_wait(semaphore_addr, target_value); • 同期 • noc_async_write_barrier(); • noc_async_atomic_barrier(); • noc_async_full_barrier(); 16
  13. 1Tensixに収まらなさそうな行列積のデータ配置 • 例えば (32,2048) x (2048,32) = (32,128)な行列積を考える. • Tensix

    CoreのFMAの演算単位は32x32, これを1Tileと定義すると 64 x 64 tile. • 各入力テンソル1TileごとにDRAMバンクをround-robinで配置 • Interleaveするサイズ(page)はDRAM上で領域確保する際に指定可能 17 A:64x(32,32) B:64 * (32*32) 9 ・・・ ・・・ DRAM0 A[0], A[8] ・・・A[56] B[0] , B[8] ・・・B[56] DRAM1 A[1] , A[9] ・・・A[57] B[1] , B[9] ・・・B[57] DRAM2 A[2] , A[10] ・・・A[58] B[2] , B[10] ・・・B[58] DRAM8 A[7] , A[15] ・・・A[63] B[7] , B[15] ・・・B[63] ・・・ A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 1 = (0,3) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 4 = (9,11) DRAM 5 = (9,3) DRAM 6 = (9,8) DRAM 7 = (9,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 2 = (0,4) DRAM 3 = (0,5) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  14. 1Tensixに収まらなさそうな行列積のデータ配置 • Phaze0: Reader Kernelが各 各DRAM Bankから, 直近のTensixにA0~7/B0~7を読む 18 9

    A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  15. 1Tensixに収まらなさそうな行列積のデータ配置 • Phaze0:Reader Kernelが各DRAM Bankから, 直近のTensixにA0~7/B0~7を読む • Phaze1:Phaze0で読んだ値を使ってCompute Kernelが部分行列積しつつ, A[8~15],

    B[8~15]を読む 19 9 A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  16. 1Tensixに収まらなさそうな行列積のデータ配置 • Phaze0:各DRAM Bankから, 直近のTensixにA0~7/B0~7を読む • Phaze1:読んだ値を使ってCompute Kernelが部分行列積しつつ, A[8~15], B[8~15]を

    読む • Phaze2: phaze1の計算結果, 読み出し値を使って (以下略 ・ ・ ・ ここまでNoC0で DRAMからTensixへデータ配布 20 9 A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  17. 1Tensixに収まらなさそうな行列積のデータ配置 • Phaze0:各DRAM Bankから, 直近のTensixにA0~7/B0~7を読む • Phaze1:読んだ値を使ってCompute Kernelが部分行列積しつつ, A[8~15], B[8~15]を読む

    • Phaze2: phaze1の計算結果, 読み出し値を使って (以下略 ・ ・ ・ • PhazeM: Tensixから値を集約 (Reduction Kernel) 21 9 A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  18. 1Tensixに収まらなさそうな行列積のデータ配置 • Phaze0:各DRAM Bankから, 直近のTensixにA0~7/B0~7を読む • Phaze1:読んだ値を使ってCompute Kernelが部分行列積しつつ, A[8~15], B[8~15]を読む

    • Phaze2: phaze1の計算結果, 読み出し値を使って (以下略 ・ ・ ・ • PhazeM: Tensixから値を集約 (Reduction Kernel) • PhazeN: 結果をDRAMに書き戻し PhazeM,NはNoC1を使う 22 9 A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  19. 1Tensixに収まらなさそうな行列積のデータ配置 ・もう少し大きな行列積になった場合 → 出力テンソルをブロック化して担当Tensixをつける. 入力テンソルをマルチキャストで届ける. ・ご参考 tt_metal/programming_examples/matmul/matmul_multicore_reuse_mcast/matmul_multicore_reuse_mcast.cpp ・もっとDRAMを依存を下げたい人 & 局所性の高い人:

    TensorをL1メモリにだけ貼り付けるオプション有〼 23 9 A D E E E E E E E D W W W W W W W D W W W W W W W D W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W W W W W W W D W 1 2 3 4 5 6 7 8 10 0 0 W D D D D D D D D D D D W W W W W W D X=0 Y=0 E W W W W W W W W W 11 W P E W W W W W W W W W 12 W E W W W W W W W W W 13 W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W E W W W W W W W W W W D DRAM 0 = (0,11) DRAM 2 = (0,8) DRAM 3 = (0,6) DRAM 0 = (0,1) DRAM 1 = (0,2) DRAM 4 = (9,1) DRAM 5 = (9,2) DRAM 6 = (9,4) DRAM 7 = (9,5)
  20. NoC/メモリアーキテクチャの話まとめ • 2系統の2D-torus NoC: Tensix間だけじゃなく, DRAM, PCIe EthernetもNoC • 外部へのIOではNoCからAXIに乗り換えてから其々のPHYに

    • NoC/DRAMのTT-Metaliumからの見え方 • DRAMのデータ配置例 • 具体的にTensixの上での行列積最適化はどう書くのか, 次のTopicにバトンタッチ 24