Application Specific SIMT による電力効率と開発コストの両立

11.8K Views

March 23, 23

スライド概要

2023/3/13「TIER IV Computing System Workshop 2023」
発表者:塩谷亮太先生 (東京大学 准教授)

profile-image

TIER IV(ティアフォー)は、「自動運転の民主化」をビジョンとし、Autowareを活用したソフトウェアプラットフォームと統合開発環境を提供しています。 #Autoware #opensource #AutonomousDriving #deeptech

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Application Specific SIMT による 電力効率と開発コストの両立 塩谷 亮太

2.

塩谷 亮太(しおや りょうた) ◼ 所属: ◇ 東京大学 情報理工学系研究科 創造情報学専攻 (准教授) ◇ ティアフォーには技術アドバイザーとして参加 2

3.

塩谷の背景:プロセッサのマイクロアーキテクチャ ◼ 元々の専門: ◇ 汎用 CPU のアーキテクチャ ◼ 最近の研究: ◇ 特化型のプロセッサ(データ並列性が高い処理向け) ☐ スーパーコンピュータ向けプロセッサ ☐ GPU ☐ 自動運転向けプロセッサ ◼ 今日の内容: ◇ ティアフォー内で研究開発中の自動運転向けプロセッサの 背景となる考えや狙い 3

4.

背景:自動運転アルゴリズムと消費電力 ◼ 背景:アルゴリズムの発展と,消費電力の肥大化 ◇ 現状でも高性能な CPU や GPU を使って処理する必要がある ◇ 「スーパーコンピュータを背負って走っている」とも言われる ◇ 今後もさらに処理量が肥大化し続ける見込み ◼ 課題: 1. 実際に売る車に搭載しようと思うと,相当に消費電力を削減してい く必要がある 2. アルゴリズムの発展へ柔軟に対応する必要がある ◼ そのためのハードウェアを研究・開発中 4

5.

どう作る? ◼ ASIC/FPGA 上で専用回路を作る? ◇ 開発が大変で時間もかかるし柔軟性もない ◼ 方針:専用回路ではなくプロセッサにする 1. プロセッサの共通のフレームワークを作る → 開発コスト削減 2. 領域ごとにプロセッサ構成をカスタマイズする → 電力効率向上 5

6.

Application Specific SIMT (AS-SIMT) 1. Single-Instruction Multiple-Thread (SIMT) アーキテクチャをベースに ◇ NVIDIA の GPU 等で採用されているもの ◇ (詳しくは後で説明 2. 処理の部分ごとにカスタマイズ ◇ カスタマイズにより自動運転に出てくる処理を効率良く広くカバー ◇ 3~4パターンのプロセッサがあれば大体カバーできる・・・ といいな ◇ Dragonfly/Hornet の2パターンが設計中 3. RISC-V ベース ◇ SIMT はプログラムからはただのマルチプロセッサに見える ◇ 既存の RISC-V ツールチェインをほぼそのまま流用できる ◼ 電力効率向上と低開発コストの両立を目指す 6

7.

Dragonfly/Hornet の(FPGA 上での)実装 Target Device VCK190 LiDAR ETH (PL) Packet Converter SPM UDP Block Interrupt (Kicking kernel polar ~ outlier) PL DF (整数 SIMT) Polar to Cartesian Cropping (far-range) Cropping (vehicle) HNT (単精度 FP SIMT) Voxel Grid Filter Cropping (side mirror) Transform Random Sampler NDT Ground Filter EKF right/outlier_filtered/pointcloud Distortion Correction left/outlier_filtered/pointcloud Ring Outlier Filter top/outlier_filtered/pointcloud Scan Interrupt ETH (PS) DRAM SCAN DATA (top/rectified/pointcloud) top/rectified/pointcloud PS SCAN DATA (downsample/pointcloud) downsample/pointcloud Filtered Flag AI Engine (Centerpoint)

8.

動作の様子 8

9.

もくじ 1. 2. アーキテクチャとハードウェアの効率 1. 前提となる処理内容 2. アーキテクチャの類型 3. アーキテクチャそれぞれの電力効率 開発効率と AS-SIMT アーキテクチャ 9

10.

自動運転のプログラム(の重たい部分)に 期待できる性質 ◼ 大量のデータに(ほぼ)同じ処理を施す ◇ 個々の処理自体は比較的簡単 ◇ 単純な行列演算や画像処理ほどには簡単ではないものも多くある ☐ 適応的な処理やツリーのトラバーサルなどがよくある センサー処理/自己(位置)認識 推定/計画/制御 // 200,000 parallel for each data in sensor frame { data_out[i] = A*data[i] + B; if (DownSample(data[i])) { remove(data_out[i]); } } // 90,000 parallel for (i = 1 to 300) { for (j = 1 to 300) { Q[i][j] = A[i] * B[j]; } } while (matching score < target score){ // 2,000 parallel for each point in Processed Data { voxels = find_near_voxels_in_map(map, point); scores = A*point + B; [update hessian matrix] } Matching score = gather (scores); pose = update_by_newton method; } // Quadratic Programming (Newton-Method + LP) while (not optimized) { A = LU; // LU Decomposition (SIMD) [linear programming] (SIMD) [Update Hessian] (SIMD) } 10

11.

ハードウェアのアーキテクチャの類型と例 1. SIMD 型 ◇ SIMD: ☐ スカラ/SIMD 命令混合: AMD GPU/Intel GPU (+各社の SIMD 命令を持つ CPU ☐ SIMD プロセッサ: PFN MN-Core ☐ SIMT: NVIDIA GPU,Tier4 HNT/DF ◇ ベクトル ☐ NEC SX, NSITEXE Akaria 2. アレイ型 ◇ シストリックアレイ ☐ Google TPU, IBM RaPiD ◇ CGRA 3. 専用回路(ASIC/FPGA) 11

12.

アーキテクチャごとの電力効率 ◼ スカラ型 CPU から以下に分けて考える スカラ型 CPU PC 1. 命令制御 命令メモリ 2. レジスタ・ファイル レジスタ 3. 演算器 演算器 ◼ 電力効率は演算部分の割合をいかに高めるかに帰着される ◇ 実際に演算を行っている部分の回路はアーキテクチャから独立 ◇ 演算以外の,命令制御とレジスタをどうやって削るか 12

13.

参考1:要素ごとの回路面積(= トランジスタ数)の規模感 消費電力は回路面積に大体比例 32bit ARM7TDMI 75K 64bit 32 ent RF 12K 64bit 256 ent RF 96K 64bit Int Adder 6K 64bit FP MADD 200K ◼ FP 演算器はやたら大きい (ARM 75K 内の赤緑青の比率は適当です 13

14.

参考2:AMD Bulldozer のコア部分に占める演算器部分 チップ写真は https://en.wikichip.org/wiki/File:Bulldozer_Die_Shot.jpg より INT INT RF INT RF FP FP RF FP RF INT FP ◼ 演算器(INT/FP)が CPU コア全体に占める割合はわずか 14

15.

SIMD(Single Instruction/Multiple Data) SIMD PC 命令メモリ レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 ◼ 1つの命令の流れが複数のデータの流れを処理する方式 ◇ SIMD は同時に1つのプログラム(命令の流れ)を実行 ◇ それぞれの命令は複数のデータに対して同じ演算を行う ◼ 「大量のデータに(ほぼ)同じ処理を施す」によくマッチ 15

16.

SIMD(Single Instruction stream/Multiple Data stream) MIMD(スカラ型のマルチコア) PC PC PC SIMD PC PC 命令メモリ 命令メモリ 命令メモリ 命令メモリ レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 命令メモリ レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 ◼ SIMD では複数の演算器間で命令制御部を共有できる 16

17.

SIMD は同じ回路量で高い性能を実現できる ◼ SIMD は MIMD と比べて全体をより小さく作ることができる ◇ 同じ総面積であれば,SIMD の方がより多くの演算器を搭載できる ☐ 下の図だと演算器は MIMD4個 vs. SIMD 8個 ◇ ベクトルもある種の SIMD なので,考え方は同じ ◼ つまり,同じ回路資源量(電力)あたりで,高い性能を出せる レジスタ 演算器 レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 レジスタ 演算器 制御部 制御部 制御部 レジスタ 演算器 制御部 レジスタ 演算器 レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 MIMD 制御部 回路量(チップ面積) SIMD 制御部 コア コア 17

18.

アレイ型 ◼ アレイ型では,演算器を直結して並べる ◇ レジスタを介さなくなるので,より演算器の割合が増える ◇ さらに同じ回路資源量(電力)あたりで,高い性能を出せる アレイ型 PC 命令メモリ SIMD PC 命令メモリ レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 18

19.

アレイ型の例:密行列積アクセラレータの場合 ◼ 密行列積は直接これがあてはまる ◇ 入力データ数と比べて演算数が多い:O(𝑁 2 ) vs. O(𝑁 3 ) ◇ 演算が規則的なのでデータをアレイに配りやすい ◼ 例: ◇ シストリック・アレイ型:データを流し込むと累積が出てくる ☐ Google TPU, IBM RaPiD ◇ Outer Product 型:データを流し込むと演算器側に累積される ☐ NVIDIA GPU Tensor Core ☐ AMD GPU Matrix Arithmetic Instructions (MAI) ☐ IBM POWER Matrix-Multiply Assist (MMA) 19

20.

専用回路化 アレイ型 PC 命令メモリ 専用回路 レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 演算器 ◼ 完全にデータを流し込むだけにしてしまえば,一番効率は良い 20

21.

電力効率のまとめ ◼ 下に行くほど演算器比率が高い = 電力効率がよい 1. スカラ型 2. SIMD 型 3. アレイ型 4. 専用回路 21

22.

もくじ 1. アーキテクチャとハードのウェアの効率 2. 開発効率と AS-SIMT アーキテクチャ 1. SIMT アーキテクチャ 2. RISC-V ベースによる開発効率 3. AS-SIMT による電力効率の向上 22

23.

柔軟性やプログラマビリティ ◼ 下に行くほど演算器比率が高い = 電力効率がよい・・・ が 1. スカラ型 2. SIMD 型: SIMD 命令やベクトル命令などを使う必要がある 3. アレイ型:演算器への割り当てや流し込みをプログラムする 必要がある 4. 専用回路:機能は完全に固定 ◼ (基本的に)下に行くほど柔軟性やプログラマビリティが低い 23

24.

開発効率(上側ほどよい) 柔軟性とプログラマビリティ スカラ SIMD アレイ 専用 電力効率(右側ほどよい) ◼ ◼ 専用回路に近づくほど演算器比率が高い = 電力効率がよい・・・ が 1. スカラ型 2. SIMD 型: SIMD 命令やベクトル命令などを実装+記述する必要がある 3. アレイ型:演算器への割り当てや流し込みをプログラムする 必要がある 4. 専用回路:機能は完全に固定 基本的に柔軟性(=開発効率)とプログラマビリティはトレードオフ 24

25.

開発効率(上側ほどよい) 柔軟性と開発コスト ◼ スカラ 目的はなんだったか? AS-SIMT SIMD アレイ 専用 電力効率(右側ほどよい) ◇ 電力効率が高性能 CPU や GPU と比べて十分に上がれば良い ◇ 開発効率も重要 ◼ 両立するのが AS-SIMT ◇ カスタマイズにより SIMD より電力効率を向上 ◇ 特に開発効率を大きく上げられる ◼ ベースとなる SIMT から説明 25

26.

SIMT(Single Instruction Multiple Thread) ◼ SIMD だと,全ての演算器は全く同じ動きしかできない ◇ 命令制御部を共有しているため ◼ SIMT アーキテクチャ: ◇ 各レーンごとに Program Counter (PC) を用意 ◇ それぞれのレーンにおいて異なるスレッドが動作 SIMD アーキテクチャ SIMT アーキテクチャ PC PC PC PC 命令メモリ 命令メモリ レジスタ レジスタ レジスタ レジスタ レジスタ レジスタ 演算器 演算器 演算器 演算器 演算器 演算器 26

27.

SIMT 上のプログラミング ◼ マルチスレッド・プログラムを動かす // スレッド内は逐次処理で記述 void add(*a, *b, *c){ c[t_id] = a[t_id] + b[t_id]; } ◇ Single Program Multiple Data (SPMD) Warp/Wavefront スレッド ◼ 全スレッドの PC が同じアドレスを 指している場合は SIMD プロセッサ として振る舞う PC0 ◇ このまとまりを Warp/Wavefront と呼ぶ PC1 PC2 PC3 命令メモリ ◇ 各スレッドで動作するのは普通の シングルスレッド・プログラム 演算器0 ◼ =Open CL や Open MP で記述すると, まとめて処理できるところをハードで勝手にまとめる 演算器1 演算器2 演算器3 SIMT 27

28.
[beta]
SIMT はプログラマに見せているインターフェースが異なる
SIMT ではハードが SIMD への対応を行う
Software

Software: SPMD
スレッド

ループ
for (i=0;i<N;i++) {
...
}

SIMD組み込み関数
func() {
add_x4(a, b);
}

スカラ命令

SIMD 化コンパイラ

SIMT ハードウェア

SIMD 命令

命令メモリ

命令メモリ

レジスタ

レジスタ

レジスタ

レジスタ

レジスタ

レジスタ

レジスタ

レジスタ

演算器

演算器

演算器

演算器

演算器

演算器

演算器

演算器

Hardware: SIMD
SIMD (AMD GPU/Intel GPU)

Hardware: SIMD
SIMT (NVIDIA GPU/Tier4 HNT/DF)

28

29.

SIMT の利点 ◼ 各スレッドで動作するのは普通のシングルスレッド・プログラム ◇ RISC-V をほぼそのまま使える! ◼ このことが開発効率を非常に改善する ◇ ハード開発 ◇ ソフトウェア・スタック 29

30.

RISC-V ベース SIMT の利点:ハードの開発 ◼ ハードの開発: ◇ テスト環境などは既存の RISC-V 検証インフラが使用できる ◇ レーン数を1にしてしまえば,ほぼ基本 ISA のRISC-V ☐ 機能シミュレータなどを作るのは比較的容易 ☐ ベクトルや SIMD 命令とかでは,こうはいかない 30

31.

RISC-V ベース SIMT の利点:ソフトウェア・スタック ◼ ソフトウェア・スタック ◇ 既存の RISC-V LLVM 等がほぼそのまま使える ◇ プログラミング・モデル: ☐ SIMT 用の API 拡張をした C 言語でプログラミング ☐ Open CL のサブセット的なスキームでプログラミングする ◼ 魔法のスーパーコンパイラを開発/メンテしないでよい ◇ SIMD 化,ベクトル化,PE への配置・・・ ◇ (実際は職人芸で書かれた手書きアセンブリな事も多い ◇ ハード自体を作るよりもある意味しんどい 31

32.

もくじ 1. アーキテクチャとハードのウェアの効率 2. 開発効率と AS-SIMT アーキテクチャ 1. SIMT アーキテクチャ 2. RISC-V ベースによる開発効率 3. AS-SIMT による電力効率の向上 32

33.

カスタマイズによる電力効率の底上げ ◼ 要求:実際に演算を行っている部分の比率を上げることが重要 ◼ 処理領域ごとに SIMT アーキテクチャのパラメータを変える事で対応 ◇ 搭載する演算器の選択 ◇ 同時に動くスレッドの幅やパイプライン段数,レジスタ数 33

34.

カスタマイズ:FP 演算器の有無 ◼ 既存の GPU で効率が悪い要因のひとつ:FP 演算器 ◇ 整数演算(固定小数点)しかしないなら,全部むだ ◼ FP 抜きはプロセッサ全体を大幅に縮小できる ◇ FP 演算のレイテンシを隠すために,多くの資源がいる ☐ パイプライン段数 ☐ スレッド数 ☐ レジスタ数 ◇ これらの縮小は大幅に効率を改善する 34

35.

カスタマイズ:行列演算命令の追加 ◼ 既存の行列演算器と命令: ◇ NVIDIA GPU Tensor Core ◇ AMD GPU Matrix Arithmetic Instructions (MAI) ◇ IBM POWER Matrix-Multiply Assist (MMA) ◼ 密行列積や行列ベクトル積はこの手のやつを追加 ◇ ベースの SIMT と親和性がある ◇ アレイ型に近い効率が出せる 35

36.

カスタマイズ:その他 ◼ その他の構成のカスタマイズ ◇ 専用命令の追加 ◇ メモリ構成 ◇ レーン数 36

37.

まとめ ◼ AS-SIMT:RISC-V ベースのカスタマイズ可能な SIMT ◇ 開発コストの削減 ☐ フレームワークからの派生 ☐ ハードウェア設計の簡素化やソフトウェアスタックの流用 ◇ 電力効率の向上 ☐ 領域ごとにカスタマイズ ◼ CPU や GPU より十分に効率が良く,かつ柔軟性と低コストを兼ね備えた部 分を狙う 37

39.

バックアップ 39

40.

自動運転(というか Autoware)の処理 1. Sensing ◇ センサー出力の前処理(フォーマット変換やノイズ除去など) 2. Perception ◇ 現在の障害物の検知と将来の予測 3. Localization ◇ LiDAR (レーザー照射による距離測定器)出力の点群と 地図データのマッチングによる自己位置の計算 4. Planning ◇ 上記を元に自分の動きをきめる 40

41.

議論の前提 1. 大量のデータに(ほぼ)同じ処理を施す ◇ 単純な行列演算や画像処理ほどには簡単ではない 2. (メモリ階層のことは今回はとりあえず忘れる ◇ 演算を行う部分とは直交しているものとして考える ◼ その上で,電力効率を高めるためにはどうすればよいかを考える ◇ 基本的には,同じ処理量あたりの回路資源量を小さくすればよい 41

42.

Autoware の実行の様子 Perception (LiDAR) Locilazation Camera Data Processing Localization LiDAR Data Preprocessing LiDAR Data Preprocessing Planning/Control Planning/Control Perception (Camera) ◼ 通常の CPU で実行した場合の様子 ◇ だいたいデータ並列性の高い処理 42

43.

4入力LUT vs. NAND 同じ回路を LUT で実現するのはものすごく効率が悪い LUT:(5+2)*4+4*3=40 NAND:4 (LUT は実際はもっと色々な機能がついて いるため大きい 43

44.

GPU では制御部自体を簡素化 ◼ CPU ◇ 単一のスレッドの実行時間を短くすることに特化 ◇ 各種投機実行や,動的命令スケジューリングに回路資源を投入 加算器 ROB 乗算器 RMT 発行 キュー LSQ 分岐 予測 依存 予測 ... ◼ GPU ◇ 大量のスレッドの実行スループットを上げることに特化 ◇ 演算器以外の部分をそぎ落とし,なるべく大量の演算器を積む 加算器 加算器 加算器 加算器 加算器 加算器 加算器 乗算器 乗算器 乗算器 乗算器 乗算器 乗算器 乗算器 ... 44