この記事は、インテル® デベロッパー・ゾーンに公開されている「What to do when Nested Parallelism Runs Amuck? Getting Started with Python* module for Threading Building Blocks (Intel® TBB) in Less than 30 Minutes!」(https://software.intel.com/en-us/articles/what-to-do-when-nested-parallelism-runs-amuck-getting-started-with-python-module-for) の日本語参考訳です。
製品の概要
インテル® スレッディング・ビルディング・ブロック (インテル® TBB) は、並列処理のエキスパートであるインテルが提供する、移植性に優れたオープンソースの並列プログラミング・ライブラリーです。インテル® Distribution for Python* に含まれるインテル® TBB 向け Python* モジュールは、入れ子構造の並列処理の一般的な問題に対応する、すぐに使えるスケジューリング機能です。プロセス内とプロセス間の同時実行を調整します。この記事は、インテル® TBB 向け Python* モジュールを使用して Python* プログラムを起動し、NumPy* や SciPy* などの一般的な Python* モジュールの数学処理をインテル® マス・カーネル・ライブラリー (インテル® MKL) のスレッド・スケジュールで並列化する方法を示します。インテル® MKL もインテル® Distribution for Python* に無料でバンドルされています。インテル® TBB は、豊富な機能の Python* API を備えたハイパフォーマンスな解析パッケージであるインテル® データ・アナリティクス・ライブラリー (インテル® DAAL) 向けのネイティブスレッド化ライブラリーです。さらに、インテル® Distribution for Python* のフルパッケージを使用している場合、Numba、OpenCV*、および一部の scikit-learn アルゴリズム (インテル® DAAL により高速化されている) をネイティブスレッド化します。
インテル® TBB の入手方法
インテル® Distribution for Python* のフルパッケージ (インテル® TBB を含む) をインストールするには、以下のインストール・ガイドを参照してください。
Anaconda* パッケージ
YUM リポジトリー
APT リポジトリー
Docker* イメージ (https://software.intel.com/en-us/articles/docker-images-for-intel-python)
Anaconda* クラウドをインストールするには、次のコマンドを実行します。
conda install -c intel tbb4py
インタープリター呼び出しでの使用 (コード変更不要)
インテル® TBB をドロップインして、問題に適したソリューションを決定するだけです。
入れ子構造の並列呼び出しが原因でオーバーサブスクリプション状態となりパフォーマンスが低下することがありますが、多くの場合、ユーザーはこれに気付きません。スクリプト環境ではこのような「問題」が起こりやすいことが知られています。インテル® TBB は、コード変更を必要とせず、デフォルト設定のスレッド・スケジュールで簡単に調整できます。Python* コミュニティーで多用されるスクリプトでは、インテル® TBB のパフォーマンス回復のチェックは簡単です。既存の数学処理コードがある場合、次のように “-m tbb” インタープリター・フラグとスクリプト名、スクリプトに必要な引数を指定して、簡単に起動できます。
python -m tbb script.py args*
注: 利用可能なフラグの一覧は、「インタープリター・フラグ・リファレンス」を参照してください。
インタープリター・フラグ・リファレンス
コマンドライン構文
python -m tbb [-h] [--ipc] [-a] [--allocator-huge-pages] [-p P] [-b] [-v] [-m] script.py args*
コマンドライン・ヘルプの表示方法
python -m tbb --help pydoc tbb
現在利用可能なインタープリター・フラグの一覧
インタープリター・フラグ | 説明 |
---|---|
-h、 –help |
ヘルプメッセージを表示します。 |
-m | モジュールとして実行します (デフォルト: False)。 |
-a、 –allocator |
標準のメモリー・アロケーターの代わりに、インテル® TBB のスケーラブル・アロケーターを有効にします (デフォルト: False)。 |
–allocator-huge-pages | インテル® TBB アロケーターでラージページを有効にします (暗黙で -a が有効になります) (デフォルト: False)。 |
-p P、 –max-num-threads P |
プロセスごとの最大スレッド数 P でインテル® TBB を初期化します (デフォルト: システムで利用可能な論理プロセッサー数)。 |
-b、 –benchmark |
スクリプトを続行する前に、すべてのスレッドが生成されるまでインテル® TBB の初期化をブロックします。パフォーマンス・ベンチマークの測定にインテル® TBB の初期化を含めたくない場合、これが必要です (デフォルト: False)。 |
-v、 –verbose |
詳細とバージョン情報を要求します (デフォルト: False)。 |
–ipc | インテル® TBB スケジューラーの間でプロセス間の調整 (IPC) を有効にします (デフォルト: False)。 |
関連情報 (英語)
インテル® TBB の製品ページ
簡単な紹介ビデオ (英語)
SciPy* 2017 会議録 (英語)
SciPY 2016 紹介ビデオ (英語)
DASK* でのインテル® TBB の利用に関するブログ
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。