Microsoft PowerPoint - iaca.ppt

Similar documents
適応フィルタのSIMD最適化

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

ストリーミング SIMD 拡張命令2 (SSE2) を使用した、倍精度浮動小数点ベクトルの最大/最小要素とそのインデックスの検出

動画系のSIMD最適化

H.264/AVC 2 H.265/HEVC 1 H.265 JCT-VC HM(HEVC Test Model) HM 5 5 SIMD HM 33%

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

インテル® VTune™ パフォーマンス・アナライザー 9.1 Windows* 版

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

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

インテル(R) Visual Fortran Composer XE

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

1007  ステルスデバッガを利用したマルウェア解析手法の提案

Exploring the x64

Microsoft PowerPoint - NxLec ppt

Microarray Data Analysis Tool Ver3.0 Manual.doc

AxC_lj.fm

Security Solution 2008.pptx

Managing and Sharing MATLAB Code

160311_icm2015-muramatsu-v2.pptx

untitled

untitled

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

Code_Aster / Salome-Meca 中級者への道 2015年5月31日

PowerPoint Presentation

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

PSG共通フォーマットv110

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

-5 -

Upload path ファイル送信先ディレクトリのパスを指定します ホームディレクトリに画像を送信する場合は空白のまま サブディレクトリに画像を送信する場合はディレクトリ名を指定します さらに下位のディレクトリを指定する場合は \ マークを利用します 例 ) ホームディレクトリ以下の camera

修士論文

TFTP serverの実装

MultiLABELISTOCX と MultiLABELISTV4 MLOCX は MLV4 のレイアウト発行機能を継承しています したがって MLV4 の振分発行やプ リセット発行を使用するための登録情報は使用できません MLV4 のレイアウト管理でレイアウトを作成すると 拡張子が m lay

計算機アーキテクチャ特論 後半第2回 アウトオブオーダー実行 Out-of-Order Execution

#include <stdio.h> unsigned char x86[] = { 0x8b, 0x44, 0x24, 0x04, // mov eax,[esp+4] 0x03, 0x44, 0x24, 0x08, // add eax,[esp+8] 0xc3 // ret }; int ma

チーズケーキ技術 17.12

3 SIMPLE ver 3.2: SIMPLE (SIxteen-bit MicroProcessor for Laboratory Experiment) 1 16 SIMPLE SIMPLE 2 SIMPLE 2.1 SIMPLE (main memo

PowerPoint プレゼンテーション

ソフトウェア基礎技術研修

Cisco Feature Navigator 簡易説明書

Microsoft PowerPoint - Sol7 [Compatibility Mode]

Microsoft PowerPoint - Chap4 [Compatibility Mode]

SQUFOF NTT Shanks SQUFOF SQUFOF Pentium III Pentium 4 SQUFOF 2.03 (Pentium 4 2.0GHz Willamette) N UBASIC 50 / 200 [

任意の間隔での FTP 画像送信イベントの設定方法 はじめに 本ドキュメントでは AXIS ネットワークカメラ / ビデオエンコーダにおいて任意の間隔で画像を FTP サー バーへ送信するイベントの設定手順を説明します 設定手順手順 1:AXIS ネットワークカメラ / ビデオエンコーダの設定ページ

PowerPoint プレゼンテーション

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

HULFT-DataMagic Ver2.2.0 製品対応OS

インテル エクステンデッド メモリ 64 テクノロジ ソフトウェア デベロッパーズ ガイド 第 2 巻 ( 全 2 巻 ) リビジョン 1.1 注記 : 本書は 第 1 巻と第 2 巻で構成されています ソフトウェアを設計する際は 第 1 巻と第 2 巻の両方を参照してください

PrimerArray® Analysis Tool Ver.2.2

$ cmake --version $ make --version $ gcc --version 環境が無いあるいはバージョンが古い場合は yum などを用いて導入 最新化を行う 4. 圧縮ファイルを解凍する $ tar xzvf gromacs tar.gz 5. cmake を用

VDM-SL ISO.VDM++ VDM-SL VDM- RT VDM++ VDM,.VDM, [5]. VDM VDM++.,,, [7]., VDM++.,., [7] VDM++.,,,,,,,.,,, VDM VDMTools OvertureTo

PowerPoint プレゼンテーション

Microsoft Word - SmartManager User's Manual-2 3 0_JP.docx

tutorial_lc.dvi

Linkexpress トラブル初期調査資料 採取コマンド使用手引書

PCIe SSD (P3700 / P4501 / P4600 / P4800X 向け)書き込み保証値と書き込みデータ量の確認方法


BLOCK TYPE.indd

はじめに MS842e 仮想 COM ドライバ インストールマニュアル このマニュアルでは ユニテック 2D バーコードスキャナ MS842e の 仮想 COM ドライバ のインストール方法を紹介しています 仮想 COM ドライバは 日本語入りの QR コード を読取る場合に必要です また 使用して

パケットモニター (Wireshark) の使い方 第 1 版 1.Wireshark とは ネットワーク上 (LAN ケーブルに流れている ) のパケットを取得して その中の情報を画面に表示するソフトウェア (LAN アナライザーまたはパケットモニター ) の 1 つに Wiresh

NFC ucode タグのメモリフォーマット規定

Software-Defined Tester(SDT) を用いた高精度遅延測定による SDN/NFV 品質向上 富士通アドバンストテクノロジ株式会社システム技術統括部大久保克彦 0 Copyright 2017 FUJITSU AD

Transcription:

Intel Architecture Code Analyzer について x86/x64 最適化勉強会 #2 (2011/10/1) Shiraishi Masao

自己紹介 白石匡央 (msiro) ブログ :Coding Memorandum http://msirocoder.blog35.fc2.com/ 仕事 : 映像 Codec, トランスコーダの開発 趣味 : 競技プログラミング 変遷 : MSX(Z80) SunOS(SPARC) Windows(x86)

本日の発表について 静的解析ツール Intel Architecture Code Analyzer を取り上げます Intel CPU のアーキテクチャをより深く理解できる ( かもしれません )

x86/x64 最適化 コードを速くしたい 並列化 ワークロード最適化 SIMD 化 データ構造を選ぶ ボトルネックの排除 Intel アーキテクチャは複雑 ボトルネック要因が簡単には分からない ツールを使おう! 一般的にはプロファイラ ( 実行解析 ) を使います でも, 本日は 静的解析ツール を取り上げます

whatif.intel.com インテルの実験的ソフトウェアの公開の場 Performance Tuning Intel Performance Bottleneck Analyzer Intel Software Autotuning Tool Intel Software Tuning Agent Intel Architecture Code Analyzer : (IACA) Intel Performance Tuning Utility Intel Platform Modeling with Machine Learning

IACA 機能概要 機能概要 x86/x64 命令がどの port で実行されるかを示す front-end,ooo, メモリキャッシュを考慮する 各 port のサイクル数を示す ( コードの静的解析による ) スループットとレイテンシを示す クリティカルパスを示す 元々は Sandy Bridge が出る前に AVX を評価するツールだった (?) Ver.1.1 から Nehalem,Westmere をサポート IACA は ASCII 出力のコマンドラインツールです 次画面で実行結果例を示します

Intel(R) Architecture Code Analyzer Version - 1.1.3 Analyzed File -.. test Release test.exe Binary Format - 32Bit Architecture - Intel(R) AVX Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2^ X 1 1 CP mov dword ptr [esp+0xc], eax 2^ 1 X 1 mov dword ptr [esp+0x8], ecx 1 1 1 X X CP mov eax, dword ptr [esp+0xc] 1 X X 1 1 mov edx, dword ptr [esp+0x8] 1 1 1 X X movdqa xmm0, xmmword ptr [eax] 1 1 lea esi, ptr [0x4030b0] 1 X X 1 1 movdqa xmm4, xmmword ptr [eax+0x20] 1 1 lea ecx, ptr [0x403130] 1 1 X pshuflw xmm0, xmm0, 0xd8 1 X 1 pshufd xmm1, xmm0, 0x0 2^ 1 1 1 X X pmaddwd xmm1, xmmword ptr [esi] 1 1 X pshufd xmm3, xmm0, 0x55 1 X 1 pshufhw xmm0, xmm0, 0xd8 2^ 1 X X 1 1 pmaddwd xmm3, xmmword ptr [esi+0x20] 1 1 X pshufd xmm2, xmm0, 0xaa 1 X 1 pshufd xmm0, xmm0, 0xff

前提知識 ( パイプライン ) SandyBridge のパイプライン x86/x64 命令 front-end μops スケジューラ発行ポート実行ユニット インテル 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス マニュアル より

前提知識 ( 発行ポート ) SandyBridge の発行ポートと実行ユニット インテル 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス マニュアル より

IACA を知るきっかけ Intel Software Developer Day 2011 (7/15) SandyBridge 向けワークロードの最適化 の中で紹介 ボトルネックの大部分はイベントベースの解析で検知できる IACA もしくはコードの調査のみで判別できるものがある 特定 Port への高い依存性の検知 次ページの画面例とともに紹介 iaca.exe -arch SNB -analysis THROUGHPUT -graph g.dot regspill.exe

IACA 画面例? Intel Software Developer Day インテルマイクロアーキテクチャー SandyBridge 向けワークロードの最適化 より しかしながら, 現在の公開版 (Rev.1.1.3) にこのような機能はない

IACA の使い方 解析対象のコードブロックの前後にマーカー (10byte/x86) を入れる iacamarks.h にマクロが定義される IACA_START : 解析コードブロックの開始位置 IACA_END : 解析コードブロックの終了位置 コマンド引数 -32-64 -arch <type> -cp <type> -include_ebx 32ビットオブジェクト 64ビットオブジェクト AVX,nehalem,westmere DATA_DEPENDENCY,PERFORMANCE マーカー前後のpop/push ebxを解析対象に含める -mark <n> -o < ファイル名 > n 番目のブロックを解析する 出力ファイル名 0 のとき全て

IACA 出力詳細 Intel(R) Architecture Code Analyzer Version - 1.1.3 Analyzed File -.. test Release test.exe Binary Format - 32Bit Architecture - Intel(R) AVX Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2^ X 1 1 CP mov dword ptr [esp+0xc], eax 2^ 1 X 1 mov dword ptr [esp+0x8], ecx 1 1 1 X X CP mov eax, dword ptr [esp+0xc] 1 X X 1 1 mov edx, dword ptr [esp+0x8] 1 1 1 X X movdqa xmm0, xmmword ptr [eax] 1 1 lea esi, ptr [0x4030b0] 1 X X 1 1 movdqa xmm4, xmmword ptr [eax+0x20] 1 1 lea ecx, ptr [0x403130] 1 1 X pshuflw xmm0, xmm0, 0xd8 1 X 1 pshufd xmm1, xmm0, 0x0 2^ 1 1 1 X X pmaddwd xmm1, xmmword ptr [esi] 1 1 X pshufd xmm3, xmm0, 0x55 1 X 1 pshufhw xmm0, xmm0, 0xd8 2^ 1 X X 1 1 pmaddwd xmm3, xmmword ptr [esi+0x20] 1 1 X pshufd xmm2, xmm0, 0xaa 1 X 1 pshufd xmm0, xmm0, 0xff

IACA 出力詳細 ( サマリー ) Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles コードブロック全体のスループットとレイテンシ スループットのボトルネック μop 数 スループットは次に示すものの最大値である (= ボトルネック ) 各発行ポートのスループット front-end の最大スループット (= 4μOPs/cycle) 除算ユニットのスループット

IACA 出力詳細 ( サマリー ) Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles Data Dependecy Latency: Data Dependency クリティカルパスの実行サイクル数 ( 前命令の結果を必要とする命令系列の最大パス ) Performance Latency: Performance クリティカルパスの実行サイクル数 次の基準を考慮 前命令の実行結果に依存する命令 front-end で遅れる命令 ポートコンフリクトにより遅れる命令

IACA 出力詳細 Intel(R) Architecture Code Analyzer Version - 1.1.3 Analyzed File -.. test Release test.exe Binary Format - 32Bit Architecture - Intel(R) AVX Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2^ X 1 1 CP mov dword ptr [esp+0xc], eax 2^ 1 X 1 mov dword ptr [esp+0x8], ecx 1 1 1 X X CP mov eax, dword ptr [esp+0xc] 1 X X 1 1 mov edx, dword ptr [esp+0x8] 1 1 1 X X movdqa xmm0, xmmword ptr [eax] 1 1 lea esi, ptr [0x4030b0] 1 X X 1 1 movdqa xmm4, xmmword ptr [eax+0x20] 1 1 lea ecx, ptr [0x403130] 1 1 X pshuflw xmm0, xmm0, 0xd8 1 X 1 pshufd xmm1, xmm0, 0x0 2^ 1 1 1 X X pmaddwd xmm1, xmmword ptr [esi] 1 1 X pshufd xmm3, xmm0, 0x55 1 X 1 pshufhw xmm0, xmm0, 0xd8 2^ 1 X X 1 1 pmaddwd xmm3, xmmword ptr [esi+0x20] 1 1 X pshufd xmm2, xmm0, 0xaa 1 X 1 pshufd xmm0, xmm0, 0xff

IACA 出力詳細 (Port 毎のサイクル ) Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 Port0,2,3 には,regular pipe と secondary pipe がある Port0 : Divider Pipe 第 1 サイクルは双方ビジー 次サイクルでは Port0 が使用可能 Divider pipe は, 除算実行が終わるまでビジー Port2,3 : Address Generate Unit(AGU) 256bit ロードは 2 サイクル Port ビジーであるが, AGU は 1 サイクル後にフリーとなり store address generation 可

IACA 出力詳細 (Port 毎のサイクル ) CPU による違い AP-945 SSE2 を使用した逆離散コサイン変換 -arch AVX Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 -arch westmere / nehalem Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 77 77 18 0 18 75

SandyBridge 向け最適化 2 個 / サイクルのロードを実行できる 高速化前 loop_start: paddd xmm0, [rsi] paddd xmm0, [rsi+16] paddd xmm0, [rsi+32] paddd xmm0, [rsi+48] paddd xmm0, [rsi+64] paddd xmm0, [rsi+80] paddd xmm0, [rsi+96] paddd xmm0, [rsi+112] 高速化後 loop_start: paddd xmm0, [rsi] paddd xmm1, [rsi+16] paddd xmm0, [rsi+32] paddd xmm1, [rsi+48] paddd xmm0, [rsi+64] paddd xmm1, [rsi+80] paddd xmm0, [rsi+96] paddd xmm1, [rsi+112] Intel Software Developer Day インテルマイクロアーキテクチャー SandyBridge 向けワークロードの最適化 によれば, 1.65 倍早くなる ( ループ処理のオーバヘッドで 2 倍にならない )

IACA 出力詳細 Intel(R) Architecture Code Analyzer Version - 1.1.3 Analyzed File -.. test Release test.exe Binary Format - 32Bit Architecture - Intel(R) AVX Analysis Report --------------- Total Throughput: 76 Cycles; Throughput Bottleneck: Port0, Port1 Total number of Uops bound to ports: 340 Data Dependency Latency: 51 Cycles; Performance Latency: 103 Cycles Port Binding in cycles: Port 0 - DV 1 2 - D 3 - D 4 5 Cycles 76 0 76 48 39 47 38 18 75 Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2^ X 1 1 CP mov dword ptr [esp+0xc], eax 2^ 1 X 1 mov dword ptr [esp+0x8], ecx 1 1 1 X X CP mov eax, dword ptr [esp+0xc] 1 X X 1 1 mov edx, dword ptr [esp+0x8] 1 1 1 X X movdqa xmm0, xmmword ptr [eax] 1 1 lea esi, ptr [0x4030b0] 1 X X 1 1 movdqa xmm4, xmmword ptr [eax+0x20] 1 1 lea ecx, ptr [0x403130] 1 1 X pshuflw xmm0, xmm0, 0xd8 1 X 1 pshufd xmm1, xmm0, 0x0 2^ 1 1 1 X X pmaddwd xmm1, xmmword ptr [esi] 1 1 X pshufd xmm3, xmm0, 0x55 1 X 1 pshufhw xmm0, xmm0, 0xd8 2^ 1 X X 1 1 pmaddwd xmm3, xmmword ptr [esi+0x20] 1 1 X pshufd xmm2, xmm0, 0xaa 1 X 1 pshufd xmm0, xmm0, 0xff

IACA 出力詳細 ( 命令詳細 ) Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2^ X 1 1 CP mov dword ptr [esp+0xc], eax 2^ 1 X 1 mov dword ptr [esp+0x8], ecx 1 1 1 X X CP mov eax, dword ptr [esp+0xc] 1 X X 1 1 mov edx, dword ptr [esp+0x8] 1 1 1 X X movdqa xmm0, xmmword ptr [eax] 1 1 1 X X CP mov eax, dword ptr [ebp-0x8]!!!!!!!!!! cdq 1 1 X X mov ecx, 0x3!!!!!!!!!! idiv ecx Num of Uops : μop 数 X : このportでも実行可能であることを示す CP : クリティカルパス! : サポート対象外の命令

IACA 出力詳細 ( 命令詳細 ) Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 0* xor eax, eax 1 1 X X nop 1 X 1 X add ecx, eax 1 X X 1 CP add eax, 0x1 1 X X 1 CP cmp eax, 0x2710 0F jl 0xfffffff4 * : port に割り当てられない命令 zero idiom XOR REG, REG SUB REG, REG PXOR/VPXOR XMMREG, XMMREG PSUBB/W/D/Q XMMREG, XMMREG VPSUBB/W/D/Q XMMREG, XMMREG XORPS/PD XMMREG, XMMREG VXORPS/PD YMMREG, YMMREG NOP VZEROUPPER FXCHG

IACA 出力詳細 ( 命令詳細 ) Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 1 1 1 X X movzx eax, byte ptr [ebp-0x11] 1 X X 1 test eax, eax 0F jz 0x9 2^ 1 X 1 mov dword ptr [ebp-0x8], 0xa F : マクロフュージョン 2 つの命令を単一 μop にマージ インテル 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス マニュアル より

IACA 出力詳細 ( 命令詳細 ) Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 1 1 1 X X movzx eax, byte ptr [ebp-0x11] 1 X X 1 test eax, eax 0F jz 0x9 2^ 1 X 1 mov dword ptr [ebp-0x8], 0xa ^ : マイクロフュージョン複数の μop を単一の μop に纏める 例 : ロード + op ADDPS XMM9, OWORD PTR [RSP+40] FADD DOUBLE PTR [RDI+RSI*8] XOR RAX, QWORD PTR [RBP+32]

IACA 出力詳細 ( 命令詳細 ) Num of Ports pressure in cycles Uops 0 - DV 1 2 - D 3 - D 4 5 ----- 2 1 X X 1 2 CP vaddpd ymm11, ymm10, ymmword ptr [rsi+rax*8] 2 1 X 2 CP vmovaps ymmword ptr [rcx+rax*8], ymm12 1 1 CP vmulpd ymm14, ymm3, ymm11 1@ 1 addps xmm0, xmm1 1 1 vmulpd ymm12, ymm2, ymm14 3 2 42 1 CP vsqrtpd ymm4, ymm5 @ : AVX-256 に SSE コードが続くケース ペナルティが発生 SSE の代わりに AVX-128 命令を使う SSE コードの直前に VZEROUPPER を入れる

まとめ IACA では, スーパースカラ実行の効率を評価することができる ( サマリ画面 ) コードのどこを変えれば良いかは分かり難い Intel Software Developer Day で紹介された画面機能が公開されることを期待したい