議題 プロセッサーの動向とコード モダナイゼーション インテル アドバンスト ベクトル エクステンション 512 ( インテル AVX-512) 命令と演算性能 ベクトル化を支援するインテル Advisor ループの性能を可視化するルーフライン表示 姫野ベンチマークを用いたインテル Xeon Phi

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

PowerPoint Presentation

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

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

Click to edit title

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

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

PowerPoint Presentation

Microsoft PowerPoint - Intel Parallel Studio XE 2019 for Live

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

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

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

VXPRO R1400® ご提案資料

Click to edit title

Microsoft Word - HOKUSAI_system_overview_ja.docx

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

PowerPoint Presentation

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

Intel_ParallelStudioXE2013_ClusterStudioXE2013_Introduction.pptx

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

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

Presentation title

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

Intel Software Presentation Template

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

開発者用 Knights Landing✝ ガイド - 第 2 世代インテル® Xeon Phi™ プロセッサーの概要

openmp1_Yaguchi_version_170530

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

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

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

Parallel Studio XE Parallel Studio XE hotspot ( )

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

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

Code Modernization Online training plan

PowerPoint プレゼンテーション

Jackson Marusarz 開発製品部門

製品価格 ( 新規購入 ) INT6531 インテル VTune Amplifier XE 2017 for Windows Floating 1-275, ,000 INT6532 インテル VTune Amplifier XE 2017 for Linux Floating 1-27

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

インテル Advisor Python* API を使用したパ フォーマンス向上の考察 この記事は Tech.Decoded に公開されている Gaining Performance Insights Using the Intel Advisor Python* API の日本語参考訳です コード

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

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

Itanium2ベンチマーク

インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド

IntelR Compilers Professional Editions

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

インテルソウトウェア開発製品アカデミック版特定ユーザーライセンス標準価格表 株式会社アークブレイン 2016 年 5 月 10 日 ~ 製品型番 アカデミック版特定ユーザーライセンス 税別標準価格 税込標準価格 INT5744 インテル Parallel Studio XE 2016 Cluster

インテル® ソフトウェア・カンファレンス福岡 インテル® コンパイラーを使用する際に直面するよくある問題と課題

The 3 key challenges in programming for MC

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

製品型番 商用版特定ユーザーライセンス INT7001 インテル System Studio 2018 FreeBSD \163,080 INT6673 インテル Media Server Studio 2017 Essentials \84,000 \90,720 Edit INT6674 インテ

インテル® Parallel Studio XE 2017 for Linux* インストール・ガイド

Tutorial-GettingStarted

コードのチューニング

01_OpenMP_osx.indd

演習1: 演習準備

インテル(R) Visual Fortran Composer XE

修士論文

1重谷.PDF

Introducing Intel® Parallel Studio XE 2015

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

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

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

PowerPoint プレゼンテーション

Microsoft PowerPoint - OpenMP入門.pptx

KSforWindowsServerのご紹介

インテル® Parallel Studio XE 2016 Update 1 for Linux* インストール・ガイド

Microsoft PowerPoint - sales2.ppt

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

Microsoft PowerPoint Quality-sama_Seminar.pptx

Microsoft Word - IVF15.0.1J_Install.doc

NUMAの構成

GPGPUクラスタの性能評価

02_C-C++_osx.indd

PowerPoint プレゼンテーション

Microsoft Word - Dolphin Expressによる10Gbpソケット通信.docx

Microsoft PowerPoint - CCS学際共同boku-08b.ppt

N08

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

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

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

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

Oracle Real Application Clusters 10g: 第4世代

ビッグデータやクラウドのシステム基盤向けに処理性能を強化した「BladeSymphony」および「HA8000シリーズ」の新製品を販売開始

<4D F736F F D20332E322E332E819C97AC91CC89F090CD82A982E78CA982E9466F E393082CC8D5C91A291CC90AB945C955D89BF5F8D8296D85F F8D F5F E646F63>

PowerPoint プレゼンテーション

hotspot の特定と最適化

Microsoft PowerPoint - handai.pptx

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

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

アカ版特定ユーザーライセンス INT7006 INT7007 INT7008 INT6685 インテル System Studio 2018 Ultimate on \217,080 r インテル System Studio 2018 Ultimate on \217,080 r インテル Syst

Microsoft Word - openmp-txt.doc

インテル® VTune™ Amplifier : Windows 環境向けスタートガイド

スライド 1

Microsoft Word - PCOMM V6.0_FAQ.doc

本文ALL.indd

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

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

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

HPC143

ムーアの法則 : インテルでは順調に存続中 65nm 2005 製造中 45nm nm nm 2011 * 開発中 15nm 2013 * リサーチ 11nm 2015 * 8nm 2017 * インテルの革新的技術を順次適用予定 2 インテル製品は 予告なく

Transcription:

最新のインテル Parallel Studio XE を用いた迅速なベクトル化と並列化手法 インテル株式会社 技術本部ソフトウェア技術統括部 シニア スタッフ エンジニア 池井 満

議題 プロセッサーの動向とコード モダナイゼーション インテル アドバンスト ベクトル エクステンション 512 ( インテル AVX-512) 命令と演算性能 ベクトル化を支援するインテル Advisor ループの性能を可視化するルーフライン表示 姫野ベンチマークを用いたインテル Xeon Phi プロセッサー上でのケーススタディー 並列化とベクトル化の検討 インテル VTune Amplifier によるメモリー使用表示 メモリー階層 ( 高速メモリー ) の影響 NUMA 構成 ( クラスター ) の影響 まとめ 2

予測に沿った半導体の微細化ムーアの法則に沿って製造を続ける 高機能で複雑な新しい製品を 電力 価格 大きさを制御しながら提供する ストレインド シリコン Hi-K メタルゲート 3D トランジスター 90nm 65nm 45nm 32nm 22nm 14nm 10nm 7nm 3

より多いコア数. より幅広いベクトル. コプロセッサー性能を活かすにはすべての並列性を利用することが必要 Images do not reflect actual die sizes インテル Xeon プロセッサー 64-bit インテル Xeon プロセッサー 5100 シリーズ インテル Xeon プロセッサー 5600 シリーズ インテル Xeon プロセッサー E5-2600 (Sandy Bridge ) インテル Xeon プロセッサー E5-2600 v2 (Ivy Bridge ) インテル Xeon プロセッサー E5-2600 v3 (Haswell ) インテル Xeon Platinum 81xx プロセッサー (Skylake ) インテル Xeon Phi コプロセッサー Knights Landing 3+ Tflops コア数 1 2 6 8 12 18 28 61 72 スレッド数 2 2 12 16 24 36 56 244 288 SIMD 幅 128 128 128 256 256 256 512 512 512 インテル SSE2 インテル SSSE3 インテル SSE4.2 インテル AVX インテル AVX インテル AVX2 FMA インテル AVX-512 IMCI インテル AVX-512 開発コード名 4

より多いコア数. より幅広いベクトル. コプロセッサー性能を活かすにはすべての並列性を利用することが必要 単精度数 16 個の FMA 演算を 2 個同時に計算できる Images do not reflect actual die sizes 64 SP 演算 インテル Xeon プロセッサー 64-bit インテル Xeon プロセッサー 5100 シリーズ インテル Xeon プロセッサー 5600 シリーズ インテル Xeon プロセッサー E5-2600 (Sandy Bridge ) インテル Xeon プロセッサー E5-2600 v2 (Ivy Bridge ) 28 コア = 17 インテル インテル Xeon 92Xeon プロセッサー E5-2600 v3 (Haswell ) Platinum 81xx プロセッサー (Skylake ) インテル Xeon Phi コプロセッサー Knights Landing 3+ Tflops コア数 1 2 6 8 12 18 28 61 72 スレッド数 2 2 12 16 24 36 56 244 288 SIMD 幅 128 128 128 256 256 256 512 512 512 インテル SSE2 インテル SSSE3 インテル SSE4.2 インテル AVX インテル AVX インテル AVX2 FMA インテル AVX-512 IMCI インテル AVX-512 開発コード名 5

プログラミング方法の再検討コード モダナイゼーション 数コアのプロセッサーから始まって一貫したモデル 言語 ツールや手法でメニーコアに対応することで 持続的な価値を生み出すことができる アプリケーションは利用できるすべての並列性を活用する - 命令レベル : コアの特性を知り 考慮 - データレベル : SIMD 命令を用いるようにベクトル化 - スレッドレベル : OpenMP* などの標準ツールで並列化 - クラスターレベル : MPI などの標準ツールで並列化 専門家がプロセッサーに最適化した標準ライブラリーや言語を利用する ヘテロジニティーまで考慮した最適化を検討する 6

インテル Parallel Studio XE 高速なコードを素早く開発 Composer Edition ビルドコンパイラーとライブラリー Professional Edition 解析解析ツール Cluster Edition スケールクラスターツール インテル C/C++ コンパイラー最適化コンパイラー インテル Fortran コンパイラー最適化コンパイラー インテル TBB 2 C++ スレッド ライブラリー インテル MKL 3 高速なマス カーネル ライブラリー インテル IPP 4 画像 信号 データ処理 インテル DAAL 5 データ解析 マシンラーニング ライブラリー インテル Distribution for Python* ハイパフォーマンスなスクリプト インテル アーキテクチャー ベースのプラットフォーム オペレーティング システム : Windows* Linux* macos* 1 インテル VTune Amplifier パフォーマンス プロファイラー インテル Inspector メモリー / スレッドのデバッガー インテル Advisor ベクトル化の最適化とスレッドのプロトライプ生成 インテル MPI ライブラリーメッセージ パッシング インターフェイス ライブラリー インテル Trace Analyzer & Collector MPI チューニングと解析 インテル Cluster Checker クラスター診断エキスパート システム コードを強力に支援 - isus.jp/intel-parallel-studio-xe/ 1 Composer Edition でのみ利用可能 2 インテル スレッディング ビルディング ブロック 3 インテル マス カーネル ライブラリー 4 インテル インテグレーテッド パフォーマンス プリミティブ 5 インテル データ アナリティクス アクセラレーション ライブラリー 7

インテル Parallel Studio XE 高速なコードを素早く開発 Composer Edition SIMD 命令を活用するためビルドの強力なツールコンパイラーとライブラリー C/C++ インテル MKL インテル 3 コンパイラー Advisor 最適化コンパイラー インテル Fortran コンパイラー最適化コンパイラー インテル TBB 2 C++ スレッド ライブラリー 高速なマス カーネル ライブラリー インテル IPP 4 画像 信号 データ処理 インテル DAAL 5 データ解析 マシンラーニング ライブラリー インテル Distribution for Python* ハイパフォーマンスなスクリプト Professional Edition 解析解析ツール インテル VTune Amplifier パフォーマンス プロファイラー インテル Inspector メモリー / スレッドのデバッガー インテル Advisor ベクトル化の最適化とスレッドのプロトライプ生成 Cluster Edition スケールクラスターツール インテル MPI ライブラリーメッセージ パッシング インターフェイス ライブラリー インテル Trace Analyzer & Collector MPI チューニングと解析 インテル Cluster Checker クラスター診断エキスパート システム インテル アーキテクチャー ベースのプラットフォーム オペレーティング システム : Windows* Linux* macos* 1 コードを強力に支援 - isus.jp/intel-parallel-studio-xe/ 1 Composer Edition でのみ利用可能 2 インテル スレッディング ビルディング ブロック 3 インテル マス カーネル ライブラリー 4 インテル インテグレーテッド パフォーマンス プリミティブ 5 インテル データ アナリティクス アクセラレーション ライブラリー 8

新機能 : ルーフライン 高速な解析 ほか インテル Advisor ベクトル化の最適化 ルーフライン解析により効率良く最適化 影響の大きい最適化されていないループを見つける キャッシュまたはベクトル化の最適化が必要か? 演算負荷の高いアルゴリズムのほうが良いか? 高速なデータ収集 モジュールでフィルター 必要なもののみ計算 詳細な解析を追跡 すべてのサイトが実行されたら停止する より多くのデータと推奨事項により的確な判断が可能 インテル MKL フレンドリー コードが最適化されているか? 最適なバージョンが使用されているか? トリップカウントと関数呼び出しカウント 上位 5 つの推奨事項をサマリーに表示 動的な命令ミックス エキスパート機能により各命令の正確なカウントを表示 簡単に MPI を起動 コマンドライン ダイアログで MPI をサポート 9

インテル Xeon プロセッサーとインテル Xeon Phi プロセッサー向け命令セット アーキテクチャー (ISA) 大きいコア低レイテンシーに注力 / マルチスレッド シングルスレッドエンタープライズ HPC 向け SIMD サポートベスト パフォーマンスで一般的なワークロードのパフォーマンスを最適化 Pftchwt1 AVX512PF AVX512ER AVX512VL AVX512BW AVX512DQ AVX512CD AVX512CD 小さいコアスループットに注力 / 多くのスレッド ( メニーコア ) HPC 向け SIMD サポートパフォーマンス / ワットにおいて業界のリーダーシップ AVX2 AVX512F AVX2 AVX512F AVX2 AVX AVX AVX AVX SSE* SSE* SSE* SSE* SSE* SKL: インテル Xeon スケーラブル プロセッサー ( 開発コード名 Skylake) KNL: インテル Xeon Phi プロセッサー ( 開発コード名 Knights Landing) HSW: 開発コード名 Haswell SNB: 開発コード名 Sandy Bridge NHM: 開発コード名 Nehalem NHM SNB HSW KNL SKL インテル インテル Xeon Phi Xeon プロセッサースケーラブル プロセッサー開発コード名 10

論理レジスターファイルの拡張 汎用レジスター (32/64) EAX EBX RAX RBX インテル MMX テクノロジーおよび浮動小数点レジスター (64) MM0/ST0 MM1/ST1 インテル SSE (128)/ インテル AVX (256)/ インテル AVX (512) レジスター XMM0 XMM1 XMM2 ZMM0 ZMM1 ZMM2 ECX EDX EBP ESI EDI ESP RCX RDX RBP RSI RDI RSP MM2/ST2 MM3/ST3 MM4/ST4 MM5/ST5 MM6/ST6 MM7/ST7 MASK レジスター (64) K0 K1 K2 K3 XMM3 XMM4 XMM5 XMM6 XMM7 XMM8 XMM9 XMM10 XMM11 ZMM3 ZMM4 ZMM5 ZMM6 ZMM7 ZMM8 ZMM9 ZMM10 ZMM11 ZMM16 ZMM17 ZMM18 ZMM19 ZMM20 R8 R9 K4 K5 XMM12 XMM13 XMM14 ZMM12 ZMM13 ZMM14 ZMM21 ZMM22 ZMM23 R10 R11 EFLAGS K6 K7 XMM15 ZMM15 ZMM24 ZMM25 R12 ZMM26 R13 R14 R15 プログラムカウンター (32/64) RIP ZMM27 ZMM28 ZMM9 ZMM30 ZMM31 インテル SSE: インテル ストリーミング SIMD 拡張命令インテル AVX : インテル アドバンスト ベクトル エクステンション 11

単一のベクトルレーンを使用しない! ベクトル化およびスレッド化されていないソフトウェアは パフォーマンスを得られません 12

SIMD (Single Instruction Multiple Data) 命令 for(i = 0; i <= MAX; i++) c[i] = a[i] + b[i]; for(i = 0; i <= MAX; i+8) c[i:8] = a[i:8] + b[i:8]; a[i] + b[i] a[i] b[i] a[i+1] a[i+2] a[i+3] a[i+4] a[i+5] a[i+6] a[i+7] + b[i+1] b[i+2] b[i+3] b[i+4] b[i+5] b[i+6] b[i+7] c[i] c[i] c[i+1] c[i+2] c[i+3] c[i+4] c[i+5] c[i+6] c[i+7] 13

一般的なループのベクトル化の問題 ループの反復 ( イテレーション ) 間に依存性があってはならない 一部の依存ループはベクトル化が可能 ループ内の変数は明確でなければならない 多くの関数呼び出しはベクトル化できない 条件分岐はベクトル化を妨げる 比較的単純な IF 文はマスクによりベクトル化可能 ループはカウント可能でなければならない ネストするループの外部ループはベクトル化できない 混在データ型はベクトル化できない 14

インテル Advisor スレッド化とベクトル化によるアプリケーションのパフォーマンスを向上 コンパイラーは常にコードをベクトル化するとは限りません インテル Advisor を使用してループ伝搬依存をチェック ベクトル化を強制しても問題ないか? C++: pragma simd Fortran: SIMD ディレクティブ ベクトル化が常に効率的とは限りません ストライド 1 はストライド 2 よりもキャッシュに効率的インテル Advisor で解析 データ配置の再構成を検討 SIMD Data Layout Templates が有効 構造体配列はデータを直観的に構成するには優れていますが 配列構造体ほど効率的ではありません SIMD Data Layout Templates (SDLT) を使用して ベクトル化に効率良いデータにマッピングします 15

高速なコードを迅速に開発 : インテル Advisor ベクトル化の最適化 問題 : インテル AVX2 向けの再コンパイルでは わずかなゲイン どこをベクトル化するか? 新しいアーキテクチャー向けに組込み関数を使用すべきか? コンパイラー レポートの内容が分からない? データ主導型のベクトル化 : 最も効率良いベクトル化の候補は? ベクトル化を妨げているものは? その原因? ループはベクトル化に適しているか? データの再構成でパフォーマンスを改善可能か? 単純に pragma simd を使用しても安全か? インテル Advisor のベクトル化アドバイザーは 開発者が本来行うべき作業に集中することを可能にします 最適化に費やすことができる時間が限られている場合 非常に有効です ハイエンド コンピューティング アイルランド センターシニア ソフトウェア アーキテクト Gilles Civario 16

姫野ベンチマークでの試行 姫野ベンチマークは 理化学研究所情報基盤センターのセンター である姫野龍太郎氏が非圧縮流体解析コードの性能評価のために考えたもので ポアソン方程式解法をヤコビの反復法で解く場合に主要なループの処理速度を計るものです 非圧縮流体解析のポアソン方程式をヤコビの反復法で解く場合に使用する主要なループの処理速度を測定 (19 点ステンシルコード ) 単精度の MFLOPS を性能として比較する C または Fortran77/90 のソースコードで供給 クラスターシステム用に MPI を またマルチプロセッサー用に OpenMP* のものを準備 17

ステンシルの例 (6 点 ) 全格子点について k i j A_new(I,J,K) = F( A(I-1,J,K), A(I+1,J,K), A(I,J-1,K), A(I,J+1,K), A(I,J,K+1), A(I,J,K-1) ) 18

姫野ベンチマーク (http://accc.riken.jp/supercom/himenobmt/download/mpi-vpp) 279 #pragma omp parallel shared(a,p,b,c,bnd,wrk1,wrk2,nn,imax,jmax,kmax,omega,gosa) private(i,j,k,s0,ss,gosa1,n) 280 { 281 for(n=0 ; n<nn ; n++){ 282 #pragma omp barrier 283 #pragma omp master 284 { 285 gosa = 0.0; 286 } 287 gosa1= 0.0; 288 #pragma omp for nowait 289 for(i=1 ; i<imax; i++) 290 for(j=1 ; j<jmax ; j++) 291 for(k=1 ; k<kmax ; k++){ 292 s0= MR(a,0,i,j,k)*MR(p,0,i+1,j, k) 293 + MR(a,1,i,j,k)*MR(p,0,i, j+1,k) 294 + MR(a,2,i,j,k)*MR(p,0,i, j, k+1) 295 + MR(b,0,i,j,k) 296 *( MR(p,0,i+1,j+1,k) - MR(p,0,i+1,j-1,k) 298 - MR(p,0,i-1,j+1,k) + MR(p,0,i-1,j-1,k) ) 299 + MR(b,1,i,j,k) 300 *( MR(p,0,i,j+1,k+1) - MR(p,0,i,j-1,k+1) 19

逐次プログラム版のコンパイル $ icc -g -O2../himenoBMTxpa.c -o hime.ser../himenobmtxpa.c(279): 警告 #3180: 識別できない OpenMP プラグマです #pragma omp parallel shared(a,p,b,c,bnd,wrk1,wrk2,nn,imax,jmax,kmax,omega,gosa) private(i,j,k,s0,ss,gosa1,n) ^../himenobmtxpa.c(282): 警告 #3180: 識別できない OpenMP プラグマです #pragma omp barrier $./hime.ser Xl 20

逐次プログラム版の実行 $./hime.ser Xl Grid-size = Xl mimax = 512 mjmax = 512 mkmax = 1024 imax = 511 jmax = 511 kmax =1023 Start rehearsal measurement process. Measure the performance in 3 times. MFLOPS: 601.735307 time(s): 45.059454 6.103516e-05 cpu : 44.971282 sec. Loop executed for 3 times Gosa : 6.103516e-05 MFLOPS measured : 602.915087 Score based on Pentium III 600MHz using Fortran 77: 7.278067 21

OpenMP* 版のコンパイルと実行 $ icc -g -O3 -qopenmp -qopt-streaming-stores always./himenobmtxpa.c -o hime.par $./hime.par Xl mimax = 512 mjmax = 512 mkmax = 1024 imax = 511 jmax = 511 kmax =1023 Start rehearsal measurement process. Measure the performance in 3 times. MFLOPS: 6028.912509 time(s): 4.497306 4.365373e-04 cpu : 58.707601 sec. Loop executed for 40 times Gosa : 4.255282e-04 MFLOPS measured : 6157.945238 Score based on Pentium III 600MHz using Fortran 77: 74.335408 22

性能解析ツールの実行 ( インテル VTune Amplifier とインテル Advisor) $ amplxe-gui もしくは $ amplxe-cl -collect hotspots -app-working-dir himeno/openmp -- himeno/openmp/hime.par Xl $ advixe-gui もしくは $ advixe-cl -collect survey -no-support-multi-isa-binaries -interval=10 -data-limit=100 -resume-after=0 -project-dir micperf/himeno -- micperf/himeno/openmp/hime.par Xl 23

PLATINUM 81xx

PLATINUM 81xx 25

PLATINUM 81xx 最も時間を要しているループがベクトル化されていない!! ベクトル化されているループも 128 ビットのインテル SSE 命令!! 26

ベクトル化のために pragma を追加 279 #pragma omp parallel shared(a,p,b,c,bnd,wrk1,wrk2,nn,imax,jmax,kmax,omega,gosa) private(i,j,k,s0,ss,gosa1,n) 280 { 281 for(n=0 ; n<nn ; n++){ 282 #pragma omp barrier 283 #pragma omp master 284 { 285 gosa = 0.0; 286 } 287 gosa1= 0.0; 288 #pragma omp for nowait 289 for(i=1 ; i<imax; i++) 290 for(j=1 ; j<jmax ; j++) 291 #pragma omp simd reduction(+:gosa1) 292 for(k=1 ; k<kmax ; k++){ 293 s0= MR(a,0,i,j,k)*MR(p,0,i+1,j, k) 294 + MR(a,1,i,j,k)*MR(p,0,i, j+1,k) 295 + MR(a,2,i,j,k)*MR(p,0,i, j, k+1) 296 + MR(b,0,i,j,k) 297 *( MR(p,0,i+1,j+1,k) - MR(p,0,i+1,j-1,k) 27

インテル AVX-512 版のコンパイルと実行 $ icc -g -O2 -qopenmp -xmic-avx512 -qopt-streaming-stores always himeno2.c -o hime2.avx $./hime2.avx Xl Wait for a while cpu : 53.044081 sec. Loop executed for 138 times Gosa : 4.136810e-04 MFLOPS measured : 23513.231616 Score based on Pentium III 600MHz using Fortran 77: 283.839107 28

インテル Xeon プロセッサーとインテル Xeon Phi プロセッサー向け命令セット アーキテクチャー (ISA) 大きいコア低レイテンシーに注力 / マルチスレッド シングルスレッドエンタープライズ HPC 向け SIMD サポートベスト パフォーマンスで一般的なワークロードのパフォーマンスを最適化 Pftchwt1 AVX512PF AVX512ER AVX512VL AVX512BW AVX512DQ AVX512CD AVX512CD 小さいコアスループットに注力 / 多くのスレッド ( メニーコア ) HPC 向け SIMD サポートパフォーマンス / ワットにおいて業界のリーダーシップ AVX2 AVX512F AVX2 AVX512F AVX2 AVX AVX AVX AVX SSE* SSE* SSE* SSE* SSE* SKL: インテル Xeon スケーラブル プロセッサー ( 開発コード名 Skylake) KNL: インテル Xeon Phi プロセッサー ( 開発コード名 Knights Landing) HSW: 開発コード名 Haswell SNB: 開発コード名 Sandy Bridge NHM: 開発コード名 Nehalem NHM SNB HSW KNL SKL インテル インテル Xeon Phi Xeon プロセッサースケーラブル プロセッサー開発コード名 29

インテル C/C++ コンパイラー 18.0 コンパイラー オプション インテル Xeon スケーラブル プロセッサー対応コンパイラー オプション一覧 オプション -xcore-avx512 -xcore-avx512 qopt-zmm-usage=high -xcommon-avx512 説明 xcore-avx2 からのスムーズな移行 ( エンタープライズ向け ) 512 ビット命令のメリットが大きいアプリケーション (HPC 向け ) 512 ビット命令のメリットが大きくインテル Xeon Phi プロセッサー (KNL ) とバイナリー互換が必要なアプリケーション -xcore-avx2 クライアント アプリケーション インテル Xeon プロセッサー E5 v4 ファミリー (Broadwell ) と互換性またはインテル Xeon Phi プロセッサー (KNL ) と互換性が必要な場合 [OpenMP* 4.5] #pragma omp simd simdlen() simdlen を追加し SIMD チャンクごと必要な反復数を指定 #pragma omp declare simd simdlen(16) 開発コード名 30

31

最も時間を要しているループがインテル AVX-512 でベクトル化された 32

Knights Landing 本当のブレークスルーに向けての統合的な取り組みシステムメモリー計算最大 384GB DDR4 (6 ch > 90GB/S, 2400 T/S).................. 60 以上のコア......... インテル Xeon プロセッサーとバイナリー互換 3+ TFLOPS 1, 3X ST 2 ( 単一スレッド ) KNC の性能比 2D メッシュ Out-of-Order コア パッケージ内メモリー 5x 以上 STREAM vs. DDR4 3 最大 16GB (>450GB/S) 内蔵インテル Omni-Path ファブリック プロセッサー パッケージ I/O 最大 36 PCIe* 3.0 レーン インテル Omni-Path ファブリック ( オプション ) 最初の統合化したインテル プロセッサー 開発コード名 33

メモリーモード キャッシュモード ブート時に設定する 3 つのモード フラットモード ハイブリッド モード 16GB MCDRAM DDR 16GB MCDRAM DDR 物理的アドレス空間 4 か 8GB MCDRAM 8 か 12GB MCDRAM DDR 物理的アドレス空間 SW 的には MCDRAM を意識しない 64 バイト ラインのダイレクトマップ タグをライン中に持つ DDR のすべてのメモリー空間をカバー MCDRAM をメモリーとして使用 SW で明示的に制御 MCDRAM と DDR は同じメモリー空間 34

Knights Landing ブロック図 MCDRAM MCDRAM DRAM DRAM コア + 2 VPU CHA コア + 2 VPU 共用キャッシュ 1MB MCDRAM MCDRAM タイルの構成 開発コード名 35

メモリー階層の確認 $ numactl -H available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 node 0 size: 98200 MB node 0 free: 92941 MB node 1 cpus: node 1 size: 16384 MB node 1 free: 15897 MB node distances: node 0 1 0: 10 31 1: 31 10 36

メモリー階層の確認 $ numactl -H available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 node 0 size: 98200 MB DDR メモリーがノード 0 node 0 free: 92941 MB node 1 cpus: node 1 size: 16384 MB node 1 free: 15897 MB 16GB の MCDRAM はノード 1 node distances: node 0 1 0: 10 31 1: 31 10 37

インテル AVX-512 版のコンパイルと実行 $ icc -g -O2 -qopenmp -xmic-avx512 -qopt-streaming-stores always himeno2.c -o hime2.avx $./hime2.avx Xl Wait for a while cpu : 53.044081 sec. Loop executed for 138 times Gosa : 4.136810e-04 MFLOPS measured : 23513.231616 Score based on Pentium III 600MHz using Fortran 77: 283.839107 38

PLATINUM 81xx 39

DDR メモリーで 89GB/s PLATINUM 81xx 40

PLATINUM 81xx コア周波数の変動 41

ルーフライン モデルとは? どれくらい高速化できるか理解しているか? バークレーの研究者により提唱された パフォーマンスは 計算式 / 実装およびコード生成 / ハードウェアにより制限されます 2 つのハードウェア要件 ピーク FLOPS ピーク帯域幅 アプリケーションのパフォーマンスは ハードウェアの仕様により制限されます算術密度 (Flop/ バイト ) GFLOPS= 42

プラットフォームのピーク FLOPS 1 秒あたりの浮動小数点演算数 GFLOPS= 理論値は仕様によって算出可能例 ) 2 ソケットのインテル Xeon プロセッサー E5-2697 v2 ピーク FLOP = 2 x 2.7 x 12 x 8 x 2 = 1036.8 GFLOPS ソケット数 コア周波数 コア数 1 つのポートを加算に もう 1 つを乗算に SIMD レジスター中の単精度要素の数 より現実的な値は Linpack を実行して求めることができます =~ 930 GFLOPS (2 ソケットのインテル Xeon プロセッサー E5-2697 v2) 43

プラットフォームのピーク帯域幅 1 秒あたりの転送バイト数 GLOPS = 理論値は仕様によって算出可能例 ) 2 ソケットのインテル Xeon プロセッサー E5-2697 v2 ピーク BW = 2 x 1.866 x 8 x 4 = 119GB/ 秒 ソケット数 メモリー周波数チャネルあたりのバイト数 メモリーチャネル数 より現実的な値は Stream を実行して求めることができます =~ 100 Gflop/ 秒 (2 ソケットのインテル Xeon プロセッサー E5-2697 v2) 44

ルーフラインを描く限界を定義 GFLOPS = 2 ソケットのインテル Xeon プロセッサー E5-2697 v2 ピーク Flops = 1036 GFLOPS ピーク BW = 119GB/ 秒 1036 GFLOPS AI [Flop/ バイト ] 8.7 45

ルーフラインを描く限界を定義 GFLOPS = 2 ソケットのインテル Xeon プロセッサー E5-2697 v2 ピーク Flops = 1036 GFLOPS ピーク BW = 119GB/ 秒 1036 GFLOPS 119 1 AI [Flop/ バイト ] 8.7 46

秒 インテル Advisor のルーフライン : 実際の値 ユーザ モード サンプリング ルートアクセスは不要 Performance = Flops/seconds ルーフラインの実行プロファイル : Y 座標 : FLOPS = #FLOP ( マスクを考慮 ) / #Seconds X 座標 : AI = #FLOP / #Bytes ルーフ マイクロベンチマーク現状のコンフィグの実際のピーク値 #FLOP バイナリー インストルメンテーション CPU のカウンターは不使用 AI = Flop/ バイト バイト バイナリー インストルメンテーションオペランドの大きさを加算 ( キャッシュラインではない ) 47

48

メモリー階層の確認 $ numactl -H available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 node 0 size: 98200 MB DDR メモリーがノード 0 node 0 free: 92941 MB node 1 cpus: node 1 size: 16384 MB node 1 free: 15897 MB 16GBの MCDRAM はノード 1 node distances: node 0 1 0: 10 31 1: 31 10 49

DDR メモリーで 89GB/s PLATINUM 81xx 50

高速メモリーでの実行 $ numactl -m 1./hime2.avx Xl mimax = 512 mjmax = 512 mkmax = 1024 imax = 511 jmax = 511 kmax =1023 Start rehearsal measurement process. Measure the performance in 3 times. cpu : 37.734588 sec. Loop executed for 354 times Gosa : 3.960919e-04 MFLOPS measured : 84787.887420 Score based on Pentium III 600MHz using Fortran 77: 1023.513851 51

高速メモリーでの実行 $ numactl -m 1./hime2.avx Xl mimax = 512 mjmax = 512 mkmax = 1024 imax = 511 jmax = 511 kmax =1023 Start rehearsal measurement process. Measure the performance in 3 times. cpu : 37.734588 sec. Loop executed for 354 times Gosa : 3.960919e-04 MFLOPS measured : 84787.887420 Score based on Pentium III 600MHz using Fortran 77: 1023.513851 52

53

MCDRAM メモリーで 327GB/s 54

Skylake 1 上での実行 $ icc -g -O2 -qopenmp -xcore-avx512 -qopt-streaming-stores always -qopt-streaming-cache-evict=0 himeno2.c -o himeno2 $./himeno2 Xl mimax = 512 mjmax = 512 mkmax = 1024 imax = 511 jmax = 511 kmax =1023 Start rehearsal measurement process. Measure the performance in 3 times. 1 開発コード名インテル Xeon Platinum 8170 CPU @ 2.10GHz 26 コア cpu : 26.680347 sec. Loop executed for 185 times Gosa : 4.090138e-04 MFLOPS measured : 62668.661618 Score based on Pentium III 600MHz using Fortran 77: 756.502434 55

56

57

58

Sub NUMA クラスター 3. SNC-4: 4 ソケットのマシン ( コア数は 4 分の 1) として見える MCDRAM MCDRAM MCDRAM MCDRAM $ numactl -H available: 8 nodes (0-7) node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 64 65... node 0 size: 24452 MB node 0 free: 22976 MB node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 80... node 1 size: 24576 MB node 1 free: 23698 MB node 2 cpus: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 96... node 2 size: 24576 MB node 2 free: 23843 MB node 3 cpus: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 112... node 4 cpus: node 4 size: 4096 MB node 4 free: 3982 MB node 5 cpus: node 7 cpus: node 7 size: 4096 MB node 7 free: 3982 MB 59

MPI 版の姫野プログラムをハイブリッドに 370 integer,intent(in) :: nn 371 real(4),intent(inout) :: gosa 372 integer :: i,j,k,loop,ierr 373 real(4) :: s0,ss,wgosa 374! 375 do loop=1,nn 376 gosa=0.0 377 wgosa=0.0 378!$OMP PARALLEL DO SHARED (kmax,jmax,imax,nn,a,p,b,c,bnd,wrk1,wrk2) & 379!$OMP PRIVATE (k,i,j,s0,ss) REDUCTION (+:wgosa) 380 do k=2,kmax-1 381 do j=2,jmax-1 382 do i=2,imax-1 383 s0=a(i,j,k,1)*p(i+1,j,k) & 384 +a(i,j,k,2)*p(i,j+1,k) & 385 +a(i,j,k,3)*p(i,j,k+1) & 386 +b(i,j,k,1)*(p(i+1,j+1,k)-p(i+1,j-1,k) & 387 -p(i-1,j+1,k)+p(i-1,j-1,k)) & 388 +b(i,j,k,2)*(p(i,j+1,k+1)-p(i,j-1,k+1) & 389 -p(i,j+1,k-1)+p(i,j-1,k-1)) & 60

ハイブリッド版のコンパイルと実行 $ mpiifort -g -O3 -xmic_avx512 -qopenmp -qopt-streaming-stores always himeno4.f90 -o himeno4.avx $ export OMP_NUM_THREADS=2 $ numactl -m 4,5,6,7 mpiexec.hydra -n 64./himeno4.avx The loop will be excuted in 1008 times. This will take about one minute. Wait for a while. Loop executed for 1008 times Gosa : 3.6641795E-04 MFLOPS: 155347.575570096 time(s): 58.6443572044373 Score based on Pentium III 600MHz : 1875.273 61

MCDRAM メモリーで 386GB/s 62

高速メモリーをプログラムから使用する方法 (F90) module pres implicit none real(4),dimension(:,:,:),allocatable :: p!dec$ ATTRIBUTES FASTMEM :: p end module pres! module mtrx implicit none real(4),dimension(:,:,:,:),allocatable :: a,b,c!dec$ ATTRIBUTES FASTMEM :: a,b,c end module mtrx! 63

高速メモリーをプログラムから使用する方法 (C) #include <hbwmalloc.h> Mat->m= NULL; Mat->m= (float*) hbw_malloc(mnums * mrows * mcols * mdeps * sizeof(float)); } return(mat->m!= NULL)? 1:0; void clearmat(matrix* Mat) { if(mat->m) hbw_free(mat->m); Mat->m= NULL; Mat->mnums= 0; 64

コード モダナイゼーションのまとめ 項目利用するツールなど考察 1. スレッド化 OpenMP* OpenMP* を使用してコア数 4 のスレッドを 活用 2. ベクトル化 SIMD pragma インテル AVX-512 により 512b の VPU を活用 3. ブロック化 (MPI による分割 ) 4. キャッシュ クラスターモード フラットかキャッシュか? AllToAll Quadrant SNC4? 5. ファブリック MPI インテル Omni Path アーキテクチャーなどの 高速ファブリックを利用 6. データレイアウト メモリー階層 Numactl や FASTMEM HBMMALLOC を利用 65

結論 プロセッサーのコア数と SIMD 幅が広がり 並列化 = コード モダナイゼーションは必須 インテル AVX-512 命令でベクトル化の重要性が大きく インテル Advisor により 重要なループを効果的にベクトル化 キャッシュやパッケージメモリーなどのメモリーの階層構造の演算性能への影響も大きく インテル VTune Amplifier でメモリー性能を可視化 インテル Advisor のルーフライン表示によりループ性能を可視化 より高性能で複雑になる IA アーキテクチャー上でもインテル Parallel Studio XE で迅速なプログラムの最適化を実現 66

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