Python* はネイティブコードと同じくらい速いのか?
インテル® Distribution for Python* によりハイパフォーマンス・アプリケーションを最適化し、ネイティブコードと同じくらい高速に実行する方法

インテル コーポレーション
テクニカル・コンサルティング・エンジニア
Nathan Greeneltch

1

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ
関連ライブラリー
デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

2

Python* パフォーマンスと歴史的なスピードの欠如
Python* の作成者による Python* の目的は...
「高速」であることではない
表現力豊かで素早くプロトタイプを生成できること
初心者にとって「ダックタイピング」と英語のような構文の Python* は取っ付きやすい
数値、科学、工学の分野において Python* の使用が急速に拡大している ポピュラーな商用科学言語を置き換えるオープンソース言語© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

3

Python* パフォーマンスについて一般的な Python* の動作 (Cpython)
Cpython は Python* バイトコード (.pyc) からコマンドを実行するインタープリターを提供
コンパイルは x86 命令を生成しない
Python* インタープリター  コンパイル済みバイトコード  Python* 仮想マシン
非常に柔軟なバイトコードが可能で、Python* インタープリターが重要な役割を果たす
Cpython と PyPy にはグローバル・インタープリター・ロック (GIL) がある
Cpython のグローバル・インタープリター・ロック
スレッド w1

実行

実行

スレッド w2

実行

スレッド w3

解放/取得
GIL

解放/取得
GIL

解放/取得
GIL

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

4Python* パフォーマンスについてPython* レイヤー
Python* 言語が解釈され、柔軟性のため多くの型チェックが行われる

各レベルにはさまざまなトレードオフがある
NumPy* は直ちに価値をもたらす

Python*NumPy*

GIL を使用シングルスレッド、抽象化オーバーヘッド
高度な型なしGIL を回避(マルチスレッド、マルチコア)
BLAS API がボトルネックになる可能性がある*BLAS (Basic Linear Algebra Subprograms)[CBLAS]

最良のパフォーマンスを達成するには、できるだけ早い段階で Python* レイヤー
から抜け出すインテル® マス・
カーネル・ライブラリー(インテル® MKL)

BLAS API ボトルネックを回避
厳密な型
最も高速なパフォーマンス・レベル
ハードウェアによるベクトル化へのディスパッチインテル® MKL は Anaconda* の標準バンドルに同梱され、Python* 向けに無償で提供されている© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

5

Python* パフォーマンスについて
なぜ重要なのか? (Python* レイヤー)
配列ループの例
GIL によりループはシングルスレッドでの実行を強制される
NumPy* ディスパッチは C 関数の使用によりシングルスレッドを回避
C 関数はプロセッサーによるベクトル化を呼び出し可能
パフォーマンスを向上するには、
Python* レイヤーを抜け出すことが重要

Python* レベルのみ (シングルスレッド)
ループ
呼び出し

ループ
(行 1)

ループ
(行 2)

ループ
(... 行 n)

Python* と NumPy* ディスパッチ
ループ
呼び出し

ループ
(行 1)

計算

アペンド

ループ
(行 2)

計算

アペンド

ループ
(... 行 n)

計算

アペンド

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

6Python* の状況

Python* の採用は生産性の利点
によりドメイン・エキスパートと開発者の間で引き続き増加• 課題 1:• ドメイン・エキスパートはプロのソフトウェア・プログラマーではない• 課題 2:インテル® Distribution for Python* Python* のパフォーマンスを向上
 容易なアクセスを提供
 プロダクション環境への導入を促進 コミュニティーに協力

Codeeval.com• Python* のパフォーマンスはプロダクション・システムへの移行を制限© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

7

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ- Python* ライブラリーの高速化- パフォーマンスのためのコードのチューニング
- 計算処理の分散

関連ライブラリー
デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

8インテル® Distribution for Python* でライブラリーを高速化
科学計算、データ解析、マシンラーニング向けのハイパフォーマンスな Python*

高速なパフォーマンス

優れた生産性

エコシステムの互換性

パフォーマンス・ライブラリー、並列化、マルチスレッド化、言語拡張

事前ビルドの高速化されたパッケージ

Python* 2.7 & 3.6、Conda*、
pip をサポート

インテル® MKL1 とインテル® DAAL2 により
NumPy*/SciPy*/scikit-learn を高速化
scikit-learn、pyDAAL によるデータ解析、
マシンラーニング、ディープラーニング
Numba と Cython によるスケーリング
最適化された mpi4py、Dask & PySparkで動作
最新のインテル® アーキテクチャー向けに最適化

数値計算、マシンラーニング/ディープラーニング、HPC、データ解析向けの事前ビルドの最適化されたパッケージ
既存のPython*から簡単に移行可能
既存のPython*から簡単に移行可能
通常コード変更不要
通常コード変更は不要
Jupyter* Notebook、Matplotlib を含む

Anaconda* との互換性、Conda* と pip をサポート
ディストリビューションと個々の最適化されたパッケージは conda と Anaconda.org、
yum/apt、Docker* イメージ (Docker*
Hub) からも利用可能

Conda* ビルドレシピをパッケージに同梱

最適化はメインの Python* トランクに反映される

商用開発を含むすべてのユーザーに無償で提供

インテル® Parallel Studio XE を通して商用サポートが受けられる

インテル® アーキテクチャー・ベースのプラットフォーム
オペレーティング・システム: Windows*、Linux*、macOS*3
1インテル® マス・カーネル・ライブラリー

2インテル® データ・アナリティクス・アクセラレーション・ライブラリー

3インテル® Parallel Studio XE Composer Edition でのみ利用可能© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

9マルチコア、メモリー管理を利用する
UMath の最適化とベクトル化

インテル®
インテル® Xeon®
Xeon®
プロセッサープロセッサー

最大 440 倍のスピードアップ

インテル® Core™ i7 プロセッサー

最大 37 倍のスピードアップ
インテル® Xeon Phi™
インテル®
Xeon Phi™
プロセッサープロセッサー

3,000 倍を超えるスピー
3,000 倍を超えるスピードアップ
ドアップ
ハードウェア: インテル® Core™ i7-7567U プロセッサー @3.50GHz (1 ソケット、ソケットごとに 2 コア、コアごとに 2 スレッド)、32GB DDR4 @2133MHz。
インテル® Xeon® プロセッサー E5-2699 v4 @2.20GHz (2 ソケット、ソケットごとに 22 コア、コアごとに 1 スレッド、HT 無効)、256GB DDR4 @2400MHz。
インテル® Xeon Phi™ プロセッサー 7250 @1.40GHz (1 ソケット、ソケットごとに 68 コア、コアごとに 4 スレッド)、192GB DDR4 @1200MHz、16GB MCDRAM@7200MHz キャッシュモード
ソフトウェア: CentOS* 7.3.1611 (Core)、Python* 3.6.2、pip 9.0.1、NumPy* 1.13.1、SciPy* 0.19.1、scikit-learn 0.19.0。
インテル® Distribution for Python* 2018 Gold パッケージ: インテル® MKL 2018.0.0、intel_4、インテル® DAAL 2018.0.0.20170814、NumPy* 1.13.1、
py36_intel_15、OpenMP* 2018.0.0、intel_7、SciPy* 0.19.1、np113py36_intel_11、scikit-learn 0.18.2、np113py36_intel_3。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や
MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。ベンチマークの出典: インテル コーポレーション
el.com/performance.
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング
SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・
リファレンス・ガイドを参照してください。注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

10

IDP による最適化のさらにその先最適化された Python* 以外の Python*/C/C++
アプリケーション・コードの効率は?
パフォーマンス低下の原因が明らかでないものはないか?

パフォーマンス解析により解明できる© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

11パフォーマンス向上のための Python* + ネイティブコードのチューニング
インテル® VTune™ Amplifier によるパフォーマンス解析 (インテル® Parallel Studio XE に含まれる)課題
Python* とネイティブコードが混在するアプリ
ケーションを 1 つのツールでプロファイル
非効率的なランタイム実行を検出

ソリューション
Python*/C/C++ 混在コードと拡張を自動検出
パフォーマンス hotspot を行レベルで正確に識別スクリーンショットを挿入

低オーバーヘッド、実行中のアプリケーション
へのアタッチ/デタッチ
パフォーマンスへの影響が大きい個所をチューニング
Python* とネイティブ関数の自動検出およびパフォーマンス解析
インテル® VTune™ Amplifier とインテル® Parallel Studio XE で利用可能© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

12

Python* パフォーマンスを高速化する 3 ステップのアプローチ
ハイパフォーマンスな Python* ディストリビューション + パフォーマンス・プロファイル

ステップ 1: インテル® Distribution for Python* と高速なライブラリーを使用
パフォーマンスが最適化されたネイティブ・ライブラリーを利用
既存の Python* から簡単に移行可能 - コード変更不要
マルチコアと最新のインテル® プロセッサー向けに最適化

ステップ 2: インテル® VTune™ Amplifier でプロファイルとチューニング
アプリケーション全体の実行プロファイルの詳細なサマリーを取得
Python*/C/C++ 混在コードと拡張を低オーバーヘッドで自動検出してプロファイル
ホットスポットを正確に検出 - 行レベルの解析により迅速に賢く最適化!
インテル® Parallel Studio XE Professional Edition & Cluster Edition で利用可能

ステップ 3: メッセージ・パッシング・インターフェイスで計算処理を分散
mpi4py のエンジンとしてインテル® MPI ライブラリーを使用© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

13

インテル® Distribution for Python* 2018 のインストール
スタンドアロン・
インストーラーフル・インストーラーをダウンロード:

Anaconda.org> conda config --add channels intel> conda install intelpython3_full> conda install intelpython3_core

Anaconda.org/intel channel

Docker* Hub

2.7 & 3.6https://www.isus.jp/python-distribution/

Windows*

Linux*

docker pull intelpython/intelpython3_full

macOS*

YUM/APT

yum/apt の入手方法:

https://software.intel.com/en-us/articles/installing-intel-freelibs-and-python (英語)© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

14

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ
関連ライブラリー- Python* ライブラリーの高速化 (インテル® MKL、インテル® DAAL、インテル® TBB)
- パフォーマンスのためのコードのチューニング (インテル® VTune™ Amplifier)- 計算処理の分散 (インテル® MPI ライブラリー)

デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

15

インテル® マス・カーネル・ライブラリー(インテル® MKL)
インテル® Parallel Studio XE、インテル® System Studio、インテル® Distribution for Python* で利用可能
無償のスタンドアロン・バージョン (プライオリティー・サポートを含まない) でも利用可能インテル® MKL による高速でスケーラブルなコード
ハイパフォーマンスなマス・カーネル・ライブラリー
各プロセッサー・ファミリーでパフォーマンスを最大限に引き出すように高度に最適化、スレッド化、ベクトル化された数学関数
業界標準の C および Fortran API を利用して、よく使用される BLAS、
LAPACK、FFTW 関数との互換性を実現 — コード変更は不要
コードを分岐せずに各プロセッサー向けに最適化されたコードを自動
ディスパッチインテル® MKL 2018 の新機能
GEMM と LAPACK で小行列の乗算のパフォーマンスを向上
分散型計算の ScaLAPACK パフォーマンスを向上
24 の新しいベクトル演算関数
導入および再配布しやすい簡易ライセンス

詳細: isus.jp/intel-mkl/

yum、apt-get、Conda* リポジトリーでも配布© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

17

インテル® MKL のコンポーネント
HPC、エンタープライズ、IoT、クラウド・アプリケーションを高速化
線形代数
•
•
•
•
•
•
•

BLAS
LAPACK
ScaLAPACK
スパース BLAS
反復法スパースソルバー
PARDISO
クラスター・スパース・ソ
ルバー

サマリー統計
•
•
•
•
•

尖度
変化係数
順序統計量
最小/最大
分散/共分散FFT• 多次元• FFTW インターフェイス• クラスター FFT

ベクトル演算
•
•
•
•
•
•

三角関数
双曲線
指数
対数
累乗
累乗根

ニューラル・ネットワーク
•
•
•
•
•

畳み込み
プーリング
正規化
ReLU
内積

ベクトル RNG
•
•
•
•
•
•

線形合同法
Wichmann-Hill
Mersenne Twister
Sobol
Neiderreiter
非決定的

その他
•
•
•
•

スプライン
補間
信頼領域
高速ポアソンソルバー

インテル® アーキテクチャー・ベースのプラットフォーム
オペレーティング・システム: Windows*、Linux*、macOS*1

1インテル® Parallel Studio XE Composer Edition でのみ利用可能© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

18

インテル® MKL: Python* との統合
Python* の使用
インテル® MKL はインテル® Distribution of Python* に含まれる

Python* コードの変更は不要

そのままで高速な NumPy*
コード変更は不要

Python* でインテル® MKL を使用する利点
シングルコア: ベクトル化、プリフェッチ、キャッシュ効率
 インテル® AVX-5121 ISA 向けの SIMD サポート
マルチ/メニーコア (プロセッサー/ソケット) レベルの並列化
 OpenMP* とインテル® TBB をサポート
マルチソケット (ノード) レベルの並列化とクラスター・
スケーリング
1インテル® アドバンスト・ベクトル・エクステンション 512© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

19

Python* パフォーマンスの向上

インテル® Xeon®
プロセッサー

NumPy* とインテル® MKL を利用したブラック・ショールズ・
アルゴリズムインテル® Core™ i7 プロセッサー

インテル® Xeon Phi™
プロセッサー

ハードウェア: インテル® Core™ i7-7567U プロセッサー @3.50GHz (1 ソケット、ソケットごとに 2 コア、コアごとに 2 スレッド)、32GB DDR4 @2133MHz。
インテル® Xeon® プロセッサー E5-2699 v4 @2.20GHz (2 ソケット、ソケットごとに 22 コア、コアごとに 1 スレッド、HT 無効)、256GB DDR4 @2400MHz。
インテル® Xeon Phi™ 7250 プロセッサー @1.40GHz (1 ソケット、ソケットごとに 68 コア、コアごとに 4 スレッド)、192GB DDR4 @1200MHz、16GB MCDRAM@7200MHz キャッシュモード
ソフトウェア: CentOS* 7.3.1611 (Core)、Python* 3.6.2、pip 9.0.1、NumPy* 1.13.1、SciPy* 0.19.1、scikit-learn 0.19.0。
インテル® Distribution for Python* 2018 Gold パッケージ: インテル® MKL 2018.0.0、intel_4、インテル® DAAL 2018.0.0.20170814、NumPy* 1.13.1、
py36_intel_15、OpenMP* 2018.0.0、intel_7、SciPy* 0.19.1、np113py36_intel_11、scikit-learn 0.18.2、np113py36_intel_3。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や
MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。ベンチマークの出典: インテル コーポレーション
www.intel.com/performance.
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング
SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・
リファレンス・ガイドを参照してください。注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

20

Python* パフォーマンスの向上

sci-kit learn とインテル® MKL を利用したブラック・ショールズ・アルゴリズム
インテル® Distribution for Python* と Python* & NumPy*/scikit-learn システムの比較
9x

スピードアップ

8x
7x
6x
5x
4x
3x
2x
1x
0x
近似近傍

高速化 K 平均法

GLM

GLM NetLASSO

Lasso パス

最小角回帰

非負値行列因子

OpenMP*分解

SGD 回帰非復元抽出

SVD

システム構成: 32x インテル® Xeon® プロセッサー E5-2698 v3 @ 2.30GHz、HT 無効、64GB RAM。インテル® Distribution for Python* 2017 Gold、インテル® MKL 2017.0.0、Ubuntu* 14.04.4 LTS、NumPy* 1.11.1、scikit-learn 0.17.1。
最適化に関する注意事項を参照。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。ベンチマークの出典: インテル コーポレーション
http://www.intel.com/performance.
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張
命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしま
せん。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

21

インテル® データ・アナリティクス・アクセラレーション・
ライブラリー (インテル® DAAL)
インテル® Parallel Studio XE およびインテル® Distribution for Python* で利用可能
スタンドアロン・バージョン (プライオリティー・サポートを含む) でも利用可能インテル® DAAL: 多用途のデータ解析
ビジネス

変換

解析

展開、
フィルタリング、正規化

集計、
次元縮小

サマリー統計、クラスタリングなど

…

観測 n
時間

数値
カテゴリカル
空白/不足
外れ値

計算 (サーバー、デスクトップ、…)

前処理

メモリー
容量

Web/SNS

特徴 p

科学/工学

データ・ソース・エッジ

素早く簡単に分散可能な解析
クライアント・エッジ

検証

意思決定

仮説検証、
モデルエラー

予測、
決定木など

モデリング

マシンラーニング (訓練)、パラメーター推定、
シミュレーション

ビッグデータの特性計算ソリューション

異なるデバイスに分散•通信を回避するアルゴリズムによる分散処理

デバイスメモリーに収まらない大きなデータサイズ•分散処理•ストリーミング・アルゴリズム

データがタイミングよく到着する•データバッファーと非同期計算•ストリーミング・アルゴリズム

非同次データ•カテゴリカル → 数値 (カウンター、ヒストグラムなど)•同次数値データカーネル• 変換、インデックス、再パック

疎/不足/ノイズの多いデータ•疎データ・アルゴリズム•リカバリー処理 (ブートストラップ、外れ値補正)© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

23

インテル® DAAL: アルゴリズム

素早く簡単に分散可能な解析

インテル® DAAL のデータ変換と解析

データセット
の基礎統計
低次
モーメント

補正と
依存性
コサイン
距離

分位数

相関距離

順序統計量

分散共分散
行列

行列の
因数分解

次元縮小

外れ値検出

SVD

PCA

単変量

QR

相関ルール
マイニング
(アプリオリ)

多変量

コレスキー

最適化ソルバー(SGD、AdaGrad、lBFGS)

数学関数(exp、log、…)

バッチ処理をサポートするアルゴリズム
バッチ、オンライン、分散処理をサポートするアルゴリズム© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

24インテル® DAAL: アルゴリズム

素早く簡単に分散可能な解析

インテル® DAAL を利用したマシンラーニングと 2018 の新機能
リグレッション

線形回帰

リッジ回帰

ランダムフォレスト

K 平均法
教師なし学習決定木

教師あり学習EM (GMM)

ブースティング(Ada、Brown、Logit)
ニューラル・
ネットワーク分類

ナイーブベイズ

弱学習器

KNN
バッチ処理をサポートするアルゴリズム

協調
フィルタリング

交互最小 2 乗(ALS)

サポート・ベクトル・マシン

バッチ、オンライン、分散処理をサポートするアルゴリズム© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

25

インテル® DAAL: Python* および NumPy* との統合
完全な Python* API (PyDAAL)

NumPy* 配列を利用して
NumPy* およびその他のパッケージと連携"Gentle Introduction" シリーズ
で pandas との統合とヘルパー関数を利用可能© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

26

インテル® DAAL: Python* および NumPy* との統合
完全な Python* API (PyDAAL)

software.intel.com (英語) にアクセスして"Gentle Introduction to PyDAAL" を検索

NumPy* 配列を利用して
NumPy* およびその他のパッケージと連携"Gentle Introduction" シリーズ
で pandas との統合とヘルパー関数を利用可能© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

27

インテル® DAAL と Spark* MLLib を使用した PCA 計算
インテル® Xeon® プロセッサー E5-2697 v3 ベースの 8 ノードの
Hadoop* クラスターにおける PCA (相関法)

スピードアップ

8
6X

6

7X

7X

1M x 800

1M x 1000

6X

4X
4
2
0
1M x 200

1M x 400

1M x 600

テーブルサイズ
システム構成: インテル® Data Analytics Acceleration Library 2016、CDH v5.3.1、Apache Spark* v1.2.0。ハードウェア: インテル® Xeon® プロセッサー E5-2699 v3、2 x 18 コア CPU (45MB LLC、2.3GHz)、1 ノードあたり
128GB RAM。オペレーティング・システム: CentOS* 6.6 x86_64。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。ベンチマークの出典: インテル コーポレーション
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミン
グ SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル®
マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

28

インテル® DAAL による scikit-learn のさらなる最適化
scikit-learn ベンチマークのスピードアップ

インテル® DAAL による主要なマシンラーニング・アルゴリズムの高速化
距離、K 平均法、線形/リッジ回帰、PCA
インテル® MKL による最適化からさらに最大 160 倍スピードアップ
Scikit-Learn Optimizations
Due to Intel(R) DAAL

スピードアップ

180.00160.00158.91

157.94140.00120.00100.00
80.00
60.00

39.65

40.00
20.00

2.56

5.39

1.57

0.00
1Kx150K

1Kx150K

100Kx50, 10 clusters

10Mx25, training

10Mx25, training

1Mx50, 3 components

Correlation Distance

Cosine Distance

K-means

Linear Regression

Ridge Regression

PCAIntel Python 2017 U2 vs. U1

システム構成: インテル® Data Analytics Acceleration Library 2016、CDH v5.3.1、Apache Spark* v1.2.0。ハードウェア: インテル® Xeon® プロセッサー E5-2699 v3、2 x 18 コア CPU (45MB LLC、2.3GHz)、1 ノードあたり
128GB RAM。オペレーティング・システム: CentOS* 6.6 x86_64。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。ベンチマークの出典: インテル コーポレーション
最適化に関する注意事項: インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミン
グ SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル®
マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

29

インテル® スレッディング・ビルディング・ブロック(インテル® TBB)
インテル® Parallel Studio XE、インテル® System Studio、インテル® Distribution for Python* で利用可能
オープンソースのスタンドアロン・バージョン (プライオリティー・サポートを含まない) でも利用可能インテル® TBB によりマルチスレッド化とヘテロジニアス・
コンピューティングを容易にスレッドの管理を行い、開発者が実証済みの並列処理パターンに専念できるようにする
C++ ランタイム・ライブラリー
利用可能なハードウェア・スレッド数に応じてスケーリング
入れ子の並列処理をサポート

最適なサイズのスレッドプール、タスク粒度、パフォーマンス重視のスケジュールを提供する
ランタイム・ライブラリー
タスクスチールによる自動ロードバランス
キャッシュ効率とメモリー再利用

コミットメント

コンパイラー非依存性
プロセッサー非依存性
OS 非依存性

GNU* GPL v2 ライセンスおよび無償の商用ライセンス
http://opentbb.org (英語)© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

31

スレッド化する理由とPython* との統合
スレッド化の問題は 1990 年代に解決済みでは?

その通り! しかし...
作業を分割する方法は? キャッシュをホットな状態で保持する方法は?
スレッド間のロードバランスをとる方法は? 入れ子の並列処理 (コールチェーン) は?

Python* との統合
インテル® MKL (と OpenMP*) をサポート
インテル® DAAL (& PyDAAL) を使用

コマンドラインから Python* インタープリター命令で呼び出される
その他のコード変更は不要> python -m tbb script.py

グローバル・インタープリター・ロックは?
C の呼び出し時に解放できるネイティブコードは Python* を実行しない限り並列に実行できる
アムダールの法則による効率の制限© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

32

インテル® TBB が再帰並列処理を使用する場合のスケジュール例[Data, Data+N)

範囲を分割...
[Data, Data+N/2)[Data+N/2, Data+N)
ほかのワーカースレッド
は幅優先で古い大きなチャンクのワークをスチールする.. 再帰的に分割...
[Data, Data+N/k)... GrainSize 以下になるまで

スチール可能なタスク[Data, Data+GrainSize)
スレッドは深さ優先で実行するため、局所性が得られる© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

33

インテル® TBB と Python* による並列処理
ソフトウェア・コンポーネントはサブコンポーネント群により構成される
各コンポーネントをスレッド化したら大変!
インテル® TBB は、動的にスレッドのロードバランスを調整し、効率良くオーバーサブスクリプションを管理> python -m tbb script.py

Application
Component 1
Subcomponent 1
Subcomponent
1

Subcomponent 2

NumPy*

SciPy*

pyDAAL

Joblib

Dask

スレッド
プール

Subcomponent
1

Subcomponent
1
Subcomponent
1

Numba

Subcomponent K
Subcomponent
1

インテル® MKL

Component N
Subcomponent 1

インテル®
DAAL

Python* 向けのインテル® TBB
モジュール

Subcomponent
1

Subcomponent M
Subcomponent
1

Subcomponent
1

インテル® TBB ランタイム© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

34

例: インテル® TBB を利用した Python* の入れ子の並列処理> python -m tbb script.py
1.5x

インテル® MKL Numpy* との比較
1.3x

1.1x

0.9x

0.7x

0.5x

0.3x

0.1x

-0.1x

Numpy*

Dask

Numpy*

Dask

Numpy*

Dask

1.00x

0.61x

0.22x

0.89x

0.47x

1.46x

インテル® MKL デフォルトインテル® MKL シリアルインテル® TBB

システム構成: 32x インテル® Xeon® プロセッサー E5-2698 v3 @ 2.30GHz、HT 無効、64GB RAM。
インテル® MKL 2017.0 Beta Update 1。インテル® 64 アーキテクチャー、インテル® AVX2。
インテル® TBB 4.4.4。Ubuntu* 14.04.4 LTS。Dask 0.10.0。Numpy* 1.11.0。
© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

35

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ
関連ライブラリー- Python* ライブラリーの高速化 (インテル® MKL、インテル® DAAL、インテル® TBB)
- パフォーマンスのためのコードのチューニング (インテル® VTune™ Amplifier)- 計算処理の分散 (インテル® MPI ライブラリー)

デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

36

インテル® VTune™ Amplifier
インテル® Parallel Studio XE Professional Edition & Cluster Edition、インテル® System Studio、インテル® Media Server Studio で利用可能
すべてのバージョンにプライオリティー・サポートが含まれる

インテル® VTune™ Amplifier パフォーマンス・プロファイラー
アプリケーション・パフォーマンスとスケーラビリティーの解析とチューニング

高速でスケーラブルなコードを迅速に開発
C、C++、Fortran、Python*、Go*、Java* に加えて、これらの言語が混在したコードを正確にプロファイル
CPU/GPU、スレッド、メモリー、キャッシュ、MPI、ストレージなどを最適化
時間を節約: 詳細な解析により洞察が得られる
プライオリティー・サポートの利用- インテルのエンジニアに技術的な質問を直接問い合わせ可能 (有償バージョン)

2018 の新機能 (一部抜粋)
メモリー解析で Python* をサポート
スレッドのロックと待機解析で Python* をサポート
クロス OS 解析 – Windows* や macOS* から Linux* を解析
コンテナー内部もプロファイル© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

38

さまざまな分野に対応した豊富なプロファイル機能インテル® VTune™ Amplifier パフォーマンス・プロファイラー

基本プロファイル

メモリーを効率良く使用

hotspot

データ構造と NUMA のチューニング

スレッド解析

高速ストレージ向けに最適化

コンカレンシー、ロックと待機
OpenMP*、インテル® TBB

I/O と計算のインバランス

マイクロアーキテクチャー解析

サマリー + 拡張カウンター

キャッシュ、分岐予測、…

インテル® Media SDK との統合

ベクトル化 (+ インテル® Advisor)

有用なメディア・スタック・メトリック

FLOPS 推定

低オーバー ヘッドの Java*、Python*、Go*

MPI (+ インテル® Trace Analyzer &Collector)
スケーラビリティー、インバランス、
オーバーヘッド

容易な OpenCL* & GPU 解析

マネージド + ネイティブコード

コンテナー
Docker*、Mesos*、LXC© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。 OpenCL および OpenCL ロゴは、Apple Inc. の商標であり、Khronos の使用許諾を受けて使用しています。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

39

インテル® VTune™ Amplifier とその他の Python*
プロファイラーの比較
ハイパフォーマンス・アプリケーションをすべてのレベルでプロファイルできるツール
関数レベル/行レベルの hotspot 解析、逆アセンブル
コールスタック解析
低オーバーヘッド言語が混在したマルチスレッド・アプリケーションの解析
キャッシュミス、分岐予測ミスなどが分かる、ネイティブコード (Cython、C++、Fortran) の高度なハードウェア・イベント解析
機能

cProfile

Line_profiler

インテル® VTune™ Amplifier

プロファイル方法

イベント

インストルメンテーション

サンプリング、ハードウェア・イベント

解析の粒度

関数レベル

行レベル

行レベル、コールスタック、タイムライン・ウィンドウ、ハードウェア・イベント

干渉レベル

中 (1.3-5 倍)

高 (4-10 倍)

低 (1.05-1.3 倍)Python*Python*Python*、Cython、C++、Fortran

言語が混在したプログラム© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

40

インテル® VTune™ Amplifier でコードの問題を素早く正確に診断
Python* からネイティブ関数への呼び出しの詳細

ボトルネックのコード行を正確に特定© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

41

インテル® VTune™ Amplifier: 詳細な解析により詳しい情報を提供
Python* とネイティブ

コードのコールスタックのリスト

詳細なタイムライン解析
Python* はシングルスレッド

スレッド化されたプログラムの例© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

42

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ
関連ライブラリー- Python* ライブラリーの高速化 (インテル® MKL、インテル® DAAL、インテル® TBB)
- パフォーマンスのためのコードのチューニング (インテル® VTune™ Amplifier)- 計算処理の分散 (インテル® MPI ライブラリー)

デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

43インテル® MPI ライブラリー (impi)
インテル® Parallel Studio XE Cluster Edition およびインテル® Distribution for Python* で利用可能
スタンドアロン・バージョン (プライオリティー・サポートを含む) でも利用可能インテル® MPI ライブラリーの概要
アプリケーション
最適化された MPI アプリケーション・パフォーマンス

CFD

アプリケーション固有のチューニング
自動チューニング
インテル® Xeon Phi™ プロセッサーをサポート
New! – インテル® Omni-Path ファブリック

高速な MPI 通信

気候

OCD

BIO

その他...

1 つのファブリック向けにアプリケーションを開発

インテル® MPI ライブラリー
実行時にインターコネクト・ファブリックを選択

低レイテンシーおよび複数のベンダーとの互換性
業界トップレベルのレイテンシー
OpenFabrics* インターフェイス (OFI) により、ファブリック向けに最適化されたパフォーマンスをサポート

クラッシュ

TCP/IP

インテル®
Omni-Path
ファブリックInfiniBand*

iWarp

共有
メモリー

…その他の
ネットワークファブリック

最適化された MPI パフォーマンス

最適化された集合操作

クラスター

持続性のあるスケーラビリティー (最大 34 万コアまで)
ネイティブ InfiniBand* インターフェイス・サポートにより、低レイテンシー、
高帯域幅、メモリー使用量の軽減を実現

インテル® MPI ライブラリー – 1 つの MPI
ライブラリーで複数のファブリック向けの開発、保守、テストが可能

安定性に優れた MPI アプリケーション
インテル® Trace Analyzer & Collector とシームレスに連携© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

45

インテル® MPI ライブラリーと Python* (mpi4py)
Conda* とインテル® Distribution of Python* とともに簡単に使用できる環境変数の設定が不要"mpirun" が Conda* の環境パスに含まれている
mpi4py コードの構文は変更不要

高速な MPI 通信
最適化された集合操作> conda activate idp> mpirun –n 16 python -m tbb script.py

持続性のあるスケーラビリティー (最大 34 万コアまで)
ネイティブ InfiniBand* インターフェイス・サポートにより、低レイテンシー、
高帯域幅、メモリー使用量の軽減を実現
コマンドラインから Python* インタープリター命令で呼び出される
その他のコード変更は不要

安定性に優れた MPI アプリケーション
インテル® Trace Analyzer & Collector とシームレスに連携© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

46

内容
Python* とパフォーマンスについてPython* コードを高速化する 3 ステップのアプローチ
関連ライブラリー
デモと関連情報© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

47

共分散行列のデモ
メモリー: 4GB (x72、ECC、SR) 288 ピン DDR4 RDIMM
OS: Ubuntu* 16.04

http://stattrek.com/matrix-algebra/covariance-matrix.aspx (英語)© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

48

共分散行列のデモ© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

49

共分散行列のデモ: 基本 hotspots  サマリー

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

50

共分散行列のデモ: 基本 hotspots  ボトムアップ© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

51

共分散行列のデモ: 基本 hotspots  ソースコード© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

52

共分散行列のデモ: 基本 hotspots  ソースコード
インテル® VTune™ Amplifier により検出された hotspot

オープンソースの code.py

NumPy* を使用してベクトル化© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

53

共分散行列のデモ: 基本 hotspots  サマリー
オリジナル

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

54

共分散行列のデモ: 基本 hotspots  トップダウン© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

55

共分散行列のデモ: 基本 hotspots  ソースコード© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

56

共分散行列のデモ: 基本 hotspots  ソースコード
インテル® VTune™ Amplifier により検出された hotspot

オープンソースの code.py

NumPy* を使用してベクトル化© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

57

共分散行列のデモ: 基本 hotspots  サマリー
オリジナル

ベクトル化適用後© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

58

共分散行列のデモ: NumPy* と PyDAAL  大きなデータセット
4000 万要素の行列

NumPy* の結果

PyDAAL の結果

デフォルトのスレッド化を使用
NumPy* コード

PyDAAL コード© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

59

共分散行列のデモ: NumPy* と PyDAAL  大きなデータセット
4000 万要素の行列
NumPy* のスレッド化の結果

デフォルトのスレッド化を使用

PyDAAL のスレッド化の結果© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

60

共分散行列のデモ: 大きなデータセット
における IDP スピードアップ
メモリー: 4GB (x72、ECC、SR) 288 ピン DDR4 RDIMM
OS: Ubuntu* 16.04

前述の手法で共分散を特定
さまざまなデータセット・サイズ
オリジナルのループとの比較 (対数)オリジナルのループに対するスピードアップ (対数)1000000

100000

10000

1000

100

10

1
一部をベクトル化
100 万要素250 万要素

Numpy*

さらにベクトル化
500 万要素

750 万要素1000 万要素© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

PyDAAL
2500 万要素61

共分散行列のデモ: 大きなデータセット
における IDP スピードアップ
メモリー: 4GB (x72、ECC、SR) 288 ピン DDR4 RDIMM
OS: Ubuntu* 16.04

前述の手法で共分散を特定
さまざまなデータセット・サイズ
オリジナルのループとの比較

オリジナルのループに対するスピードアップ
160000140000120000100000
80000
60000
40000
20000
0
Numpy*
100 万要素250 万要素

PyDAAL
500 万要素

750 万要素1000 万要素© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

2500 万要素62

共分散行列のデモ: impi
メモリー: 4GB (x72、ECC、SR) 288 ピン DDR4 RDIMM
OS: Ubuntu* 16.04

ローカルおよびマスター PyDAAL 関数を定義

Python* で実行ルーチンを記述© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

63

共分散行列のデモ: impi
メモリー: 4GB (x72、ECC、SR) 288 ピン DDR4 RDIMM
OS: Ubuntu* 16.04

MPI_Procs

PyDAAL 実行時間 (秒)
1
0.308
2
0.25
4
0.149
16
0.083
32
0.046
64
0.089
128
0.31

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

64

関連情報
インテル® Distribution for Python* のダウンロード
インテル® VTune™ Amplifier のダウンロード
パフォーマンスの高速化を体験してください
software.intel.com (英語) からチュートリアルとサンプルコードを入手可能

インテル® Distribution for Python*
https://www.isus.jp/python-distribution/インテル® VTune™ Amplifier
https://www.isus.jp/intel-vtune-amplifier-xe/© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

65

法務上の注意書きと最適化に関する注意事項
本資料の情報は、現状のまま提供され、本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスも許諾するものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責任を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証 (特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的財産権の侵害への保証を含む) をするものではありません。
性能に関するテストに使用されるソフトウェアとワークロードは、性能がインテル® マイクロプロセッサー用に最適化されていることがあります。SYSmark* や MobileMark* などの性能テストは、特定のコンピューター・システム、コンポーネント、ソフトウェア、操作、機能に基づいて行ったものです。結果はこれらの要因によって異なります。製品の購入を検討される場合は、他の製品と組み合わせた
場合の本製品の性能など、ほかの情報や性能テストも参考にして、パフォーマンスを総合的に評価することをお勧めします。
© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴ、Intel Inside、Intel Inside ロゴ、Intel Atom、Intel Core、Xeon、Intel Xeon Phi、VTune は、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
最適化に関する注意事項

インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えな
いことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD
拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証い
たしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテ
クチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。
注意事項の改訂 #20110804© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

66

© 2018 Intel Corporation. 無断での引用、転載を禁じます。Intel、インテル、Intel ロゴは、アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
*その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。