Movatterモバイル変換


[0]ホーム

URL:


PPTX, PDF2,163 views

CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編

2022年1月28日開催の「CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編」セミナー資料です。

Embed presentation

Downloaded 77 times
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars GroupCPU / GPU 高速化セミナー性能モデルの理論と実践:理論編
Fixstars Group www.fixstars.comCopyright © Fixstars Group本ウェビナーは 2部構成2• 理論編(本日)• 実践編(近日開催予定!)
Fixstars Group www.fixstars.comCopyright © Fixstars Group発表者紹介3• 冨田 明彦(とみた あきひこ)ソリューションカンパニー営業企画執行役2008年に入社。金融、医療業界において、ソフトウェア高速化業務に携わる。その後、新規事業企画、半導体業界の事業を担当し、現職。• 秋山 茂樹(あきやま しげき)ソリューション第一事業部リードエンジニア2016年に入社。主に画像処理・機械学習ソフトウェアについて x86-64 CPU やNVIDIA/AMD GPU, InfiniBand を用いた高速化業務を担当。
Fixstars Group www.fixstars.comCopyright © Fixstars Group本日のAgendaはじめに (15分)• 性能に関する課題• 高速化サービスと開発の流れ性能モデルの理論と検証 (60分)• 性能モデルが必要となる背景• 性能モデルとは• ルーフラインモデル• ベンチマークによるルーフラインモデルの検証Q&A / 告知4
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Groupはじめに
Fixstars Group www.fixstars.comCopyright © Fixstars Group性能に関する課題6生産効率の向上• より短時間で欠陥検出• より安価なハードで安全性の向上• より精度の高い物体検出• より低消費電力なハードで
Fixstars Group www.fixstars.comCopyright © Fixstars Groupソフトウェア高速化サービス (概要)お客様のソースコードをご提供いただき、最適化やアルゴリズムの改良を施して高速化してお返しします当社 お客様オリジナルソースコードのご提供高速化したソースコードコンサルティング 高速化 サポート要件分析先行研究等の調査アルゴリズムの改良・開発ハードウェアへの最適化実製品への組込み支援レポートやコードへのQ&A7
Fixstars Group www.fixstars.comCopyright © Fixstars Groupソフトウェア高速化サービス様々な領域でソフトウェア高速化サービスを提供しています大量データの高速処理は、お客様の製品競争力の源泉となっています・NAND型フラッシュメモリ向けファームウェア開発・次世代AIチップ向け開発環境基盤開発Semiconductor・デリバティブシステムの高速化・HFT(アルゴリズムトレード)の高速化Finance・自動運転の高性能化、実用化・次世代パーソナルモビリティの研究開発Mobility・ゲノム解析の高速化・医用画像処理の高速化・AI画像診断システムの研究開発Life Science・Smart Factory化支援・マシンビジョンシステムの高速化Industrial8
Fixstars Group www.fixstars.comCopyright © Fixstars Group9要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 課題のヒアリング• ユースケース洗い出し• 時間、ハードウェア等への制約条件抽出
Fixstars Group www.fixstars.comCopyright © Fixstars Group10要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 論文等サーベイ• アルゴリズム候補の絞り込み• アルゴリズムの比較と評価• アルゴリズムの決定と実装
Fixstars Group www.fixstars.comCopyright © Fixstars Group11要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 対象ハードウェアへの移植 / 評価• 計算量 / 精度面からの改善案検討• 改善案の実装
Fixstars Group www.fixstars.comCopyright © Fixstars Group12要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• データ並列プログラミング• 専用アクセラレータ / 演算器の活用• 処理時間の計測 / 評価
Fixstars Group www.fixstars.comCopyright © Fixstars Group13要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 異常系処理の実装• 静的解析ツールによる評価• テストケース検討 / 実施• カバレッジ向上
Fixstars Group www.fixstars.comCopyright © Fixstars Group本ウェビナーの対象プロセス14ココ要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保
Fixstars Group www.fixstars.comCopyright © Fixstars Group• 社内大学• プログラミングコンテスト• 勉強会• 各種コンテストへの参加• 勉強会• 論文・学会発表• 社内向け• 社外向けよりよいサービスのご提供を目指して15• 組込み開発• アルゴリズム開発• AI・深層学習• 組合せ最適化各種高速化サービス 技術力強化
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Group性能モデルの理論と検証
Fixstars Group www.fixstars.comCopyright © Fixstars Group今回の話題• CPU/GPU 高速化にあたって重要な「性能モデル」について紹介• 場当たり的な高速化ではなく理論的な分析を通した高速化のための枠組み• 「性能モデル」を用いると...• プログラムの性能の上限を見積ることができる• 高速化余地がどれくらいあるかわかる• 高速なシステムの設計に役立つ• 性能ボトルネックが何かあらかじめわかる17
Fixstars Group www.fixstars.comCopyright © Fixstars Group目次• 性能モデルが必要となる背景• 性能モデルとは• ルーフラインモデル• ベンチマークによるルーフラインモデルの検証18
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Group性能モデルが必要となる背景
Fixstars Group www.fixstars.comCopyright © Fixstars Group典型的な高速化の流れ1. 性能分析• プロファイラを用いて以下を調査する• どの関数で時間がかかっているか• 関数のどの部分で時間がかかっているか• なぜ時間がかかっているか2. 各種高速化テクニックを適用• アルゴリズム変更• 命令レベルの改善 (命令数削減, 近似命令の活用, SIMD化, etc.)• メモリアクセスの改善 (キャッシュの活用, アクセスパターン改善, etc.)• etc.3. 以上を繰り返す20
Fixstars Group www.fixstars.comCopyright © Fixstars Group典型的な高速化の問題点• 反復的な作業であるため、ゴールが見えない• 作業を始めるにあたって以下を明らかにしたい• 目標• 高速化余地がどの程度あるか• 作業内容• どういった高速化手法を適用すべきか、どの程度有効か• 工数• 高速化作業にどの程度時間がかかるか• これらの疑問に答えるために性能モデルを活用できる特に受託開発ではこれらをうまく説明できることが顧客満足につながる21
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Group性能モデルとは
Fixstars Group www.fixstars.comCopyright © Fixstars Group性能モデルとは• 性能モデル• 対象とするコンピュータを簡略化してプログラムの性能 (実行時間等) を定式化したもの• 目的• あるプログラムがどの程度の性能を達成しうるか、どのようにすればそれを達成できるかについて知見を得る• 厳密な性能予測を目的としたものではない23
Fixstars Group www.fixstars.comCopyright © Fixstars Group性能モデルの原始的な例 (1/3)• シンプルな性能モデル• 命令の種類ごとに実行回数を数えて重み付け• 命令数• 浮動小数点演算: 2N• メモリアクセス数: 3N• 実行時間: T = F * 2N + M * 3N• F: 浮動小数点演算1命令あたり実行時間• M: メモリアクセス1命令あたり実行時間void SAXPY(int N, float a, const float *x, float *y) {for (int i = 0; i < N; ++i)y[i] = a * x[i] + y[i];}F, M は理論演算性能,メモリ帯域から計算24
Fixstars Group www.fixstars.comCopyright © Fixstars Group性能モデルの原始的な例 (2/3)• N = 109 として計算してみる• プロセッサ: Core i7-4790• クロック周波数: 3.6GHz• メモリ帯域: 25.6GB/s• 1コア1スレッドのみ使用• 浮動小数点命令1回あたり実行時間• F = 1 / (3.6*1e9) [sec]• メモリアクセス命令1回あたり実行時間• M = 1 / (25.6*1e9 / 4) [sec]• プログラムの実行時間• T = 2FN + 3MN = 1.02 [sec]• 実測した結果: 0.81 sec25
Fixstars Group www.fixstars.comCopyright © Fixstars Group性能モデルの原始的な例 (3/3)• 当然ながら、性能モデルによる予測と実測が合わない• 実行モデルと現実のプロセッサが乖離しているため• 性能モデルにより完璧に性能を予測できるわけではない• コンピュータのもつ多数の性質をモデル化するのは困難• 「知見を得る」という目的に応じて考慮する性質を選択する26
Fixstars Group www.fixstars.comCopyright © Fixstars Groupよく知られている性能モデル (のようなもの)• Computational complexity• アルゴリズムのリソース使用量 (演算量, メモリ使用量等) を解析• キャッシュミス回数に対する cache complexity などもある• アムダールの法則• プログラムの並列化効率を「並列化可能な処理の割合」から定式化• DAG Execution Model• タスク並列プログラムにおける並列化効率の定式化• ルーフラインモデル• プロセッサの演算性能・メモリ帯域およびプログラムの演算数・メモリアクセス量を用いて得られる演算性能を定式化27
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Groupルーフラインモデル
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデル*1• 概要• プログラムが達成可能な演算性能 [FLOPS] を見積もるための性能モデル• 考慮する要素• プログラムにおける演算量・メモリアクセス量• プロセッサの理論演算性能・メモリ帯域• 実行モデル29プロセッサメモリ浮動小数点演算性能:π [GFLOPS]メモリ帯域: β [GB/sec]*1: Samuel Williams, Andrew Waterman, and David Patterson.Roofline: an insightful visual performance model for multicore architectures.Commun. ACM 52, 4 (April 2009)キャッシュは考慮しない
Fixstars Group www.fixstars.comCopyright © Fixstars Group補足1: プロセッサの演算性能とは• 1秒間に実行可能な浮動小数点演算数*1• 単位: FLOPS (FLoating point number Operations per Seconds)• 例: Intel Core i7-4790• クロック周波数: 3.6 GHz*2 (= clock/sec)• 1クロックあたり実行可能な浮動小数点演算数 (単精度の場合)• CPUコア数: 4• CPUコアあたりSIMD演算器数: 2• SIMDレーン数: 8 (AVX)• SIMDレーンあたり演算数: 2 (Fused Multiply-Add 命令)• 3.6 * 4 * 2 * 8 * 2 = 460.8 [GFLOPS]30*1: 整数演算が重要な場合は整数演算数で考える*2: 動的周波数制御 (Intel Turbo Boost 等) も考慮する必要がある
Fixstars Group www.fixstars.comCopyright © Fixstars Group補足2: メモリ帯域とは• 1秒間に読み書き可能なメモリアクセス量• 単位: Byte/sec• 例: Intel Core i7-4790• メモリ規格: DDR3-1600 (12.8 GB/s)• 最大メモリチャネル数: 2• 積をとると 25.6 GB/s• あくまでスペック値なので実測した方がよい31
Fixstars Group www.fixstars.comCopyright © Fixstars Group演算強度と達成可能な性能• 演算強度 (Operational Intensity, Arithmetic Intensity)• アプリにおける演算量とメモリアクセス量の比• 達成可能な性能 (Attainable Performance)• 理論的に達成可能な性能の上限演算強度 𝐼 [Flop/Byte] =演算量 𝑊 [Flop]メモリアクセス量 𝑄 [Byte]達成可能な性能 𝑃 [FLOPS] = min理論演算性能 𝜋 [FLOPS]メモリ帯域 𝛽[Byte/sec] × 演算強度 𝐼 [Flop/Byte]プロセッサに対して独立な指標32アプリの演算量・メモリアクセス量,プロセッサの演算性能・メモリ帯域から計算
Fixstars Group www.fixstars.comCopyright © Fixstars Group達成可能な性能の導出• 演算律速の場合:性能 𝑃 = 𝜋 [FLOPS]• メモリ律速の場合:• メモリアクセスにかかる時間はメモリアクセス量 𝑄メモリ帯域 𝛽[sec]• 実行時間 = データ転送時間 なので性能 𝑃 =演算量 𝑊データ転送時間 𝑄𝛽= 𝛽 × 𝐼 [FLOPS]33プロセッサメモリプロセッサメモリ常に演算が行われメモリアクセスは断続的常にメモリアクセスが行われ演算は断続的時間処理開始 処理終了時間処理開始 処理終了
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデルが成立する前提条件1. 演算とデータ転送が常に並行して行われる (or どちらかが支配的である)• 対象プログラムがそのように実装されている必要がある• Out-of-Order プロセッサなら意識しなくてもある程度満たしている2. メモリ階層が単一である• キャッシュがある場合は以下を考慮して拡張する必要がある• メモリ – キャッシュ間データ転送帯域• キャッシュ – レジスタ間データ転送帯域• 演算性能34
Fixstars Group www.fixstars.comCopyright © Fixstars Group例: ナイーブな行列積の性能見積り (1/2)• 問題: 以下の行列積コードの得られる性能の上限は?• プロセッサの性能• 浮動小数点演算性能: 4000 GFLOPS• メモリ帯域: 200 GB/sec• M = N = K = 1000, キャッシュは考慮しないものとする36float A[M * K], B[K * N], C[M * N];for (int i = 0; i < M; ++i) {for (int j = 0; j < N; ++j) {float value = 0.0f;for (int k = 0; k < K; ++k)value += A[i * K + k] * B[k * N + j];C[i * N + j] = value;}}
Fixstars Group www.fixstars.comCopyright © Fixstars Group例: ナイーブな行列積の性能見積り (2/2)• 答え• 演算量 W = 2MNK = 2*10^9 [flop]• メモリアクセス量 Q = 8MNK + 4MN = 8*10^9 + 4*10^6 [byte]• 演算強度 I = W / Q ≈ 0.25 [flop/byte]• 達成可能な性能 P ≈ min(4000, 200 * 0.25) = 50 [GFLOPS]37どれだけ命令レベル高速化を頑張っても理論演算性能比 1.25% の性能しか得られない*2→ データ局所性を活用して演算強度を上げる必要がある (実践編へ)知見: ナイーブな行列積はメモリ律速*1*1 プロセッサの演算性能を 4000 GFLOPS, メモリ帯域を 200 GB/s とした場合*2 実際にはキャッシュ等の影響でこれ以上の性能となりうる
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデルの可視化• 演算強度を変化させたときの達成可能な性能をプロット• 例: Opteron X2 (17.6 GFLOPS, 15 GB/s)38アプリの演算強度達成可能な性能Opteron X2 のルーフラインプロセッサのピーク演算性能メモリ律速 演算律速出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデルの可視化• 複数のプロセッサをプロット• 例: Opteron X2 (17.6 GFLOPS, 15 GB/s),Opteron X4 (73.6 GFLOPS, 15 GB/s)39ありがちな誤謬:あるプロセッサでメモリ律速のアプリは別のプロセッサでもメモリ律速であるX2でメモリ律速X4 でメモリ律速演算強度が 1 以上のアプリで初めて X4 の方が高速X2で演算律速,X4でメモリ律速Opteron X4Opteron X2出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
Fixstars Group www.fixstars.comCopyright © Fixstars GroupComputational Ceilings• ここまで考えてきた演算性能はピーク演算性能• 実際には命令の並び次第で上限が決まる40出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)Fused Multiply-Add 命令を使用しない場合の性能上限SIMD命令不使用の場合の性能上限
Fixstars Group www.fixstars.comCopyright © Fixstars GroupBandwidth Ceilings• メモリ帯域についても同様• 連続アクセス, Memory affininty, Prefetch, etc.41出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)プリフェッチを使用しない場合の性能上限Memory affinity を考慮しない場合の性能上限
Fixstars Group www.fixstars.comCopyright © Fixstars GroupOptimization Regions• Computational ceilings と Bandwidth ceilings を組み合わせると演算強度ごとに、どの種の高速化技法が必要か判断できる黄色: メモリ周りの高速化が必要な領域緑色: 命令・メモリ両方の高速化が必要な領域青色: 命令レベルの高速化が必要な領域Kernel1 は命令・メモリの高速化の両方が必要Kernel2 は命令レベル高速化のみでよい42出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデルの可視化 活用例• 深層学習ベンチマーク (MLperf, DAWNBench, DeepBench) の性能分析• ベンチマークプログラムが演算 or メモリ律速か,どれくらいチューニングされているか43出典:Snehil Verma, et al.Demystifying the MLPerf Benchmark Suite.https://arxiv.org/abs/1908.09207すべてのアプリが V100 SP 上でメモリ律速,MLperf はおおむね効率が良い,Deep_Conv_Cu は効率が悪い
Fixstars Group www.fixstars.comCopyright © Fixstars Groupピーク性能を達成するためには• 命令レベルの高速化• SIMD, FMA 命令の活用• 命令レベル並列性 (ILP) の改善• パイプラインハザードを減らす (命令レイテンシ隠蔽, 分岐予測改善, etc.)• スーパースカラ (複数の実行ユニット) を活用する• スレッドレベル並列性 (TLP) の改善• 演算器を使い切れるだけの並列性を供給する• 浮動小数点命令の割合を増やす (FP命令とそれ以外の命令が同じ演算器で実行される場合)• メモリアクセスの高速化• 適切な粒度, 量, alignment でメモリアクセス• メモリアクセスレイテンシの隠蔽 (w/ ILP, TLP, Prefetch)• プロセッサ・メモリトポロジの考慮• 演算強度の向上• レジスタ, キャッシュ等のメモリ階層を活用• その他 (ルーフラインモデルの範疇外)• 負荷分散の改善, 同期の削減, etc.44
Fixstars Group www.fixstars.comCopyright © Fixstars Groupなぜルーフラインモデルが重要か• プログラムの性能を (ある程度) 見積もることができる• 高速化余地がどれくらいあるか• どのリソースがボトルネックか• 別のプロセッサに移植した場合にどの程度の性能となるか(→ 機種選定に役立つ)• 高速なソフトウェアの設計に役立つ• アルゴリズム選定, cache-aware algorithms で必要なキャッシュサイズ• 数ある高速化手法のうち、不要なものを事前に枝刈りできる• 試行錯誤を減らせるかも45
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Groupベンチマークによるルーフラインモデルの検証
Fixstars Group www.fixstars.comCopyright © Fixstars Groupルーフラインモデルの検証• ルーフラインモデルがどの程度正確かベンチマークプログラムを用いて検証する• 演算性能の計測• メモリ帯域の計測• 演算・メモリ複合実行性能の計測• 実験環境• x86-64 CPU• Intel Core i7-3770 3.40GHz (IvyBridge), Ubuntu 18.04• Intel Core i7-4790 3.60GHz (Haswell), WSL1• Intel Core i7-6500U 2.50GHz (Skylake), WSL1• AMD Ryzen 7 3700X 3.60GHz (Zen 2), Ubuntu 18.0447
Fixstars Group www.fixstars.comCopyright © Fixstars Group演算性能の計測• ベンチマーク内容• 1命令あたり8加算可能な vaddps 命令を大量に実行し1秒あたりの演算回数 [FLOPS] を計測する*1• 1コアのみ使用48__m256 vx = ..., vy = ...;auto vz0 = vx, vz1 = vx, vz2 = vx, vz3 = vx;auto vz4 = vx, vz5 = vx, vz6 = vx, vz7 = vx;for (size_t i = 0; i < n_times; ++i) {vz0 = _mm256_add_ps(vz0, vy); vz1 = _mm256_add_ps(vz1, vy);vz2 = _mm256_add_ps(vz2, vy); vz3 = _mm256_add_ps(vz3, vy);vz4 = _mm256_add_ps(vz4, vy); vz5 = _mm256_add_ps(vz5, vy);vz6 = _mm256_add_ps(vz6, vy); vz7 = _mm256_add_ps(vz7, vy);}// Avoid dead-code eliminationauto vz = vz0;vz = _mm256_add_ps(vz, vz1); vz = _mm256_add_ps(vz, vz2);vz = _mm256_add_ps(vz, vz3); vz = _mm256_add_ps(vz, vz4);vz = _mm256_add_ps(vz, vz5); vz = _mm256_add_ps(vz, vz6);vz = _mm256_add_ps(vz, vz7);_mm256_store_ps(tmp, vz);依存関係のない8個の vaddps 命令を繰り返し実行(パイプラインハザードが発生しないようにする)*1: 理論ピーク演算性能を計測する場合、 FMA 命令 (vfmaddps) を使用する必要があるが、今回は vaddps 命令を用いる。
Fixstars Group www.fixstars.comCopyright © Fixstars Group演算性能の計測結果CPU CPU世代ベース / 計測時*1クロック周波数理論演算性能*2 実測演算性能Intel Core i7-3770IvyBridge(VADD port x1)3.4 / 3.9 GHz 31.2 GFLOPS 30.79 GFLOPSIntel Core i7-4790Haswell(VADD port x1)3.6 / 3.6 GHz 28.8 GFLOPS 28.63 GFLOPSIntel Core i7-6500USkylake(VADD port x2)2.5 / 2.7 GHz 43.2 GFLOPS 43.21 GFLOPSAMD Ryzen 7 3700XZen 2(VADD port x2)3.6 / 4.4 GHz 70.4 GFLOPS 69.96 GFLOPS*1: Turbo Boost 有効時の推定値*2: 1コア, 加算のみの場合の理論性能49
Fixstars Group www.fixstars.comCopyright © Fixstars Groupメモリ帯域の計測• ベンチマーク内容• キャッシュに収まらないサイズの配列に対して4つのパターンでメモリアクセスし、スループットを計測する• read only (read:write=1:0), write only (read:write=0:1),copy (read:write=1:1), triad (read:write=2:1)• 1コアのみ使用float *sp0 = src0, *sp1 = src1, *dp = dst, *dst_end = dst + size;while (dp < dst_end) {// triad: dst[i] = alpha * src0[i] + src1[i];auto vx0 = _mm256_load_ps(sp0 + 0 * 8), vx1 = _mm256_load_ps(sp0 + 1 * 8);auto vx2 = _mm256_load_ps(sp0 + 2 * 8), vx3 = _mm256_load_ps(sp0 + 3 * 8);auto vy0 = _mm256_load_ps(sp1 + 0 * 8), vy1 = _mm256_load_ps(sp1 + 1 * 8);auto vy2 = _mm256_load_ps(sp1 + 2 * 8), vy3 = _mm256_load_ps(sp1 + 3 * 8);auto vz0 = _mm256_fmadd_ps(valpha, vx0, vy0);auto vz1 = _mm256_fmadd_ps(valpha, vx1, vy1);auto vz2 = _mm256_fmadd_ps(valpha, vx2, vy2);auto vz3 = _mm256_fmadd_ps(valpha, vx3, vy3);_mm256_store_ps(dp + 0 * 8, vz0); _mm256_store_ps(dp + 1 * 8, vz1);_mm256_store_ps(dp + 2 * 8, vz2); _mm256_store_ps(dp + 3 * 8, vz3);sp0 += 4 * 8, sp1 += 4 * 8, dp += 4 * 8;} 50
Fixstars Group www.fixstars.comCopyright © Fixstars Groupメモリ帯域の計測結果• 1コアのみ使用する場合には最大でも理論値の60%程度に留まる• メモリアクセスパターンによって得られる帯域が異なる• プロセッサアーキテクチャに依存するが今回の対象ではおおむね read only > triad > copy > write onlyCPU CPU世代 メモリ規格理論メモリ帯域 [GB/s]実測メモリ帯域 [GB/s]read / write / copy / triadIntel Core i7-3770 IvyBridge DDR3-1600 x2 25.6 17.3 / 10.4 / 13.3 / 14.3Intel Core i7-4790 Haswell DDR3-1600 x2 25.6 16.3 / 10.3 / 13.4 / 14.1Intel Core i7-6500U Skylake LPDDR3-1866 x2 29.9 15.9 / 11.1 / 14.6 / 16.5AMD Ryzen 7 3700X Zen 2 DDR4-2666 x2 42.6 22.8 / 12.1 / 17.6 / 20.551
Fixstars Group www.fixstars.comCopyright © Fixstars Group演算・メモリ複合実行性能の計測• ベンチマーク内容• 配列の各要素に対してロード・N回加算・ストアを行う• read:write:add=1:1:N• 演算強度: N / ((1 + 1) * sizeof(float)) = N/8• 1コアのみ使用52const auto va = ...;const auto *sp0 = src0, *dp = dst, *dst_end = dst + size;while (dp < dst_end) {// dst[i] = src0[i] + (a + a + ... + a);auto vz0 = _mm256_load_ps(sp0 + 0 * 8), vz1 = _mm256_load_ps(sp0 + 1 * 8);auto vz2 = _mm256_load_ps(sp0 + 2 * 8), vz3 = _mm256_load_ps(sp0 + 3 * 8);auto vz4 = _mm256_load_ps(sp0 + 4 * 8), vz5 = _mm256_load_ps(sp0 + 5 * 8);auto vz6 = _mm256_load_ps(sp0 + 6 * 8), vz7 = _mm256_load_ps(sp0 + 7 * 8);UNROLL for (int i = 0; i < N; ++i) { // N: 演算強度を変化させるためのパラメータvz0 = _mm256_add_ps(vz0, va); vz1 = _mm256_add_ps(vz1, va);vz2 = _mm256_add_ps(vz2, va); vz3 = _mm256_add_ps(vz3, va);vz4 = _mm256_add_ps(vz4, va); vz5 = _mm256_add_ps(vz5, va);vz6 = _mm256_add_ps(vz6, va); vz7 = _mm256_add_ps(vz7, va);}_mm256_store_ps(dp + 0 * 8, vz0); _mm256_store_ps(dp + 1 * 8, vz1);_mm256_store_ps(dp + 2 * 8, vz2); _mm256_store_ps(dp + 3 * 8, vz3);_mm256_store_ps(dp + 4 * 8, vz4); _mm256_store_ps(dp + 5 * 8, vz5);_mm256_store_ps(dp + 6 * 8, vz6); _mm256_store_ps(dp + 7 * 8, vz7);sp0 += 8 * 8, dp += 8 * 8;}
Fixstars Group www.fixstars.comCopyright © Fixstars Group演算・メモリ複合実行性能の計測結果• おおむねルーフラインモデルに近い値が得られている0204060800 2 4 6 8性能[GFLOPS]Core i7-3770 (IvyBridge)Loofline実測値0204060800 2 4 6 8Core i7-4790 (Haswell)Loofline実測値0204060800 2 4 6 8性能[GFLOPS]演算強度Core i7-6500U (Skylake)Loofline実測値0204060800 2 4 6 8演算強度Ryzen 7 3700X (Zen 2)Loofline実測値53
Fixstars Group www.fixstars.comCopyright © Fixstars Groupまとめ• CPU/GPU 高速化において重要な「ルーフラインモデル」について解説• プログラムの性能上限を見積もることができる• どのリソースがボトルネックか判定できる• 色んなプロセッサに移植した場合の性能を推定できる• 有効な高速化手法を選ぶのに役立つ• ベンチマークによる検証を実施• ルーフラインモデルによる理論性能と実性能を比較し、おおむね理論性能に近い結果が得られることを確認54
Fixstars Group www.fixstars.comCopyright © Fixstars Group Copyright © Fixstars Group実践編予告:AMD GPU における行列積の高速化
Fixstars Group www.fixstars.comCopyright © Fixstars Group実践編 予告• AMD GPU における行列積の高速化• ルーフラインモデルを活用した高速化の例を解説• 性能の上限を求める• 最適なレジスタ・キャッシュブロッキングサイズを求める56
Fixstars Group www.fixstars.comCopyright © Fixstars Group高速化結果• 最大 6351 GFLOPS (ピーク性能比 73.8%)• 単純な実装から11倍の高速化を達成02000400060008000100001024 2048 3072 4096 5120 6144 7168 8192性能(GFLOPS)行列サイズ (M=N=K)Peak Performance(1) Naïve(2) Register blocking only(3) (2) + LDS blocking(4) (3) + K loop unrolling(5) (4) + Other optimizations57
Fixstars Group www.fixstars.comCopyright © Fixstars GroupThank Youお問い合わせ窓口 : contact@fixstars.com

Recommended

PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
PPTX
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
PDF
いまさら聞けない!CUDA高速化入門
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
PDF
組み込み関数(intrinsic)によるSIMD入門
PDF
マルチコアを用いた画像処理
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PDF
プログラムを高速化する話
PDF
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
PDF
20分くらいでわかった気分になれるC++20コルーチン
 
PDF
C++ マルチスレッドプログラミング
PPTX
Map
PDF
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
PDF
1076: CUDAデバッグ・プロファイリング入門
PDF
Halide による画像処理プログラミング入門
PDF
Hopper アーキテクチャで、変わること、変わらないこと
PDF
Dockerからcontainerdへの移行
PDF
深層学習によるHuman Pose Estimationの基礎
PDF
なぜGPUはディープラーニングに向いているか
PDF
Pythonによる黒魔術入門
PPTX
本当は恐ろしい分散システムの話
PDF
Intro to SVE 富岳のA64FXを触ってみた
PDF
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
PDF
高速な倍精度指数関数expの実装
PDF
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
PDF
【メタサーベイ】Neural Fields
PDF
ゲーム開発者のための C++11/C++14
PDF
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング

More Related Content

PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
PPTX
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
PDF
いまさら聞けない!CUDA高速化入門
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
PDF
組み込み関数(intrinsic)によるSIMD入門
PDF
マルチコアを用いた画像処理
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
製造業向け量子コンピュータ時代のDXセミナー_生産計画最適化_20220323.pptx
いまさら聞けない!CUDA高速化入門
プログラムを高速化する話Ⅱ 〜GPGPU編〜
いまさら聞けないarmを使ったNEONの基礎と活用事例
組み込み関数(intrinsic)によるSIMD入門
マルチコアを用いた画像処理
ARM CPUにおけるSIMDを用いた高速計算入門

What's hot

PDF
プログラムを高速化する話
PDF
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
PDF
20分くらいでわかった気分になれるC++20コルーチン
 
PDF
C++ マルチスレッドプログラミング
PPTX
Map
PDF
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
PDF
1076: CUDAデバッグ・プロファイリング入門
PDF
Halide による画像処理プログラミング入門
PDF
Hopper アーキテクチャで、変わること、変わらないこと
PDF
Dockerからcontainerdへの移行
PDF
深層学習によるHuman Pose Estimationの基礎
PDF
なぜGPUはディープラーニングに向いているか
PDF
Pythonによる黒魔術入門
PPTX
本当は恐ろしい分散システムの話
PDF
Intro to SVE 富岳のA64FXを触ってみた
PDF
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
PDF
高速な倍精度指数関数expの実装
PDF
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
PDF
【メタサーベイ】Neural Fields
PDF
ゲーム開発者のための C++11/C++14
プログラムを高速化する話
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
20分くらいでわかった気分になれるC++20コルーチン
 
C++ マルチスレッドプログラミング
Map
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
1076: CUDAデバッグ・プロファイリング入門
Halide による画像処理プログラミング入門
Hopper アーキテクチャで、変わること、変わらないこと
Dockerからcontainerdへの移行
深層学習によるHuman Pose Estimationの基礎
なぜGPUはディープラーニングに向いているか
Pythonによる黒魔術入門
本当は恐ろしい分散システムの話
Intro to SVE 富岳のA64FXを触ってみた
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
高速な倍精度指数関数expの実装
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
【メタサーベイ】Neural Fields
ゲーム開発者のための C++11/C++14

Similar to CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編

PDF
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング
PDF
R-hpc-1 TokyoR#11
PPTX
Prelude to Halide
PDF
第64回情報科学談話会(滝沢 寛之 准教授)
PPTX
Java でつくる 低レイテンシ実装の技巧
PDF
性能測定道 事始め編
PDF
アプリケーションの性能最適化2(CPU単体性能最適化)
PPTX
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
PDF
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
PDF
アドテク×Scala×パフォーマンスチューニング
PDF
情報システムの性能マネジメントについて
PDF
第4回 配信講義 計算科学技術特論A (2021)
PDF
研究動向から考えるx86/x64最適化手法
PDF
第5回 配信講義 計算科学技術特論B(2022)
PDF
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
PDF
Ac ri lt_fixstars_20210720
PDF
CMSI計算科学技術特論A(9) 高速化チューニングとその関連技術2
PDF
プロファイラGuiを用いたコード分析 20160610
PDF
Tuning, etc.
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
計算機アーキテクチャを考慮した高能率画像処理プログラミング
R-hpc-1 TokyoR#11
Prelude to Halide
第64回情報科学談話会(滝沢 寛之 准教授)
Java でつくる 低レイテンシ実装の技巧
性能測定道 事始め編
アプリケーションの性能最適化2(CPU単体性能最適化)
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
アドテク×Scala×パフォーマンスチューニング
情報システムの性能マネジメントについて
第4回 配信講義 計算科学技術特論A (2021)
研究動向から考えるx86/x64最適化手法
第5回 配信講義 計算科学技術特論B(2022)
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
Ac ri lt_fixstars_20210720
CMSI計算科学技術特論A(9) 高速化チューニングとその関連技術2
プロファイラGuiを用いたコード分析 20160610
Tuning, etc.

More from Fixstars Corporation

PDF
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
PPTX
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
PDF
株式会社フィックスターズの会社説明資料(抜粋)
PDF
Fpga online seminar by fixstars (1st)
PDF
Jetson活用セミナー ROS2自律走行実現に向けて
PDF
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PDF
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
PDF
株式会社フィックスターズ 会社説明資料(抜粋)
PPTX
第8回 社内プログラミングコンテスト 結果発表会
PPTX
第8回 社内プログラミングコンテスト 第1位 taiyo
PPTX
第8回 社内プログラミングコンテスト 第2位 fy999
PPTX
第8回 社内プログラミングコンテスト 第3位 logicmachine
PPTX
株式会社フィックスターズ 会社説明資料(抜粋)
PPTX
A challenge for thread parallelism on OpenFOAM
PDF
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
PDF
自動運転におけるCNNの信頼性
PDF
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
PPTX
NVMCT #1 ~今さら聞けないSSDの基本~
製造業向け量子コンピュータ時代のDXセミナー~ 最適化の中身を覗いてみよう~
製造業向け量子コンピュータ時代のDXセミナー ~見える化、分析、予測、その先の最適化へ~
株式会社フィックスターズの会社説明資料(抜粋)
Fpga online seminar by fixstars (1st)
Jetson活用セミナー ROS2自律走行実現に向けて
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
株式会社フィックスターズ 会社説明資料(抜粋)
第8回 社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第2位 fy999
第8回 社内プログラミングコンテスト 第3位 logicmachine
株式会社フィックスターズ 会社説明資料(抜粋)
A challenge for thread parallelism on OpenFOAM
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
自動運転におけるCNNの信頼性
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
NVMCT #1 ~今さら聞けないSSDの基本~

CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編

  • 1.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars GroupCPU / GPU 高速化セミナー性能モデルの理論と実践:理論編
  • 2.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group本ウェビナーは 2部構成2• 理論編(本日)• 実践編(近日開催予定!)
  • 3.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group発表者紹介3• 冨田 明彦(とみた あきひこ)ソリューションカンパニー営業企画執行役2008年に入社。金融、医療業界において、ソフトウェア高速化業務に携わる。その後、新規事業企画、半導体業界の事業を担当し、現職。• 秋山 茂樹(あきやま しげき)ソリューション第一事業部リードエンジニア2016年に入社。主に画像処理・機械学習ソフトウェアについて x86-64 CPU やNVIDIA/AMD GPU, InfiniBand を用いた高速化業務を担当。
  • 4.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group本日のAgendaはじめに (15分)• 性能に関する課題• 高速化サービスと開発の流れ性能モデルの理論と検証 (60分)• 性能モデルが必要となる背景• 性能モデルとは• ルーフラインモデル• ベンチマークによるルーフラインモデルの検証Q&A / 告知4
  • 5.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Groupはじめに
  • 6.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group性能に関する課題6生産効率の向上• より短時間で欠陥検出• より安価なハードで安全性の向上• より精度の高い物体検出• より低消費電力なハードで
  • 7.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupソフトウェア高速化サービス (概要)お客様のソースコードをご提供いただき、最適化やアルゴリズムの改良を施して高速化してお返しします当社 お客様オリジナルソースコードのご提供高速化したソースコードコンサルティング 高速化 サポート要件分析先行研究等の調査アルゴリズムの改良・開発ハードウェアへの最適化実製品への組込み支援レポートやコードへのQ&A7
  • 8.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupソフトウェア高速化サービス様々な領域でソフトウェア高速化サービスを提供しています大量データの高速処理は、お客様の製品競争力の源泉となっています・NAND型フラッシュメモリ向けファームウェア開発・次世代AIチップ向け開発環境基盤開発Semiconductor・デリバティブシステムの高速化・HFT(アルゴリズムトレード)の高速化Finance・自動運転の高性能化、実用化・次世代パーソナルモビリティの研究開発Mobility・ゲノム解析の高速化・医用画像処理の高速化・AI画像診断システムの研究開発Life Science・Smart Factory化支援・マシンビジョンシステムの高速化Industrial8
  • 9.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group9要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 課題のヒアリング• ユースケース洗い出し• 時間、ハードウェア等への制約条件抽出
  • 10.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group10要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 論文等サーベイ• アルゴリズム候補の絞り込み• アルゴリズムの比較と評価• アルゴリズムの決定と実装
  • 11.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group11要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 対象ハードウェアへの移植 / 評価• 計算量 / 精度面からの改善案検討• 改善案の実装
  • 12.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group12要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• データ並列プログラミング• 専用アクセラレータ / 演算器の活用• 処理時間の計測 / 評価
  • 13.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group13要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保典型的な開発の流れ• 異常系処理の実装• 静的解析ツールによる評価• テストケース検討 / 実施• カバレッジ向上
  • 14.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group本ウェビナーの対象プロセス14ココ要件分析研究調査・アルゴリズム実装高速化 / 評価アルゴリズム改善 / 評価品質確保
  • 15.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group• 社内大学• プログラミングコンテスト• 勉強会• 各種コンテストへの参加• 勉強会• 論文・学会発表• 社内向け• 社外向けよりよいサービスのご提供を目指して15• 組込み開発• アルゴリズム開発• AI・深層学習• 組合せ最適化各種高速化サービス 技術力強化
  • 16.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Group性能モデルの理論と検証
  • 17.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group今回の話題• CPU/GPU 高速化にあたって重要な「性能モデル」について紹介• 場当たり的な高速化ではなく理論的な分析を通した高速化のための枠組み• 「性能モデル」を用いると...• プログラムの性能の上限を見積ることができる• 高速化余地がどれくらいあるかわかる• 高速なシステムの設計に役立つ• 性能ボトルネックが何かあらかじめわかる17
  • 18.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group目次• 性能モデルが必要となる背景• 性能モデルとは• ルーフラインモデル• ベンチマークによるルーフラインモデルの検証18
  • 19.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Group性能モデルが必要となる背景
  • 20.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group典型的な高速化の流れ1. 性能分析• プロファイラを用いて以下を調査する• どの関数で時間がかかっているか• 関数のどの部分で時間がかかっているか• なぜ時間がかかっているか2. 各種高速化テクニックを適用• アルゴリズム変更• 命令レベルの改善 (命令数削減, 近似命令の活用, SIMD化, etc.)• メモリアクセスの改善 (キャッシュの活用, アクセスパターン改善, etc.)• etc.3. 以上を繰り返す20
  • 21.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group典型的な高速化の問題点• 反復的な作業であるため、ゴールが見えない• 作業を始めるにあたって以下を明らかにしたい• 目標• 高速化余地がどの程度あるか• 作業内容• どういった高速化手法を適用すべきか、どの程度有効か• 工数• 高速化作業にどの程度時間がかかるか• これらの疑問に答えるために性能モデルを活用できる特に受託開発ではこれらをうまく説明できることが顧客満足につながる21
  • 22.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Group性能モデルとは
  • 23.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group性能モデルとは• 性能モデル• 対象とするコンピュータを簡略化してプログラムの性能 (実行時間等) を定式化したもの• 目的• あるプログラムがどの程度の性能を達成しうるか、どのようにすればそれを達成できるかについて知見を得る• 厳密な性能予測を目的としたものではない23
  • 24.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group性能モデルの原始的な例 (1/3)• シンプルな性能モデル• 命令の種類ごとに実行回数を数えて重み付け• 命令数• 浮動小数点演算: 2N• メモリアクセス数: 3N• 実行時間: T = F * 2N + M * 3N• F: 浮動小数点演算1命令あたり実行時間• M: メモリアクセス1命令あたり実行時間void SAXPY(int N, float a, const float *x, float *y) {for (int i = 0; i < N; ++i)y[i] = a * x[i] + y[i];}F, M は理論演算性能,メモリ帯域から計算24
  • 25.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group性能モデルの原始的な例 (2/3)• N = 109 として計算してみる• プロセッサ: Core i7-4790• クロック周波数: 3.6GHz• メモリ帯域: 25.6GB/s• 1コア1スレッドのみ使用• 浮動小数点命令1回あたり実行時間• F = 1 / (3.6*1e9) [sec]• メモリアクセス命令1回あたり実行時間• M = 1 / (25.6*1e9 / 4) [sec]• プログラムの実行時間• T = 2FN + 3MN = 1.02 [sec]• 実測した結果: 0.81 sec25
  • 26.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group性能モデルの原始的な例 (3/3)• 当然ながら、性能モデルによる予測と実測が合わない• 実行モデルと現実のプロセッサが乖離しているため• 性能モデルにより完璧に性能を予測できるわけではない• コンピュータのもつ多数の性質をモデル化するのは困難• 「知見を得る」という目的に応じて考慮する性質を選択する26
  • 27.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupよく知られている性能モデル (のようなもの)• Computational complexity• アルゴリズムのリソース使用量 (演算量, メモリ使用量等) を解析• キャッシュミス回数に対する cache complexity などもある• アムダールの法則• プログラムの並列化効率を「並列化可能な処理の割合」から定式化• DAG Execution Model• タスク並列プログラムにおける並列化効率の定式化• ルーフラインモデル• プロセッサの演算性能・メモリ帯域およびプログラムの演算数・メモリアクセス量を用いて得られる演算性能を定式化27
  • 28.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Groupルーフラインモデル
  • 29.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデル*1• 概要• プログラムが達成可能な演算性能 [FLOPS] を見積もるための性能モデル• 考慮する要素• プログラムにおける演算量・メモリアクセス量• プロセッサの理論演算性能・メモリ帯域• 実行モデル29プロセッサメモリ浮動小数点演算性能:π [GFLOPS]メモリ帯域: β [GB/sec]*1: Samuel Williams, Andrew Waterman, and David Patterson.Roofline: an insightful visual performance model for multicore architectures.Commun. ACM 52, 4 (April 2009)キャッシュは考慮しない
  • 30.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group補足1: プロセッサの演算性能とは• 1秒間に実行可能な浮動小数点演算数*1• 単位: FLOPS (FLoating point number Operations per Seconds)• 例: Intel Core i7-4790• クロック周波数: 3.6 GHz*2 (= clock/sec)• 1クロックあたり実行可能な浮動小数点演算数 (単精度の場合)• CPUコア数: 4• CPUコアあたりSIMD演算器数: 2• SIMDレーン数: 8 (AVX)• SIMDレーンあたり演算数: 2 (Fused Multiply-Add 命令)• 3.6 * 4 * 2 * 8 * 2 = 460.8 [GFLOPS]30*1: 整数演算が重要な場合は整数演算数で考える*2: 動的周波数制御 (Intel Turbo Boost 等) も考慮する必要がある
  • 31.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group補足2: メモリ帯域とは• 1秒間に読み書き可能なメモリアクセス量• 単位: Byte/sec• 例: Intel Core i7-4790• メモリ規格: DDR3-1600 (12.8 GB/s)• 最大メモリチャネル数: 2• 積をとると 25.6 GB/s• あくまでスペック値なので実測した方がよい31
  • 32.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group演算強度と達成可能な性能• 演算強度 (Operational Intensity, Arithmetic Intensity)• アプリにおける演算量とメモリアクセス量の比• 達成可能な性能 (Attainable Performance)• 理論的に達成可能な性能の上限演算強度 𝐼 [Flop/Byte] =演算量 𝑊 [Flop]メモリアクセス量 𝑄 [Byte]達成可能な性能 𝑃 [FLOPS] = min理論演算性能 𝜋 [FLOPS]メモリ帯域 𝛽[Byte/sec] × 演算強度 𝐼 [Flop/Byte]プロセッサに対して独立な指標32アプリの演算量・メモリアクセス量,プロセッサの演算性能・メモリ帯域から計算
  • 33.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group達成可能な性能の導出• 演算律速の場合:性能 𝑃 = 𝜋 [FLOPS]• メモリ律速の場合:• メモリアクセスにかかる時間はメモリアクセス量 𝑄メモリ帯域 𝛽[sec]• 実行時間 = データ転送時間 なので性能 𝑃 =演算量 𝑊データ転送時間 𝑄𝛽= 𝛽 × 𝐼 [FLOPS]33プロセッサメモリプロセッサメモリ常に演算が行われメモリアクセスは断続的常にメモリアクセスが行われ演算は断続的時間処理開始 処理終了時間処理開始 処理終了
  • 34.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデルが成立する前提条件1. 演算とデータ転送が常に並行して行われる (or どちらかが支配的である)• 対象プログラムがそのように実装されている必要がある• Out-of-Order プロセッサなら意識しなくてもある程度満たしている2. メモリ階層が単一である• キャッシュがある場合は以下を考慮して拡張する必要がある• メモリ – キャッシュ間データ転送帯域• キャッシュ – レジスタ間データ転送帯域• 演算性能34
  • 35.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group例: ナイーブな行列積の性能見積り (1/2)• 問題: 以下の行列積コードの得られる性能の上限は?• プロセッサの性能• 浮動小数点演算性能: 4000 GFLOPS• メモリ帯域: 200 GB/sec• M = N = K = 1000, キャッシュは考慮しないものとする36float A[M * K], B[K * N], C[M * N];for (int i = 0; i < M; ++i) {for (int j = 0; j < N; ++j) {float value = 0.0f;for (int k = 0; k < K; ++k)value += A[i * K + k] * B[k * N + j];C[i * N + j] = value;}}
  • 36.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group例: ナイーブな行列積の性能見積り (2/2)• 答え• 演算量 W = 2MNK = 2*10^9 [flop]• メモリアクセス量 Q = 8MNK + 4MN = 8*10^9 + 4*10^6 [byte]• 演算強度 I = W / Q ≈ 0.25 [flop/byte]• 達成可能な性能 P ≈ min(4000, 200 * 0.25) = 50 [GFLOPS]37どれだけ命令レベル高速化を頑張っても理論演算性能比 1.25% の性能しか得られない*2→ データ局所性を活用して演算強度を上げる必要がある (実践編へ)知見: ナイーブな行列積はメモリ律速*1*1 プロセッサの演算性能を 4000 GFLOPS, メモリ帯域を 200 GB/s とした場合*2 実際にはキャッシュ等の影響でこれ以上の性能となりうる
  • 37.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデルの可視化• 演算強度を変化させたときの達成可能な性能をプロット• 例: Opteron X2 (17.6 GFLOPS, 15 GB/s)38アプリの演算強度達成可能な性能Opteron X2 のルーフラインプロセッサのピーク演算性能メモリ律速 演算律速出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
  • 38.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデルの可視化• 複数のプロセッサをプロット• 例: Opteron X2 (17.6 GFLOPS, 15 GB/s),Opteron X4 (73.6 GFLOPS, 15 GB/s)39ありがちな誤謬:あるプロセッサでメモリ律速のアプリは別のプロセッサでもメモリ律速であるX2でメモリ律速X4 でメモリ律速演算強度が 1 以上のアプリで初めて X4 の方が高速X2で演算律速,X4でメモリ律速Opteron X4Opteron X2出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
  • 39.
    Fixstars Group www.fixstars.comCopyright© Fixstars GroupComputational Ceilings• ここまで考えてきた演算性能はピーク演算性能• 実際には命令の並び次第で上限が決まる40出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)Fused Multiply-Add 命令を使用しない場合の性能上限SIMD命令不使用の場合の性能上限
  • 40.
    Fixstars Group www.fixstars.comCopyright© Fixstars GroupBandwidth Ceilings• メモリ帯域についても同様• 連続アクセス, Memory affininty, Prefetch, etc.41出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)プリフェッチを使用しない場合の性能上限Memory affinity を考慮しない場合の性能上限
  • 41.
    Fixstars Group www.fixstars.comCopyright© Fixstars GroupOptimization Regions• Computational ceilings と Bandwidth ceilings を組み合わせると演算強度ごとに、どの種の高速化技法が必要か判断できる黄色: メモリ周りの高速化が必要な領域緑色: 命令・メモリ両方の高速化が必要な領域青色: 命令レベルの高速化が必要な領域Kernel1 は命令・メモリの高速化の両方が必要Kernel2 は命令レベル高速化のみでよい42出典:Samuel Williams, et al.Roofline: an insightful visual performancemodel for multicore architectures.Commun. ACM 52, 4 (April 2009)
  • 42.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデルの可視化 活用例• 深層学習ベンチマーク (MLperf, DAWNBench, DeepBench) の性能分析• ベンチマークプログラムが演算 or メモリ律速か,どれくらいチューニングされているか43出典:Snehil Verma, et al.Demystifying the MLPerf Benchmark Suite.https://arxiv.org/abs/1908.09207すべてのアプリが V100 SP 上でメモリ律速,MLperf はおおむね効率が良い,Deep_Conv_Cu は効率が悪い
  • 43.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupピーク性能を達成するためには• 命令レベルの高速化• SIMD, FMA 命令の活用• 命令レベル並列性 (ILP) の改善• パイプラインハザードを減らす (命令レイテンシ隠蔽, 分岐予測改善, etc.)• スーパースカラ (複数の実行ユニット) を活用する• スレッドレベル並列性 (TLP) の改善• 演算器を使い切れるだけの並列性を供給する• 浮動小数点命令の割合を増やす (FP命令とそれ以外の命令が同じ演算器で実行される場合)• メモリアクセスの高速化• 適切な粒度, 量, alignment でメモリアクセス• メモリアクセスレイテンシの隠蔽 (w/ ILP, TLP, Prefetch)• プロセッサ・メモリトポロジの考慮• 演算強度の向上• レジスタ, キャッシュ等のメモリ階層を活用• その他 (ルーフラインモデルの範疇外)• 負荷分散の改善, 同期の削減, etc.44
  • 44.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupなぜルーフラインモデルが重要か• プログラムの性能を (ある程度) 見積もることができる• 高速化余地がどれくらいあるか• どのリソースがボトルネックか• 別のプロセッサに移植した場合にどの程度の性能となるか(→ 機種選定に役立つ)• 高速なソフトウェアの設計に役立つ• アルゴリズム選定, cache-aware algorithms で必要なキャッシュサイズ• 数ある高速化手法のうち、不要なものを事前に枝刈りできる• 試行錯誤を減らせるかも45
  • 45.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Groupベンチマークによるルーフラインモデルの検証
  • 46.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupルーフラインモデルの検証• ルーフラインモデルがどの程度正確かベンチマークプログラムを用いて検証する• 演算性能の計測• メモリ帯域の計測• 演算・メモリ複合実行性能の計測• 実験環境• x86-64 CPU• Intel Core i7-3770 3.40GHz (IvyBridge), Ubuntu 18.04• Intel Core i7-4790 3.60GHz (Haswell), WSL1• Intel Core i7-6500U 2.50GHz (Skylake), WSL1• AMD Ryzen 7 3700X 3.60GHz (Zen 2), Ubuntu 18.0447
  • 47.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group演算性能の計測• ベンチマーク内容• 1命令あたり8加算可能な vaddps 命令を大量に実行し1秒あたりの演算回数 [FLOPS] を計測する*1• 1コアのみ使用48__m256 vx = ..., vy = ...;auto vz0 = vx, vz1 = vx, vz2 = vx, vz3 = vx;auto vz4 = vx, vz5 = vx, vz6 = vx, vz7 = vx;for (size_t i = 0; i < n_times; ++i) {vz0 = _mm256_add_ps(vz0, vy); vz1 = _mm256_add_ps(vz1, vy);vz2 = _mm256_add_ps(vz2, vy); vz3 = _mm256_add_ps(vz3, vy);vz4 = _mm256_add_ps(vz4, vy); vz5 = _mm256_add_ps(vz5, vy);vz6 = _mm256_add_ps(vz6, vy); vz7 = _mm256_add_ps(vz7, vy);}// Avoid dead-code eliminationauto vz = vz0;vz = _mm256_add_ps(vz, vz1); vz = _mm256_add_ps(vz, vz2);vz = _mm256_add_ps(vz, vz3); vz = _mm256_add_ps(vz, vz4);vz = _mm256_add_ps(vz, vz5); vz = _mm256_add_ps(vz, vz6);vz = _mm256_add_ps(vz, vz7);_mm256_store_ps(tmp, vz);依存関係のない8個の vaddps 命令を繰り返し実行(パイプラインハザードが発生しないようにする)*1: 理論ピーク演算性能を計測する場合、 FMA 命令 (vfmaddps) を使用する必要があるが、今回は vaddps 命令を用いる。
  • 48.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group演算性能の計測結果CPU CPU世代ベース / 計測時*1クロック周波数理論演算性能*2 実測演算性能Intel Core i7-3770IvyBridge(VADD port x1)3.4 / 3.9 GHz 31.2 GFLOPS 30.79 GFLOPSIntel Core i7-4790Haswell(VADD port x1)3.6 / 3.6 GHz 28.8 GFLOPS 28.63 GFLOPSIntel Core i7-6500USkylake(VADD port x2)2.5 / 2.7 GHz 43.2 GFLOPS 43.21 GFLOPSAMD Ryzen 7 3700XZen 2(VADD port x2)3.6 / 4.4 GHz 70.4 GFLOPS 69.96 GFLOPS*1: Turbo Boost 有効時の推定値*2: 1コア, 加算のみの場合の理論性能49
  • 49.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupメモリ帯域の計測• ベンチマーク内容• キャッシュに収まらないサイズの配列に対して4つのパターンでメモリアクセスし、スループットを計測する• read only (read:write=1:0), write only (read:write=0:1),copy (read:write=1:1), triad (read:write=2:1)• 1コアのみ使用float *sp0 = src0, *sp1 = src1, *dp = dst, *dst_end = dst + size;while (dp < dst_end) {// triad: dst[i] = alpha * src0[i] + src1[i];auto vx0 = _mm256_load_ps(sp0 + 0 * 8), vx1 = _mm256_load_ps(sp0 + 1 * 8);auto vx2 = _mm256_load_ps(sp0 + 2 * 8), vx3 = _mm256_load_ps(sp0 + 3 * 8);auto vy0 = _mm256_load_ps(sp1 + 0 * 8), vy1 = _mm256_load_ps(sp1 + 1 * 8);auto vy2 = _mm256_load_ps(sp1 + 2 * 8), vy3 = _mm256_load_ps(sp1 + 3 * 8);auto vz0 = _mm256_fmadd_ps(valpha, vx0, vy0);auto vz1 = _mm256_fmadd_ps(valpha, vx1, vy1);auto vz2 = _mm256_fmadd_ps(valpha, vx2, vy2);auto vz3 = _mm256_fmadd_ps(valpha, vx3, vy3);_mm256_store_ps(dp + 0 * 8, vz0); _mm256_store_ps(dp + 1 * 8, vz1);_mm256_store_ps(dp + 2 * 8, vz2); _mm256_store_ps(dp + 3 * 8, vz3);sp0 += 4 * 8, sp1 += 4 * 8, dp += 4 * 8;} 50
  • 50.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupメモリ帯域の計測結果• 1コアのみ使用する場合には最大でも理論値の60%程度に留まる• メモリアクセスパターンによって得られる帯域が異なる• プロセッサアーキテクチャに依存するが今回の対象ではおおむね read only > triad > copy > write onlyCPU CPU世代 メモリ規格理論メモリ帯域 [GB/s]実測メモリ帯域 [GB/s]read / write / copy / triadIntel Core i7-3770 IvyBridge DDR3-1600 x2 25.6 17.3 / 10.4 / 13.3 / 14.3Intel Core i7-4790 Haswell DDR3-1600 x2 25.6 16.3 / 10.3 / 13.4 / 14.1Intel Core i7-6500U Skylake LPDDR3-1866 x2 29.9 15.9 / 11.1 / 14.6 / 16.5AMD Ryzen 7 3700X Zen 2 DDR4-2666 x2 42.6 22.8 / 12.1 / 17.6 / 20.551
  • 51.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group演算・メモリ複合実行性能の計測• ベンチマーク内容• 配列の各要素に対してロード・N回加算・ストアを行う• read:write:add=1:1:N• 演算強度: N / ((1 + 1) * sizeof(float)) = N/8• 1コアのみ使用52const auto va = ...;const auto *sp0 = src0, *dp = dst, *dst_end = dst + size;while (dp < dst_end) {// dst[i] = src0[i] + (a + a + ... + a);auto vz0 = _mm256_load_ps(sp0 + 0 * 8), vz1 = _mm256_load_ps(sp0 + 1 * 8);auto vz2 = _mm256_load_ps(sp0 + 2 * 8), vz3 = _mm256_load_ps(sp0 + 3 * 8);auto vz4 = _mm256_load_ps(sp0 + 4 * 8), vz5 = _mm256_load_ps(sp0 + 5 * 8);auto vz6 = _mm256_load_ps(sp0 + 6 * 8), vz7 = _mm256_load_ps(sp0 + 7 * 8);UNROLL for (int i = 0; i < N; ++i) { // N: 演算強度を変化させるためのパラメータvz0 = _mm256_add_ps(vz0, va); vz1 = _mm256_add_ps(vz1, va);vz2 = _mm256_add_ps(vz2, va); vz3 = _mm256_add_ps(vz3, va);vz4 = _mm256_add_ps(vz4, va); vz5 = _mm256_add_ps(vz5, va);vz6 = _mm256_add_ps(vz6, va); vz7 = _mm256_add_ps(vz7, va);}_mm256_store_ps(dp + 0 * 8, vz0); _mm256_store_ps(dp + 1 * 8, vz1);_mm256_store_ps(dp + 2 * 8, vz2); _mm256_store_ps(dp + 3 * 8, vz3);_mm256_store_ps(dp + 4 * 8, vz4); _mm256_store_ps(dp + 5 * 8, vz5);_mm256_store_ps(dp + 6 * 8, vz6); _mm256_store_ps(dp + 7 * 8, vz7);sp0 += 8 * 8, dp += 8 * 8;}
  • 52.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group演算・メモリ複合実行性能の計測結果• おおむねルーフラインモデルに近い値が得られている0204060800 2 4 6 8性能[GFLOPS]Core i7-3770 (IvyBridge)Loofline実測値0204060800 2 4 6 8Core i7-4790 (Haswell)Loofline実測値0204060800 2 4 6 8性能[GFLOPS]演算強度Core i7-6500U (Skylake)Loofline実測値0204060800 2 4 6 8演算強度Ryzen 7 3700X (Zen 2)Loofline実測値53
  • 53.
    Fixstars Group www.fixstars.comCopyright© Fixstars Groupまとめ• CPU/GPU 高速化において重要な「ルーフラインモデル」について解説• プログラムの性能上限を見積もることができる• どのリソースがボトルネックか判定できる• 色んなプロセッサに移植した場合の性能を推定できる• 有効な高速化手法を選ぶのに役立つ• ベンチマークによる検証を実施• ルーフラインモデルによる理論性能と実性能を比較し、おおむね理論性能に近い結果が得られることを確認54
  • 54.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group Copyright © Fixstars Group実践編予告:AMD GPU における行列積の高速化
  • 55.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group実践編 予告• AMD GPU における行列積の高速化• ルーフラインモデルを活用した高速化の例を解説• 性能の上限を求める• 最適なレジスタ・キャッシュブロッキングサイズを求める56
  • 56.
    Fixstars Group www.fixstars.comCopyright© Fixstars Group高速化結果• 最大 6351 GFLOPS (ピーク性能比 73.8%)• 単純な実装から11倍の高速化を達成02000400060008000100001024 2048 3072 4096 5120 6144 7168 8192性能(GFLOPS)行列サイズ (M=N=K)Peak Performance(1) Naïve(2) Register blocking only(3) (2) + LDS blocking(4) (3) + K loop unrolling(5) (4) + Other optimizations57
  • 57.
    Fixstars Group www.fixstars.comCopyright© Fixstars GroupThank Youお問い合わせ窓口 : contact@fixstars.com

Editor's Notes

  • #16 社内大学の様子があるといいのだけど

[8]ページ先頭

©2009-2025 Movatter.jp