インテル® MKL 2017 デベロッパー・ガイド
インテル® MKL で使用する OpenMP* スレッド数を指定するには、以下の手法を使用します。
mkl_set_num_threads または mkl_domain_set_num_threads 関数の呼び出しは、(ほかのスレッドで) 処理中のすべての呼び出しと以降のインテル® MKL 呼び出しで利用可能な OpenMP* スレッド数を変更します。これにより、インテル® MKL のパフォーマンスが低下したり、インテル® Inspector などのランタイムツールによって競合状態が報告されることがあります。
このような状況を回避するには、mkl_set_num_threads_local 関数を使用します (関数の説明は、『インテル® MKL デベロッパー・リファレンス』の「Support Functions」セクションの章を参照してください。
手法を選択する場合、以下の規則を考慮してください。
インテル® TBB スレッディング・テクノロジーを使用してプログラムをスレッド化する場合のスレッド数の指定方法は、https://www.threadingbuildingblocks.org/documentation にある tbb::task_scheduler_init クラスの説明を参照してください。