ホームページ > バックエンド開発 > Python チュートリアル > NumPy をインポートすると、単一コアでマルチプロセッシングが停止するのはなぜですか?

NumPy をインポートすると、単一コアでマルチプロセッシングが停止するのはなぜですか?

Patricia Arquette
リリース: 2024-10-29 18:19:57
オリジナル
274 人が閲覧しました

Why Does Multiprocessing Stall on a Single Core When NumPy Is Imported?

NumPy がインポートされると単一コアでマルチプロセッシングが停止する理由

joblib を使用して CPU 集中型のループを並列化しようとすると、次のような問題が発生する可能性があります。すべてのワーカー プロセスが同じコアに割り当てられ、パフォーマンスが向上しないという問題。これは、インポート時にコア アフィニティを操作する NumPy などの特定の Python モジュールが原因で発生します。

根本原因:

マルチスレッド OpenBLAS ライブラリに対する NumPy リンクがコア アフィニティを妨げます。

解決策:

この問題を解決するには、次のコマンドを使用してタスク アフィニティをリセットします。

<code class="python">os.system("taskset -p 0xff %d" % os.getpid())</code>
ログイン後にコピー

インポート後にこの行を配置します。問題が発生したモジュール。これにより、使用可能なすべてのコアでプロセスが強制的に実行されます。

代替ソリューション:

  • 環境変数: OPENBLAS_MAIN_FREE (または GOTOBLAS_MAIN_FREE) を設定します。 ) 実行時に環境変数を 1 に設定して、OpenBLAS の CPU アフィニティ リセット動作を無効にします。
  • ビルド時の変更: Makefile.rule を変更して CPU アフィニティ リセットを永続的に無効にします。 OpenBLAS をソースからコンパイルするときの行 NO_AFFINITY=1。

以上がNumPy をインポートすると、単一コアでマルチプロセッシングが停止するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート