インテル MKL を使用した小行列乗算の高速化 インテル MKL チーム

Similar documents
インテル® Parallel Studio XE 2013 Linux* 版インストール・ガイドおよびリリースノート

Product Brief 高速なコードを素早く開発 インテル Parallel Studio XE 2017 インテル ソフトウェア開発ツール 概要 高速なコード : 現在および次世代のプロセッサーでスケーリングする優れたアプリケーション パフォーマンスを実現します 迅速に開発 : 高速かつ安定し

インテル® Parallel Studio XE 2015 Composer Edition for Linux* インストール・ガイドおよびリリースノート

インテル® Parallel Studio XE 2013 Windows* 版インストール・ガイドおよびリリースノート

PowerPoint Presentation

AI 人工知能 高度なプログラミングをすることなく 人間の心理と関連した認識機能を実行するために 経験を基にした機械の学習する能力 人工知能 マシンラーニング長期間にわたってより多くのデータを使用することにより 性能が向上するアルゴリズム ディープラーニング多層ニューラル ネットワークが膨大な量のデ

Click to edit title

PowerPoint Presentation

インテル® Fortran Studio XE 2011 SP1 Windows* 版インストール・ガイドおよびリリースノート

Microsoft PowerPoint - Intel Parallel Studio XE 2019 for Live

4 倍精度基本線形代数ルーチン群 QPBLAS の紹介 [index] 1. Introduction 2. Double-double algorithm 3. QPBLAS 4. QPBLAS-GPU 5. Summary 佐々成正 1, 山田進 1, 町田昌彦 1, 今村俊幸 2, 奥田洋司

並列アプリケーション向けインテル® TBB スケーラブル・メモリー・アロケーターの活用

インテル(R) Visual Fortran コンパイラ 10.0

Intel Software Presentation Template

Microsoft PowerPoint Quality-sama_Seminar.pptx

Microsoft* Windows* 10 における新しい命令セットの利用

Jackson Marusarz 開発製品部門

スレッド化されていないアプリケーションでも大幅なパフォーマンス向上を容易に実現

インテル® VTune™ Amplifier XE を使用したストレージ向けの パフォーマンス最適化

バトルカードでゲーマーやエンスージアストへの販売促進

PowerPoint プレゼンテーション

Parallel Studio XE Parallel Studio XE hotspot ( )

チュートリアル: インテル® MPI ライブラリー向け MPI Tuner (Windows*)

PowerPoint Presentation

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows 日本語版 : インストール・ガイド

インテル C++ および Fortran コンパイラー for Linux*/OS X*/Windows

テクノロジーのビッグトレンド 180 nm nm nm nm nm On 2007 Track 32 nm には 150 億台の端末がネットワーク接続 * * "Gantz, John. "The Embedded

InfiniDB最小推奨仕様ガイド

高速なコードを素早く開発 インテル Parallel Studio XE 設計 ビルド 検証 チューニング C++ C Fortran Python* Java* 標準規格に基づく並列モデル : OpenMP* MPI インテル TBB バージョン 2017 の主な機能 インテル Distribut

インテル® キャッシュ・アクセラレーション・ソフトウェア (インテル® CAS) Linux* 版 v2.8 (GA)

Microsoft Word - HOKUSAI_system_overview_ja.docx

Tutorial-GettingStarted

IntelR Compilers Professional Editions

内容 インテル Advisor ベクトル化アドバイザー入門ガイド Version インテル Advisor の利用 ワークフロー... 3 STEP1. 必要条件の設定... 4 STEP2. インテル Advisor の起動... 5 STEP3. プロジェクトの作成

2.1 インテル マイクロアーキテクチャー Haswell インテル マイクロアーキテクチャー Haswell は インテル マイクロアーキテクチャー Sandy Bridge とインテル マイクロアーキテクチャー Ivy Bridge の成功を受けて開発された この新しいマイクロアーキテクチャーの

目次 1 はじめに 製品に含まれるコンポーネント 動作環境... 4 オペレーティング システム... 4 Microsoft Visual Studio* 製品 製品のダウンロード 製品版をインストールする場合 評価版を

VXPRO R1400® ご提案資料

インテル Parallel Studio XE 2017 Composer Edition for Fortran Windows* インストール ガイド Rev (2017/06/08) エクセルソフト株式会社

Microsoft PowerPoint - sales2.ppt

サーバプラットフォーム「BladeSymphony」、「HA8000シリーズ」の新モデルを販売開始

Introducing Intel® Parallel Studio XE 2015

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

表 1. OpenSSL* スピードテストのハードウェアおよびソフトウェア構成 この OpenSSL* 本来の性能が SSL Web サーバーのスループットにどのように影響するか評価するため このケーススタディーでは これらの 2 つの暗号を使用したときに Nginx* Web サーバーで達成可能な

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2

アドバンストサーバ「HA8000シリーズ」において最新テクノロジーを採用しシステム性能を強化

インテル® Parallel Studio XE 2015 Composer Edition for C++ Linux* インストール・ガイドおよびリリースノート

処理効率

インテル(R) Visual Fortran Composer XE

日立アドバンストサーバ「HA8000シリーズ」の2プロセッサーモデル3機種を強化

Intel_ParallelStudioXE2013_ClusterStudioXE2013_Introduction.pptx

修士論文

― ANSYS Mechanical ―Distributed ANSYS(領域分割法)ベンチマーク測定結果要約

<4D F736F F F696E74202D F A282BD94BD959C89F A4C E682528D652E707074>

ホワイト ペーパー EMC VFCache により Microsoft SQL Server を高速化 EMC VFCache EMC VNX Microsoft SQL Server 2008 VFCache による SQL Server のパフォーマンスの大幅な向上 VNX によるデータ保護 E

インテル® Parallel Studio XE 2015 Composer Edition for Fortran Windows* インストール・ガイドおよびリリースノート

The Parallel Universe 1 インテル MPI ライブラリーのマルチ EP によりハイブリッド アプリケーションのパフォーマンスを向上 最小限のコード変更でエクサスケール時代に備える Rama Kishan Malladi インテルコーポレーショングラフィックス パフォーマンス モ

インテル® Parallel Studio XE 2015 Composer Edition for C++ Linux* インストール・ガイドおよびリリースノート

インテル® Parallel Studio XE 2015 Composer Edition for Fortran Linux* インストール・ガイドおよびリリースノート

(速報) Xeon E 系モデル 新プロセッサ性能について

インテル® Xeon Phi™ プロセッサー上で MPI for Python* (mpi4py) を使用する

for (int x = 0; x < X_MAX; x++) { /* これらの 3 つの行は外部ループの自己データと * 合計データの両方にカウントされます */ bar[x * 2] = x * ; bar[(x * 2) - 1] = (x - 1.0) *

BLAS の概要

PowerPoint プレゼンテーション

Silk Central Connect 15.5 リリースノート

PowerPoint プレゼンテーション

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

1 つのツールを実行するだけで違いが出るのでしょうか? はい 多くの場合 複雑なバグを発見して アプリケーションの安定性を向上させることができます このガイドでは インテル Inspector XE 解析ツールを使用して コードの問題を排除する方法を説明します これにより コードの信頼性が向上し 開

Pervasive PSQL v11 のベンチマーク パフォーマンスの結果

ピクセル同期を利用した順不同半透明描画 (更新)

Introduction to OpenMP* 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessors

目次 1 はじめに 製品コンポーネント 動作環境 インストールを行う前に 製品版と評価版 製品のインストール手順 製品の登録 製品のダウンロード ライセンスファイルの取得

高速なコードを 迅速に開発 インテル Parallel Studio XE 2016 最適化に関する注意事項 2015 Intel Corporation. 無断での引用 転載を禁じます * その他の社名 製品名などは 一般に各社の表示 商標または登録商標です パフォーマンスを最大限に引き出そう

インテル® Parallel Studio XE 2015 Composer Edition for C++ Windows* インストール・ガイドおよびリリースノート

PowerPoint プレゼンテーション

表 1. インテル Core m7-6y75 プロセッサーにおけるサンプルの 2 つのシーンのカリング時間 ( ミリ秒 ) システム構成 : インテル Core m7-6y75 プロセッサー 1.20GHz TDP 4.5W 2 コア 4 スレッド 8GB DDR3 インテル HD グラフィックス

倍々精度RgemmのnVidia C2050上への実装と応用

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

使用する前に

Microsoft Word - IVF15.0.1J_Install.doc

Click to edit title

untitled

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

インテル® Parallel Studio XE 2019 Update 4 リリースノート

性能を強化した 第 12 世代 Dell PowerEdge サーバの RAID コントローラ Dell PERC H800 と PERC H810 の OLTP ワークロード性能比較 ソリューション性能分析グループ Luis Acosta アドバンストストレージエンジニアリング Joe Noyol

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

KSforWindowsServerのご紹介

Red Hat Enterprise Linux OSの手動インストール

はじめに Web アプリケーションの発展と普及の勢いは弱まる兆しがありません 弱まるどころか 加速し続けています これは これまでの ERP CRM Web 2.0 などの Web ベースアプリケーションが提供してきたメリットを考えると 不思議なことではありません Web アプリケーションの爆発的拡

untitled

第 2 世代インテル® Xeon® スケーラブル・プロセッサー向けインテル® VTune™ Amplifier チューニング・ガイド

Touch Panel Settings Tool

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

Microsoft PowerPoint - ca ppt [互換モード]

White Paper 高速部分画像検索キット(FPGA アクセラレーション)

Microsoft Word - 補論3.2

SMG Field Computex 2011 New Category Update

Release Note for Media File Player v1.6.3 (Japanese)

インテル® C++ Composer XE 2011 Windows* 版インストール・ガイドおよびリリースノート

始める スタート > 全てのプログラム > Cypress > PSoC Creator 2.0 > PSoC Creator 2.0 をクリックします プロジェクトを作成する / 開く Start Page の "Create New Project" をクリックし 要求されたプロジェクト情報を入

Veritas System Recovery 16 Management Solution Readme

Transcription:

インテル MKL を使用した小行列乗算の高速化 インテル MKL チーム

内容 インテル MKL の概要 インテル MKL の新機能 行列 - 行列乗算 小行列のパフォーマンスの課題 小行列のパフォーマンスを向上するインテル MKL のソリューション MKL_DIRECT_CALL バッチ API コンパクト API パックド API パフォーマンスのヒントと測定 サマリーおよびインテル MKL 関連情報 2

インテル マス カーネル ライブラリー ( インテル MKL) 科学 工学 金融 マシンラーニング アプリケーションにおける計算を高速化 密 / スパース線形代数 (BLAS LAPACK PARDISO) FFT ベクトル演算 サマリー統計 ディープラーニング スプラインなどの主な機能を提供 インテル Parallel Studio XE とインテル System Studio で利用可能 無料およびロイヤルティー フリーで利用可能 シングルコアのベクトル化とキャッシュ効率向けに最適化 マルチコアとメニーコアの自動並列化 クラスターにスケーリング 3

最適化された数値計算ビルディング ブロック 線形代数 BLAS LAPACK ScaLAPACK スパース BLAS PARDISO SMP クラスター直接法スパースソルバー 反復法スパースソルバー 高速フーリエ変換 多次元 FFTW インターフェイス クラスター FFT ベクトル演算 三角関数 双曲線 指数 対数 累乗 累乗根 ベクトル RNG ディープ ニューラル ネットワーク 畳み込み プーリング 正規化 ReLU 内積 サマリー統計 尖度 中心積率 変化係数 順序統計量と分位数 最小 / 最大 分散 / 共分散 ロバスト推定 その他 スプライン 補間 信頼領域 高速ポアソンソルバー 4

チューニングされた ISA 固有のコードパスに自動ディスパッチ コア数の増加 スレッド数の増加 ベクトル幅の増加 インテル Xeon プロセッサー 64 ビット インテル Xeon プロセッサー 5100 番台 インテル Xeon プロセッサー 5500 番台 インテル Xeon プロセッサー 5600 番台 インテル Xeon プロセッサー E5-2600 v2 製品ファミリー インテル Xeon プロセッサー E5-2600 v3 製品ファミリー v4 製品ファミリー インテル Xeon スケーラブル プロセッサー 1 インテル Xeon Phi x200 製品ファミリー ( 開発コード名 Knights Landing) 最大コア数 1 2 4 6 12 18-22 28 72 最大スレッド数 2 2 8 12 24 36-44 56 288 SIMD 幅 128 128 128 128 256 256 512 512 ベクトル ISA インテル SSE3 インテル SSE3 インテル SSE4 インテル SSE4.1 インテル SSE4.2 インテル AVX インテル AVX2 インテル AVX-512 インテル AVX-512 1. 発売済および出荷済製品の製品仕様は ark.intel.com を参照してください インテル SSE: インテル ストリーミング SIMD 拡張命令インテル AVX: インテル アドバンスト ベクトル エクステンション 5

インテル MKL 2018 の新機能と最適化 インテル Xeon Phi プロセッサー ( 開発コード名 Knights Mill) 向けの最適化 DNN 畳み込み関数および内積関数の最適化 ( インテル MKL-DNN) SGEMM の最適化 (AVX512_4FMAPS 向け ) BLAS3 実数および複素数単精度の最適化 (AVX512_4FMAPS 向け インテル MKL 2018.1) 新しい整数 GEMM API (8 ビットまたは 16 ビット入力 32 ビット出力 ) BLAS および LAPACK コンパクト BLAS および LAPACK 関数 LAPACK コレスキーおよび QR の直接呼び出しのサポート ピボット選択なし LU 因数分解および逆関数 Aasen ベースの因数分解およびソルバー関数 制限付き Bunch-Kaufman (rook) ピボット選択因数分解 スパース BLAS 前処理付き対称ガウス ザイデル スパース SYRK ルーチン FFT Verbose モードのサポート ベクトル演算 24 の新しい関数 : v?fmod v?remainder v?powr v?exp2 v?exp10 v?cospi v?sinpi v?tanpi など 6

インテル MKL の主な拡張点 条件付き数値再現性 (CNR) インテル スレッディング ビルディング ブロック ( インテル TBB) とのコンポーザビリティー インテル Optimized High Performance Conjugate Gradient (HPCG) Benchmark スパース BLAS 検査 - 実行 API クラスターのサポートの拡張 (MPI ラッパーおよび macos*) クラスター用並列直接法スパースソルバー 拡張固有値ソルバー ディープ ニューラル ネットワークの畳み込み 正規化 活性化 プーリング プリミティブ GEMM の拡張 MKL_DIRECT_CALL バッチ API およびパックド API 7

行列 - 行列乗算 インテル MKL BLAS (Basic Linear Algebra Subprograms) の一部 科学 工学 マシンラーニング アプリケーションで重要 n n k *GEMM(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) C = alpha op(a) * op(b) + beta C op(x) = X または X T ldb k B C = beta*c DO i=1,m DO j=1,n DO kk=1,k C(i,j) += alpha*a(i,kk)*b(kk,j) END DO END DO END DO lda m k m A k ldc m n C 8

行列 - 行列乗算の最適化 インテル アーキテクチャー向けに高度にチューニング 高スループットの SIMD 命令 マルチコア / メニーコア対応の並列アルゴリズム タイリングによりキャッシュの再利用を最大化 コピー B kj ほぼマシンのピーク パフォーマンスで動作する高度にチューニングされたアセンブリー カーネル 入力行列 A と B をバッファーにコピー カーネル内部で連続するデータ アクセス パターン キャッシュミスと TLB ミスを最小化 コピー コピーしない B コピーのオーバーヘッドは大きな行列では無視できる 計算 : O(N 3 ) コピー : O(N 2 ) A ik C ij インテル MKL は行列が小さい場合コピーをスキップする 適切なリーディング ディメンジョンが必要 (256 の倍数を避ける ) A と B が転置でないことが望ましい A C 9

インテル Xeon Platinum プロセッサー上での行列 - 行列乗算のパフォーマンス 7000 SGEMM と DGEMM のパフォーマンス 6000 パフォーマンス (GFlop/s) 5000 4000 3000 2000 1000 0 256 512 800 1000 1024 1500 1536 2000 2048 2560 3000 3072 4000 5000 6000 7000 8000 9000 10000 15000 20000 行列の次元 (M=N=K) DGEMM SGEMM システム構成 : ハードウェア : インテル Xeon Platinum 8180 プロセッサー 2x28 コア 2.50GHz 376GB RAM オペレーティング システム : Ubuntu* 16.04 LTS ソフトウェア : インテル MKL 2018 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 詳細については www.intel.com/benchmarks ( 英語 ) を参照してください ベンチマークの出典 : インテルコーポレーション最適化に関する注意事項 : インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 10

行列サイズの分類とパフォーマンスの課題 小サイズ M, N, K < 20 課題 : 関数呼び出しのオーバーヘッドが大きい ベクトル化および並列化の効果が低い ソリューション : バッチ API コンパクト API および MKL_DIRECT_CALL 中サイズ 20 < M, N, K < 500 課題 : 並列化の効果が低い コピーのオーバーヘッドが大きい ソリューション : バッチ API およびパックド API 非対称サイズ M < 500 で N が大きい N < 500 で N が大きい 課題 : コピーのオーバーヘッドが大きい ソリューション : パックド API 大サイズ M, N, K > 5000 パフォーマンスはマシンの理論的なピークに近い 11

小 中 非対称サイズ向けのインテル MKL のソリューション MKL_DIRECT_CALL 小サイズ (M, N, K < 20) のパフォーマンスを向上 エラーチェックと関数呼び出しを省略してオーバーヘッドを軽減 複数の関数で有効 BLAS: gemm gemm3m syrk trsm axpy dot LAPACK: potrf getrf getrs getri geqrf コンパクト API 小サイズ (M, N, K < 20) のパフォーマンスを向上 データをコンパクト形式に変更することにより非常に小さな次元の行列のベクトル化が可能 複数の関数で有効 BLAS: gemm trsm LAPACK: getrinp getrfnp potrf geqrf バッチ API 小 - 中サイズ (M, N, K < 500) のパフォーマンスを向上 複数の独立した関数呼び出しをグループ化 gemm gemm3m および trsm BLAS 関数で利用可能 パックド API 小 - 中 M または N サイズ (M または N < 500) のパフォーマンスを向上 同じ入力行列の複数の GEMM 呼び出しでコピーのオーバーヘッドを軽減 sgemm および dgemm BLAS 関数で利用可能 12

MKL_DIRECT_CALL コンパイラー オプション プリプロセッサー マクロ MKL_DIRECT_CALL を定義 スレッド化が必要ない場合は MKL_DIRECT_CALL_SEQ を使用 小サイズ (M, N, K < 20) のパフォーマンスを向上 ライブラリー関数を呼び出す代わりに C 実装を使用 インテル MKL 2018.1 以降 DGEMM インテル AVX2 以降向けのコンパイラー組込み関数カーネル インテル MKL はオーバーヘッドを回避できる エラーチェックなし MKL_VERBOSE のサポートなし CNR ( 条件付き数値再現性 ) のサポートなし 最小限の変更が必要 プリプロセッサー マクロとヘッダーファイルを追加 : // icc でコンパイル DMKL_DIRECT_CALL #include <mkl.h> void main(void) { dgemm( ); }! ifort でコンパイル DMKL_DIRECT_CALL fpp # include mkl_direct_call.fi program DGEMM_MAIN DGEMM( ) 13

インテル Xeon Platinum プロセッサー上での MKL_DIRECT_CALL のパフォーマンス シングルスレッド SGEMM のパフォーマンス シングルスレッド DGEMM のパフォーマンス 50 10 40 8 パフォーマンス (GFlop/s) 40 30 20 10 8 6 4 2 MKL_DIRECT_CALL との比較 パフォーマンス (GFlop/s) 35 30 25 20 15 10 5 7 6 5 4 3 2 1 MKL_DIRECT_CALL との比較 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 行列の次元 (M=N=K) 行列の次元 (M=N=K) SGEMM SGEMM + MKL_DIRECT_CALL スピードアップ DGEMM DGEMM + MKL_DIRECT_CALL スピードアップ システム構成 : ハードウェア : インテル Xeon Platinum 8180 プロセッサー 2x28 コア 2.50GHz 192GB RAM オペレーティング システム : Red Hat* Enterprise Linux* 7.2 LTS ソフトウェア : インテル MKL 2018 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 詳細については www.intel.com/benchmarks ( 英語 ) を参照してください ベンチマークの出典 : インテルコーポレーション最適化に関する注意事項 : インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 14

バッチ API 1 つの関数呼び出しで複数の独立した汎用行列乗算 (GEMM) 操作を同時に実行 操作間でデータ依存性がないことを保証 小 - 中サイズ (M, N, K < 500) でもすべてのコアを活用 ライブラリーのオーバーヘッドを最小化 同じサイズの行列をグループ化するコード変更が必要 C 1 = alpha. op(a 1 ). op(b 1 ) + beta. C 1 C 2 = alpha. op(a 2 ). op(b 2 ) + beta. C 2 ポインター エイリアシングがないと仮定して並列で実行 C 3 = alpha. op(a 3 ). op(b 3 ) + beta. C 3 C 2 = alpha. op(a 4 ). op(b 4 ) + beta. C 2 C 2 への前の書き込みを待つ 15

バッチ API のグループコンセプト グループ : 同じ入力パラメーターの GEMM 操作のセット ( 異なる行列ポインターを含む ) 転置 サイズ リーディング ディメンジョン アルファおよびベータ 1 つの GEMM_BATCH 呼び出しで複数のグループを制御できる GEMM_BATCH グループ 1 グループ 2 グループ 3 16

バッチ API の使用例 同じパラメーターの GEMM 呼び出しをグループ化 GEMM 呼び出しの 2 つのグループの例 : #include <mkl.h> int group_count = 2; // group_count の配列サイズを作成して GEMM 引数に格納 CBLAS_TRANSPOSE transa[] = {CblasNoTrans, CblasNoTrans}; CBLAS_TRANSPOSE transb[] = {CblasTrans, CblasNoTrans}; MKL_INT m[] = {4, 3}; MKL_INT k[] = {4, 6}; MKL_INT n[] = {8, 3}; MKL_INT lda[] = {4, 6}; MKL_INT ldb[] = {4, 6}; MKL_INT ldc[] = {8, 3}; double alpha[] = {1.0, 1.0}; double beta[] = {0.0, 2.0}; MKL_INT size_per_grp[] = {20, 30}; // cblas_dgemm_batch を呼び出して 50 の GEMM 操作を実行 cblas_dgemm_batch(cblasrowmajor, transa, transb, m, n, k, alpha, a_array, lda, b_array, ldb, beta, c_array, ldc, group_count, size_per_group); 17

インテル Xeon Platinum プロセッサー上でのバッチ API のパフォーマンス 7000 バッチ API のパフォーマンス パフォーマンス (GFlop/s) 6000 5000 4000 3000 2000 1000 0 24 32 40 80 96 128 160 200 256 296 行列の次元 (M=N=K) SGEMM_BATCH DGEMM_BATCH システム構成 : ハードウェア : インテル Xeon Platinum 8180 プロセッサー 2x28 コア 2.50GHz 376GB RAM オペレーティング システム : Ubuntu* 16.04 LTS ソフトウェア : インテル MKL 2018 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 詳細については www.intel.com/benchmarks ( 英語 ) を参照してください ベンチマークの出典 : インテルコーポレーション最適化に関する注意事項 : インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 18

コンパクト API 大量の同じサイズの行列のベクトル化を利用する新しいデータ形式 同じインデックスの行列要素はメモリーでインターリーブ サブグループのサイズは SIMD 長 (SIMD 命令を活用するため ) サブグループのサイズ = 4 で 3x2 の行列を変更した例 : 実数データ型 複素数データ型 A111 A121 A131 A211 A221 A231 A112 A122 A132 A212 A222 A232 A111 A211 A311 A411 A121 A221 A112 A212 A312 A412 A122 A222 A111.re A111.im A121.re A121.im A131.re A131.im A211.re A211.im A221.re A221.im A231.re A231.im A112.re A112.im A122.re A122.im A132.re A132.im A212.re A212.im A222.re A222.im A232.re A232.im A111.re A211.re A311.re A411.re A121.re A221.re A112.re A212.re A312.re A412.re A122.re A222.re A111.im A211.im A311.im A411.im A121.im A221.im A112.im A212.im A312.im A412.im A122.im A222.im A311 A321 A331 A411 A421 A431 A312 A322 A332 A412 A422 A432 A321 A421 A131 A231 A331 A431 A322 A422 A132 A232 A332 A432 A311.re A311.im A321.re A321.im A331.re A331.im A411.re A411.im A421.re A421.im A431.re A431.im A312.re A312.im A322.re A322.im A332.re A332.im A412.re A412.im A422.re A422.im A432.re A432.im A321.re A421.re A131.re A231.re A331.re A431.re A322.re A422.re A132.re A232.re A332.re A432.re A321.im A421.im A131.im A231.im A331.im A431.im A322.im A422.im A132.im A232.im A332.im A432.im 19

コンパクト API の使用例 一部のコード変更が必要な非標準 BLAS API 同じサイズの小行列 (M, N, K < 20) のグループのパフォーマンスを大幅に向上 インテル MKL ユーティリティー関数により列 / 行優先で行列を変換 コンパクト形式 #include <mkl.h> // アーキテクチャーの最適な形式を照会 MKL_COMPACT_PACK compact_format = mkl_get_format_compact(); // コンパクト形式のメモリー割り当て a_size = mkl_dget_size_compact(lda, k, compact_format, num_matrix); b_size = mkl_dget_size_compact(ldb, n, compact_format, num_matrix); c_size = mkl_dget_size_compact(ldc, n, compact_format, num_matrix); // データをコンパクト形式に変換 mkl_dgepack_compact(layout, m, k, a_array, lda, a_c, lda, compact_format, num_matrix); mkl_dgepack_compact(layout, k, n, b_array, ldb, b_c, ldb, compact_format, num_matrix); mkl_dgepack_compact(layout, m, n, c_array, ldc, c_c, ldc, compact_format, num_matrix); // コンパクト形式で複数の dgemm 操作を実行 mkl_dgemm_compact(layout, transa, transb, m, n, k, alpha, a_c, lda, b_c, ldb, beta, c_c, ldc, compact_format, num_matrix); // コンパクト形式から標準 BLAS 形式に変換 mkl_dgeunpack_compact(layout, m, n, c_array, ldc, c_c, ldc, compact_format, num_matrix); 20

インテル Xeon Platinum プロセッサー上でのコンパクト API のパフォーマンス 4000 コンパクト API のパフォーマンス 3500 パフォーマンス (GFlop/s) 3000 2500 2000 1500 1000 500 0 2 4 6 8 10 12 14 16 18 20 行列の次元 (M=N=K) コンパクト SGEMM コンパクト DGEMM システム構成 : ハードウェア : インテル Xeon Platinum 8180 プロセッサー 2x28 コア 2.50GHz 376GB RAM オペレーティング システム : Ubuntu* 16.04 LTS ソフトウェア : インテル MKL 2018 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 詳細については www.intel.com/benchmarks ( 英語 ) を参照してください ベンチマークの出典 : インテルコーポレーション最適化に関する注意事項 : インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 21

パックド API 同じ入力行列の複数の GEMM 呼び出しにおけるコピー ( パック ) 操作を最小化 コピー ( パック ) したデータを多くの GEMM 呼び出しで再利用 入力行列の再利用により中または非対称サイズ (M または N < 500) のパフォーマンスを向上 C 1 = alpha. op(a 1 ). op(b 1 ) + beta. C 1 C 2 = alpha. op(a 1 ). op(b 2 ) + beta. C 2 入力行列 A 1 は 3 つの GEMM 呼び出しで共有される C 3 = alpha. op(a 1 ). op(b 3 ) + beta. C 3 22

パックド API の使用例 GEMM 呼び出しを GEMM_PACK + GEMM_COMPUTE に変換するコード変更が必要 行列 A を共有する 3 つの SGEMM 呼び出しをパックド API で計算する場合の例 : #include <mkl.h> float *Ap; Ap = sgemm_alloc( A, &m, &n, &k); // A をパックド形式に変換 sgemm_pack( A, T, &m, &n, &k, &alpha, A, &lda, Ap); // 行列 A のパックド形式 Ap を使用して SGEMM 計算を実行 sgemm_compute( P, N, &m, &n, &k, Ap, &lda, B1, &ldb1, &beta, C1, &ldc1); sgemm_compute( P, N, &m, &n, &k, Ap, &lda, B2, &ldb2, &beta, C2, &ldc2); sgemm_compute( P, N, &m, &n, &k, Ap, &lda, B3, &ldb3, &beta, C3, &ldc3); // Ap のメモリーを解放 sgemm_free(ap); 23

インテル Xeon プロセッサー E5-2699 v4 上でのパックド API のパフォーマンス SGEMM および SGEMM_COMPUTE のパフォーマンス DGEMM および DGEMM_COMPUTE のパフォーマンス 2500 2 1500 2 2250 1350 パフォーマンス (GFlop/s) 2000 1750 1500 1250 1000 750 500 250 1.5 1 0.5 パックド API との比較 パフォーマンス (GFlop/s) 1200 1050 900 750 600 450 300 150 1.5 1 0.5 パックド API との比較 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 0 行列の次元 N (M=K=10000) 行列の次元 N (M=K=10000) SGEMM SGEMM_COMPUTE スピードアップ DGEMM DGEMM_COMPUTE スピードアップ システム構成 : ハードウェア : インテル Xeon プロセッサー E5-2699 v4 2x22 コア 2.20GHz 64GB RAM オペレーティング システム : Red Hat* Enterprise Linux* 7.2 ソフトウェア : インテル MKL 2018 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 詳細については www.intel.com/benchmarks ( 英語 ) を参照してください ベンチマークの出典 : インテルコーポレーション最適化に関する注意事項 : インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 24

インテル MKL の重要なパフォーマンスのヒント KMP_AFFINITY を設定してスレッド マイグレーションを回避する インテル ハイパースレッディング (HT) テクノロジー有効 : Linux*/macOS*: export KMP_AFFINITY=compact,1,0,granularity=fine Windows*: set KMP_AFFINITY=compact,1,0,granularity=fine インテル ハイパースレッディング (HT) テクノロジー無効 : Linux*/macOS*: export KMP_AFFINITY=compact Windows*: set KMP_AFFINITY=compact リーディング ディメンジョンが 256 の倍数になるのを避ける ldim % 256 = 0 の場合は ldim に 16 を加算 ページ境界でメモリーをアライメントする メモリーの割り当てと解放には mkl_malloc および mkl_free を使用する ローカルメモリーのアクセスを最大化 インテル MKL が内部バッファーに高帯域幅メモリーを使用するようにする memkind ライブラリーをインストールする numactl 詳細は インテル MKL デベロッパー ガイド の パフォーマンスとメモリーの管理 を参照 25

インテル MKL 関数のパフォーマンスの評価 重要 : 小行列向けのソリューションを使用する前にユースケースのパフォーマンスを評価する インテル MKL 関数の最初の呼び出しに必要な時間を含めない 安定した結果が得られるようにパフォーマンスのヒントに従う 対象関数をループの内部に配置する 小さなサイズでは多くのループ反復が必要 #include <mkl.h> #define LOOP_COUNT 20 // 最初の呼び出し スレッド / バッファーを初期化 DGEMM( N, N, &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); // 最初の GEMM 呼出しの後に開始 double time_st = dsecnd(); for (i=0; i<loop_count; ++i){ DGEMM("N", "N", &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); } double time_end = dsecnd(); double time_avg = (time_end - time_st)/loop_count; double gflop = (2.0*m*n*k)*1E-9; printf("average time: %e seconds", time_avg); printf("gflop/sec : %.5f n," gflop/time_avg); 26

小さなサイズ向けのインテル MKL のソリューション インテル MKL は小行列演算のパフォーマンスを向上するさまざまなソリューションを提供 インテル MKL の活用分野 インテル MKL のソリューション 問題サイズ機能対応関数 MKL_DIRECT_CALL M, N, K < 20 関数呼び出しのオーバーヘッ ドを最小化 エラーチェックな し 最小限のコード変更 コンパクト API M, N, K < 20 ベクトル化有効 関数呼び出 しのオーバーヘッドを最小化 gemm gemm3m syrk trsm axpy dot potrf getrf getrs getri geqrf gemm trsm getrinp getrfnp potrf geqrf バッチ API M, N, K < 500 並列処理を利用 gemm gemm3m trsm パックド API M または N < 500 コピーのオーバーヘッドを最 小化 sgemm dgemm 27

インテル MKL 関連情報 インテル MKL デベロッパー リファレンス : https://software.intel.com/en-us/articles/mkl-reference-manual ( 英語 ) インテル MKL デベロッパー ガイド Linux*: https://www.xlsoft.com/jp/products/intel/tech/documents.html#doc-mkl Windows*: https://www.xlsoft.com/jp/products/intel/tech/documents.html#doc-mkl macos*: https://software.intel.com/en-us/mkl-macos-developer-guide ( 英語 ) インテル MKL 2018 リリースノート : https://www.xlsoft.com/jp/products/intel/perflib/mkl/2018/release_note/index.html インテル MKL フォーラム : https://software.intel.com/en-us/forums/intel-math-kernel-library/ ( 英語 ) インテル MKL の無料オプション : https://www.isus.jp/products/psxe/free_mkl/ インテル MKL-DNN: https://github.com/01org/mkl-dnn ( 英語 ) 28

法務上の注意書きと最適化に関する注意事項 本資料の情報は 現状のまま提供され 本資料は 明示されているか否かにかかわらず また禁反言によるとよらずにかかわらず いかなる知的財産権のライセンスも許諾するものではありません 製品に付属の売買契約書 Intel's Terms and Conditions of Sale に規定されている場合を除き インテルはいかなる責任を負うものではなく またインテル製品の販売や使用に関する明示または黙示の保証 ( 特定目的への適合性 商品性に関する保証 第三者の特許権 著作権 その他 知的財産権の侵害への保証を含む ) をするものではありません 性能に関するテストに使用されるソフトウェアとワークロードは 性能がインテル マイクロプロセッサー用に最適化されていることがあります SYSmark* や MobileMark* などの性能テストは 特定のコンピューター システム コンポーネント ソフトウェア 操作 機能に基づいて行ったものです 結果はこれらの要因によって異なります 製品の購入を検討される場合は 他の製品と組み合わせた場合の本製品の性能など ほかの情報や性能テストも参考にして パフォーマンスを総合的に評価することをお勧めします 2018 Intel Corporation. 無断での引用 転載を禁じます Intel インテル Intel ロゴ Intel Inside Intel Inside ロゴ Intel Atom Intel Core Intel vpro Xeon Intel Xeon Phi は アメリカ合衆国および / またはその他の国における Intel Corporation の商標です 最適化に関する注意事項 インテル コンパイラーでは インテル マイクロプロセッサーに限定されない最適化に関して 他社製マイクロプロセッサー用に同等の最適化を行えないことがあります これには インテル ストリーミング SIMD 拡張命令 2 インテル ストリーミング SIMD 拡張命令 3 インテル ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します インテルは 他社製マイクロプロセッサーに関して いかなる最適化の利用 機能 または効果も保証いたしません 本製品のマイクロプロセッサー依存の最適化は インテル マイクロプロセッサーでの使用を前提としています インテル マイクロアーキテクチャーに限定されない最適化のなかにも インテル マイクロプロセッサー用のものがあります この注意事項で言及した命令セットの詳細については 該当する製品のユーザー リファレンス ガイドを参照してください 注意事項の改訂 #20110804 29

30