Microsoft PowerPoint - 04_new_compiler_report_JA_Sep2015

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

Intel® Compilers Professional Editions

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

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

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

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

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

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

インテル(R) C++ Composer XE 2011 Windows版 入門ガイド

Click to edit title

PowerPoint Presentation

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

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

Presentation title

Parallel Studio XE Parallel Studio XE hotspot ( )

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

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

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

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

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

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

Tutorial-GettingStarted

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

インテル(R) Visual Fortran Composer XE

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

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

Microsoft Word - IVF15.0.1J_Install.doc

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

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

Microsoft PowerPoint - kougi2.ppt

Intel_ParallelStudioXE2013_ClusterStudioXE2013_Introduction.pptx

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

Jackson Marusarz 開発製品部門

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

Introducing Intel® Parallel Studio XE 2015

v10 IA-32 64¹ IA-64²

01_OpenMP_osx.indd

8 / 0 1 i++ i 1 i-- i C !!! C 2

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

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

COBOL EE開発環境 ご紹介資料

Microsoft PowerPoint - guidance.ppt

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


PGRelief C/C++ 強化ポイント説明書

PowerPoint Presentation

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

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

Microsoft Word - p2viewer_plus_jpn20.doc

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt

QNAP vsphere Client 用プラグイン : ユーザーガイド 2012 年 12 月更新 QNAP Systems, Inc. All Rights Reserved. 1

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

目次 1 はじめに 本文書の概要 PVF ソフトウェアと VISUAL STUDIO PVF ソフトウェアの種類 MICROSOFT VISUAL STUDIO の日本語化について VISUAL STUDIO

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1


DPC-0401

JavaプログラミングⅠ

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

インテル® C++ コンパイラー 17.0 Update 4 for Linux* リリースノート (インテル® Parallel Studio XE 2017)

Microsoft PowerPoint - VSUGDAY_2008_Intel_V2.ppt

Microsoft PowerPoint - 002_OpenMP 5.0_2018_Part2

Cコンパイラパッケージお知らせ

文字列操作と正規表現

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

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

Microsoft Word - Improved_Protected-Mode_API_Support

アプリケーション補足説明書(Office2003)

Intel Software Presentation Template

Oracle Cloud Adapter for Oracle RightNow Cloud Service

インテル® Parallel Studio XE 2019 Composer Edition for Windows: インテル® Fortran コンパイラー 入門ガイド

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

kiso2-03.key

この時お使いの端末の.ssh ディレクトリ配下にある known_hosts ファイルから fx.cc.nagoya-u.ac.jp に関する行を削除して再度ログインを行って下さい

McAfee SaaS Protection 統合ガイド Microsoft Office 365 と Exchange Online の保護

hotspot の特定と最適化

Click to edit title

Oracle SQL Developer Data Modeler

Microsoft PowerPoint Quality-sama_Seminar.pptx

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

7th CodeGear Developer Camp

BricRobo V1.5 インストールマニュアル

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

Microsoft Word - Manage_Add-ons

インテル® コンパイラーの浮動小数点演算における結果の一貫性

slide5.pptx

Microsoft Word - Writing Windows Installer's DLL.doc

N08

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

スライド 1

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

プレポスト【問題】

機能紹介 : Java ゲートウェイとインターシステムズ製品

スライド 1

インテル® C++ コンパイラー 17.0 Update 4 for Windows® リリースノート (インテル® Parallel Studio XE 2017)

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

使用する前に

インテル® C++ コンパイラー 16.0 Update 1 for Windows* リリースノート (インテル® Parallel Studio XE 2016)

親指シフトキーボード(FMV-KB611)、JISキーボード(FMV-KB621)、FMV-LIFEBOOK(親指シフトキーボードモデル)をお使いになる方へ

Transcription:

新しい最適化レポートを使 して コンパイラーを最 限に活 する : Kiyo Sugawara September 2015 Rev 2.1

このセッションの 的 インテル Parallel Studio XE 2016 に統合され 強化されたコンパイラーの最適化レポートについて学ぶ : 提供される情報を制御パフォーマンスを向上するため コンパイラーの最適化レポートの情報を理解し チューニングに役 てる 2 isus の記事をご覧ください 2

新しい最適化レポートとは? 利 者からのフィードバック... ベクトル化や他のレポートで提供されるメッセージは理解するのが難しい 暗号のようなメッセージ ループの最適化メッセージが 複数のレポートに分割されている コンパイラーによって 成される複数バージョンのループは混乱を招く コードがインライン展開されると ソースコードに対応付けるのが困難 1 つの きなレポートが 成される ; 並列ビルドには不向き 3

16.0 コンパイラーにおけるレポートの 標 解り易さを改善 やすく 理解しやすいレポートを 成する 単 の統合されたレポート ループベースのレポート プログラマーが対処しやすい情報を提供 必要な情報を選択し易いようにする 出 モードの範囲を拡張利 しやすいレポートを 成 テキスト ファイルで 成 アセンブリー リスト中にも 成 Microsoft* Visual Studio* IDE で利 できるようにする 他のインテル ソフトウェア ツールで利 できるようにする 4

概要 インテル コンパイラー バージョン 16.0 に適 C/C++ と Fortran Windows* Linux* および OS X* ( スライドを読み易くするため 以降各 OS でスペルが類似するオプションは繰り返して明記していないことがあります 特に明記されない限り オプションはすべての OS に適 されます ) 主なオプション : /Qopt-report[:N] (Windows) -qopt-report[=n] (Linux と OS X) N = 1-5 ( 詳細レベルを選択 デフォルトは N = 2) /Qopt-report-phase:str[,str1, ] str = loop, par, vec, openmp, ipo, pgo, cg, offload, tcollect, all /Qopt-report-file: stdout stderr ファイル名 /Qdiag-message-catalog- 5

出 されるレポート デフォルトでは レポートは標準出 ではなくテキスト形式でファイルに出 される ファイルの拡張 は.optrpt です ファイル名はオブジェクト ファイルと同じ名称になる オブジェクト ファイルごとに 1 つのレポートが オブジェクトと同じディレクトリーに作成される 新規作成もしくは上書き ( ファイルへの追加は わない ) /Qopt-report-file:stderr は 旧レポートと同じく標準出 に表 : ファイル名 では デフォルトのファイル名を変更できる /Qopt-report-format:vs は Visual Studio* IDE に適した形式で出 デバッグビルド (-g : Linux* と OS X* /Zi : Windows*) では アセンブリー コードとオブジェクト ファイルにループの最適化情報が含まれる /Qopt-report-embed は リリースビルドでこの機能を有効にする 6

出 されるレポートのフィルター処理 最適化レポートは巨 になる可能性がある フィルター処理で アプリケーションのパフォーマンスに重要な部分だけを抽出できる /Qopt-report-routine:<function1>[,<function2>, ] function1 には 関数名の正規表現もしくは その 部分を指定できる また 特定の 番号の範囲を指定できる : icl /Qopt-report-filter: test.cpp,100-300 test.cpp また 特定の最適化フェーズに注 できる : /Qopt-report-phase:[ フェーズ ] 7

ループのベクトル化と並列化フェーズ ループの れ を階層表 可読性を め理解し易くする コンパイラーが複数バージョンのループを 成した場合 それぞれ個別のメッセージが 成される コードがインライン展開されると 呼び出し側 (caller)/ 呼ばれた側 (callee) が明記される "loop" フェーズが指定されると メッセージにはメモリーとキャッシュの最適化情報 ( ブロッキング アンロール プリフェッチなど ) が含まれます 統合されたベクトル化と並列化レポート 8

階層表 されたループの最適化レポート 1 double a[1000][1000],b[1000][1000],c[1000][1000]; 2 3 void foo() { 4 int i,j,k; 5 6 for( i=0; i<1000; i++) { 7 for( j=0; j< 1000; j++) { 8 c[j][i] = 0.0; 9 for( k=0; k<1000; k++) {. 10 c[j][i] = c[j][i] + a[k][i] * b[j][k]; 11 } 12 } 13 } 14 } ループの れ ヘッダー情報 ソースの場所 LOOP BEGIN at mydir dev test.c(7,5) Distributed chunk2. LOOP BEGIN at mydir dev test.c(9,7) Distributed chunk2 レポートの内容 LOOP BEGIN at mydir dev test.c(6,3). LOOP BEGIN at mydir dev test.c(6,3). 9

14.0 と 15.0 & 16.0 のループ最適化レポート HPO VECTORIZER REPORT (foo) LOG OPENED ON Mon Feb 24 12:10:15 2014 <d: dev test.c;-1:-1;hpo_vectorization;foo;0> HPO Vectorizer Report (foo) d: dev test.c(7:5-7:5):vec:foo: loop was not vectorized: loop was transformed to memset or memcpy d: dev test.c(6:3-6:3):vec:foo: PERMUTED LOOP WAS VECTORIZED d: dev test.c(9:7-9:7):vec:foo: loop was not vectorized: not inner loop d: dev test.c(7:5-7:5):vec:foo: loop was not vectorized: not inner loop HLO REPORT LOG OPENED ON Mon Feb 24 12:10:15 2014 <test.c;-1:-1;hlo;foo;0> High Level Optimizer Report (foo) <d: dev test.c;7:7;hlo_distribution;in foo;0> LOOP DISTRIBUTION in foo at line 7 <d: dev test.c;6:6;hlo_linear_trans;foo;0> LOOP INTERCHANGE in loops at line: 6 7 Loopnest permutation ( 1 2 ) --> ( 2 1 ) LOOP INTERCHANGE in loops at line: 6 7 9 Loopnest permutation ( 1 2 3 ) --> ( 2 3 1 ) <d: dev test.c;7:7;hlo_reroll;foo;0> Loop at line:7 memset generated Block, Unroll, Jam Report: (loop line numbers, unroll factors and type of transformation) <d: dev test.c;6:6;hlo_unroll;foo;0> Loop at line 6 completely unrolled by 8 Loop Collapsing Report: <d: dev test.c;7:7;hlo_loop_collapsing;foo;0> Loops at line:7 and line:6 collapsed Report from: Loop nest, Vector & Auto-parallelization optimizations [loop, vec, par] LOOP BEGIN at d: dev test.c(7,5) Distributed chunk1 remark #25430: LOOP DISTRIBUTION (2 way) remark #25448: Loopnest Interchanged : ( 1 2 ) --> ( 2 1 ) remark #25424: Collapsed with loop at line 6 remark #25412: memset generated remark #15144: loop was not vectorized: loop was transformed to memset or memcpy LOOP BEGIN at d: dev test.c(7,5) Distributed chunk2 remark #25448: Loopnest Interchanged : ( 1 2 3 ) --> ( 2 3 1 ) remark #15018: loop was not vectorized: not inner loop LOOP BEGIN at d: dev test.c(9,7) Distributed chunk2 remark #15018: loop was not vectorized: not inner loop LOOP BEGIN at d: dev test.c(6,3) remark #15145: vectorization support: unroll factor set to 4 remark #15003: PERMUTED LOOP WAS VECTORIZED LOOP BEGIN at d: dev test.c(6,3) remark #15003: REMAINDER LOOP WAS VECTORIZED ループ変換の順序付きレポート 10

複数バージョンのループ : ピールループ リマインダー ループおよびコア部分 LOOP BEGIN at ggfinespectrum.cc(124,5) inlined into ggfinespectrum.cc(56,7) remark #15018: loop was not vectorized: not inner loop LOOP BEGIN at ggfinespectrum.cc(138,5) inlined into ggfinespectrum.cc(60,15) Peeled remark #25460: Loop was not optimized LOOP BEGIN at ggfinespectrum.cc(138,5) inlined into ggfinespectrum.cc(60,15) remark #15145: vectorization support: unroll factor set to 4 remark #15002: LOOP WAS VECTORIZED LOOP BEGIN at ggfinespectrum.cc(138,5) inlined into ggfinespectrum.cc(60,15) Remainder remark #15003: REMAINDER LOOP WAS VECTORIZED ピールとリマインダーによるベクトル化 11

アセンブリー リストへの注釈.L11: # optimization report # LOOP WAS INTERCHANGED # loop was not vectorized: not inner loop xorl %edi, %edi #38.3 movsd b.279.0.2(%rax,%rsi,8), %xmm0 #41.32 unpcklpd %xmm0, %xmm0 #41.32 # LOE rax rcx rbx rsi rdi r12 r13 r14 r15 edx xmm0..b1.11: # Preds..B1.11..B1.10..L12: # optimization report # LOOP WAS INTERCHANGED # LOOP WAS VECTORIZED # VECTORIZATION HAS UNALIGNED MEMORY REFERENCES # VECTORIZATION SPEEDUP COEFFECIENT 2.250000 movaps a.279.0.2(%rcx,%rdi,8), %xmm1 #41.22 movaps 16+a.279.0.2(%rcx,%rdi,8), %xmm2 #41.22 movaps 32+a.279.0.2(%rcx,%rdi,8), %xmm3 #41.22 movaps 48+a.279.0.2(%rcx,%rdi,8), %xmm4 #41.22 mulpd %xmm0, %xmm1 #41.32 mulpd %xmm0, %xmm2 #41.32 < > L4:: ; optimization report ; PEELED LOOP FOR VECTORIZATION $LN36: $LN37: vaddss xmm1, xmm0, DWORD PTR [r8+r10*4] ;4.5 snip snip snip L5:: ; optimization report ; LOOP WAS VECTORIZED ; VECTORIZATION HAS UNALIGNED MEMORY REFERENCES ; VECTORIZATION SPEEDUP COEFFECIENT 8.398438 $LN46: vaddps ymm1, ymm0, YMMWORD PTR [r8+r9*4] ;4.5 snip snip snip L6:: $LN78: add r10, 4 ;3.3 snip snip snip L7:: ; optimization report ; LOOP WAS VECTORIZED ; REMAINDER LOOP FOR VECTORIATION ; VECTORIZATION HAS UNALIGNED MEMORY REFERENCES ; VECTORIZATION SPEEDUP COEFFECIENT 2.449219 ; optimization report ; REMAINDER LOOP FOR VECTORIATION $LN93: inc rax ;3.3 12

ベクトル化のレポートレベル /Qopt-report-phase:vec /Qopt-report:N N には 取得するレポートの詳細レベルを指定 ; N が省略された場合は N = 2 がデフォルト レベル 0: ベクトル化レポートなし レベル 1: ベクトル化が われた場合をレポート レベル 2: レベル 1 に加え ベクトル化が われなかった場所と簡単な診断をレポート レベル 3: ループベクトル化の診断を追加 レベル 4: データのアライメントなど詳細情報を追加レベル 5: 依存性情報を追加 13

レポートへの対応例 (1) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr foo.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN at W: sample code foo.c(4,2) <Multiversioned v1> remark #25228: データの依存関係のループをマルチバージョンにしました remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15399: ベクトル化のサポート : アンロールファクターが 2 に設定されます remark #15417: ベクトル化のサポート : 浮動小数点数をアップコンバートします ( 単精度から倍精度 1) remark #15418: ベクトル化のサポート : 浮動小数点数をダウンコンバートします ( 倍精度から単精度 1) remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 ---. remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 LOOP BEGIN at W: sample code foo.c(4,2) <Multiversioned v2> remark #15304: ループはベクトル化されませんでした : マルチバージョンのベクトル化できないループ インスタンスです #include <math.h> void foo (float * theta, float * sth) { int i; for (i = 0; i < 128; i++) sth[i] = sin(theta[i]+3.1415927); } 14

レポートへの対応 : 例 (2) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr -fargument-noalias foo.c 最適化レポート開始 : foo(float *, float *) (Windows* では /Qalias-args- ) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN at W: sample code foo.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15399: ベクトル化のサポート : アンロールファクターが 2 に設定されます remark #15417: ベクトル化のサポート : 浮動小数点数をアップコンバートします ( 単精度から倍精度 1) remark #15418: ベクトル化のサポート : 浮動小数点数をダウンコンバートします ( 倍精度から単精度 1) remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 114 remark #15477: ベクトルループのコスト : 40.750 remark #15478: スピードアップの期待値 : 2.790 int i; remark #15479: 低オーバーヘッドのベクトル操作 : 9 remark #15480: 中オーバーヘッドのベクトル操作 : 1 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 } remark #15487: 型変換 : 2 remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 #include <math.h> void foo (float * theta, float * sth) { for (i = 0; i < 128; i++) sth[i] = sin(theta[i]+3.1415927); 15

レポートへの対応 : 例 (3) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr -fargument-noalias foo2.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN W: sample code foo2.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- #include <math.h> remark #15476: スカラーループのコスト : 111 void foo (float * theta, float * sth) { remark #15477: ベクトルループのコスト : 20.500 int i; remark #15478: スピードアップの期待値 : 5.400 for (i = 0; i < 128; i++) remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 sth[i] = sinf(theta[i]+3.1415927f); remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 } remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =32 16

レポートへの対応 : 例 (4) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr -fargument-noalias -xavx foo2.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN at W: sample code foo2.c(4,2) remark #15389: ベクトル化のサポート : 参照 theta にアラインされていないアクセスが含まれています remark #15389: ベクトル化のサポート : 参照 sth にアラインされていないアクセスが含まれています remark #15381: ベクトル化のサポート : ループ本体内でアラインされていないアクセスが使用されました remark #15300: ループがベクトル化されました remark #15450: マスクなし非アライン ユニット ストライド ロード : 1 remark #15451: マスクなし非アライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 #include <math.h> remark #15477: ベクトルループのコスト : 11.620 void foo (float * theta, float * sth) { remark #15478: スピードアップの期待値 : 9.410 int i; remark #15479: 低オーバーヘッドのベクトル操作 : 8 for (i = 0; i < 128; i++) remark #15481: 高オーバーヘッドのベクトル操作 : 1 sth[i] = sinf(theta[i]+3.1415927f); remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 } remark #15488: --- ベクトルループのコストサマリー終了 --- remark #25015: ループの最大トリップカウントの予測 =16 17

レポートへの対応 : 例 (5) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr -fargument-noalias -xavx foo3.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN W: sample code foo3.c(6,2) remark #15388: ベクトル化のサポート : 参照 theta にアラインされたアクセスが含まれています remark #15388: ベクトル化のサポート : 参照 sth にアラインされたアクセスが含まれています remark #15300: ループがベクトル化されました remark #15448: マスクなしアライン ユニット ストライド ロード : 1 remark #15449: マスクなしアライン ユニット ストライド ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 #include <math.h> remark #15477: ベクトルループのコスト : 9.870 void foo (float * theta, float * sth) { remark #15478: スピードアップの期待値 : 11.130 int i; remark #15479: 低オーバーヘッドのベクトル操作 : 8 assume_aligned(theta,32); remark #15481: 高オーバーヘッドのベクトル操作 : 1 assume_aligned(sth,32); remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 for (i = 0; i < 128; i++) remark #15488: --- ベクトルループのコストサマリー終了 --- sth[i] = sinf(theta[i]+3.1415927f); remark #25015: ループの最大トリップカウントの予測 =16 } 18

レポートへの対応 : 例 (6) $ icc -c -opt-report=4 -opt-report-phase=loop,vec -opt-report-file=stderr -fargument-noalias -xavx foo4.c 最適化レポート開始 : foo(float *, float *) レポート : ループの入れ子 ベクトルの最適化 [loop, vec] LOOP BEGIN W: sample code foo4.c(6,2) remark #15388: ベクトル化のサポート : 参照 theta にアラインされたアクセスが含まれています remark #15388: ベクトル化のサポート : 参照 sth にアラインされたアクセスが含まれています remark #15412: ベクトル化のサポート : sth のストリーミング ストアが生成されました remark #15300: ループがベクトル化されました remark #15448: マスクなしアライン ユニット ストライド ロード : 1 remark #15449: マスクなしアライン ユニット ストライド ストア : 1 remark #15467: マスクなしアライン ストリーミング ストア : 1 remark #15475: --- ベクトルループのコストサマリー開始 --- remark #15476: スカラーループのコスト : 110 remark #15477: ベクトルループのコスト : 9.870 int i; remark #15478: スピードアップの期待値 : 11.130 remark #15479: 低オーバーヘッドのベクトル操作 : 8 remark #15481: 高オーバーヘッドのベクトル操作 : 1 remark #15482: ベクトル化された算術ライブラリーの呼び出し : 1 remark #15488: --- ベクトルループのコストサマリー終了 --- } remark #25015: ループの最大トリップカウントの予測 =250000 #include <math.h> void foo (float * theta, float * sth) { assume_aligned(theta,32); assume_aligned(sth,32); for (i = 0; i < 2000000; i++) sth[i] = sinf(theta[i]+3.1415927f); 19

IPO レポートの例 1 #include <stdio.h> 2 3 static void attribute ((noinline)) bar (float a[100][100], float b[100][100]) { 4 int i, j; 5 for (i = 0; i < 100; i++) { 6 for (j = 0; j < 100; j++) { 7 a[i][j] = a[i][j] + 2 * i; 8 b[i][j] = b[i][j] + 4 * j; 9 } 10 } 11 } 12 13 static void foo(float a[100][100], float b[100][100]) { 14 int i, j; 15 for (i = 0; i < 100; i++) { 16 for (j = 0; j < 100; j++) { 17 a[i][j] = 2 * i; 18 b[i][j] = 4 * j; 19 } 20 } 21 bar(a, b); 22 } 23 24 extern int main() { 25 int i, j; 26 float a[100][100]; 27 float b[100][100]; 28 29 for (i = 0; i < 100; i++) { 30 for (j = 0; j < 100; j++) { 31 a[i][j] = i + j; 32 } b[i][j] = i - j; 33 34 } 35 foo(a, b); 36 foo(a, b); 37 fprintf(stderr, "%d %d n", a[99][9], b[1]99]); 38 } コンパイル : icc -opt-report=3 opt-report-phase=ipo sm.c 20

IPO レポートの機能 - インライン展開 -opt-report-phase=ipo opt-report=3 インライン展開を制御するオプション値 ソースファイル sm.c の main 関数の 番号 24 に関するレポート foo() は 番号 35 と 36 でインライン展開された bar() は foo の 番号 21 で呼び出されているが main にインライン展開されていない 外部関数 fprintf インライン展開オプション値 : -inline-factor: 100... インライン展開レポート : (main) [1] sm.c(24,19) -> INLINE: [35] foo() -> [21] bar() -> INLINE: [36] foo() -> [21] bar() ->EXTERN: [37] fprintf インライン展開レポート : (bar) [2] sm(3,81) 実 されないスタティック関数 : (foo) sm.c(13,55) 番号 3 のユーザー定義関数 bar() は 関数呼び出しを持たない 番号 13 のスタティック関数 foo() は インライン展開されるため実 されない 21

IPO レポートの機能 - さらに詳しく -opt-report-phase=ipo opt-report=4 プログラム全体の最適化レポート 全ルーチンの % がコンパイルされた sz = 中間 語単位でそれぞれインライン可能なルーチンのサイズ (total = (stmts + exprs)) isz = インライン展開による呼び出しもとのサイズ増加 インライン展開されなかった理由 プログラム全体 (SAFE) [ いずれかのメソッド ]: true プログラム全体 (SEEN) [ テーブルメソッド ]: true プログラム全体 (READ) [ オブジェクト リーダー メソッド ]: false インライン展開レポート : (main) [1/3=33.3%] sm.c(24,19) -> INLINE: [35] foo (isz = 40) (sz = 47 (25+22)) -> [21] bar() (isz = 47) (sz = 54 (24+30)) [[ 呼び出し先は noinline でマークされています ]] -> INLINE: [35] foo (isz = 40) (sz = 47 (25+22)) -> [21] bar() (isz = 47) (sz = 54 (24+30)) [[ 呼び出し先は noinline でマークされています ]] -> EXTERN: [37] fprintf 22

オフロード レポートインテル Xeon Phi コプロセッサー opt-report-phase=offload でコンパイル ホストとコプロセッサー向けの個別のレポートを 成 インテル Cilk Plus キーワードと OpenMP* 4.0 プラグマ / 宣 を使 したオフロードのレポート OpenMP* 4.0 オフロード プラグマの例 : icc c -openmp -opt-report-phase=offload offload_test.c 23

オフロード レポート OpenMP を使 した例 1. #pragma omp declare target 2. int compute(int i) { return i++; } 3. #pragma omp end declare target 4. int do_offload() { 5. int i = 0; 6. #pragma omp target map(tofrom:i) 7. { i = compute(i); } 8. return i; 9. } ホストレポート offload_test.c(6-6):offload:do_offload: Offload to target MIC 1 Data sent from host to target i, scalar size 4 bytes Data received by host from target i, scalar size 4 bytes コプロセッサー レポート offload_test.c(6-6):offload:do_offload: Outlined offload region Data received by target from host i, scalar size 4 bytes Data sent from target to host i, scalar size 4 bytes 24

その他の最適化フェーズのレポート -opt-report-phase= par 動並列化レポート ベクトル化レポートと同じ構成 openmp OpenMP 構 に関するレポート ループレポートにマージ pgo プロファイルに基づく最適化のレポート 有 なプロファイルを持つ関数情報を含む cg コード 成時の最適化レポート 組み込み関数の置き換えなど loop ループとメモリー最適化のレポート キャッシュ ブロッキング プリフェッチ スカラー置換など tcollect インテル Trace Analyzer 向けのデータ収集に関するレポート 25

旧オプションと新オプションの対応 -vec-report -par-report および -openmp-report は 廃 予定 バージョン 14.x コンパイラーと同じ出 とはならない 代わりに もっとも近いフェーズと新しい最適化レポート レベルが出 される opt-report-file=stderr が指定されないと標準出 には出 されない 必要であれば設定ファイルにこのオプションを加えると良いでしょう 新しいオプションを利 することを推奨 makefile の "clean" セクションに *.optrpt ファイルの削除を追加すると良いでしょう 26

Microsoft* Visual Studio* でのレポート 15.0 & 16.0 コンパイラーでは 統合開発環境 (IDE) 上で新しいレポートを参照できる 次のオプションを使 : /Qopt-report-format:vs プロジェクト プロパティーの [ 診断 ( インテル (R) コンパイラー )] にある [ 最適化診断 ] セクションと [ ツール ] メニューの [ オプション ]- >[ インテル (R) コンパイラーおよびツール ] にある [ 最適化レポート ] で設定 テキスト エディター中の最適化レポートをクリックして caller もしくは callee を調査できる レポート ツール ウィンドウが表 され ソース を直接ダブルクリックして 最適化レポートをフィルター処理 27

コンパイラー最適化サポート ツール ウインドウ レポートを階層表 ダブルクリックでソース位置にジャンプ クリックで呼び出し先にジャンプ コンテキスト スコープでメッセージをフィルター 最適化フェーズでメッセージをフィルター キーワードでメッセージをフィルター 28

関連情報 インテル Parallel Studio XE 2016 Composer Edition コンパイラー ユーザーおよびリファレンス ガイドインテル プレミア サポート https://premier.intel.com 29

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