第10章 マルチプロセッシング・モジュール マルチプロセッシング・モジュール
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
CPython はデフォルトではマルチCPUを使わない。これはPythonがシングルコアの時代に設計されたからでもあるし、並列化を効率的に行うのが実はかなり難しいからでもある。Pythonはそれを行うためのツールを与えてはくれるが、私たち自身の選択に委ねられている。とはいえ、マルチコアマシンで1つのCPUだけを使って長時間処理をするのはつらいので、この章ではマシンのすべてのコアを一度に使う方法を検討する。
注
先ほどCPythonについて触れたが、これは私たち全員が使っている一般的な実装である。Python言語にはマルチコアシステムを使うことを止めるものはない。CPythonの実装はマルチコアを効率的に使うことができないが、将来の実装はこの制限に縛られないかもしれない。
ノートPCでは6コアが一般的で、96コアのデスクトップ構成もある。もしあなたの仕事が、それほど多くのエンジニアリングを必要とせずに、複数のCPUで動作するように分割できるのであれば、これは賢明な方向性である。
Pythonを使ってCPUのセット上で問題を並列化すると、nコアで最大n倍(ntimes)のスピードアップが期待できる。クアッドコアのマシンを持っていて、4つのコアすべてをタスクに使うことができれば、元の実行時間の4分の1で実行できるかもしれない。4倍以上のスピードアップが見られる可能性は低く、実際には3倍から4倍のスピードアップが見られるだろう。
プロセスが追加されるたびに通信オーバーヘッドが増え、使用可能なRAMが減少するため、n倍のスピードアップが得られることはほとんどない。 どの問題を解くかにもよるが、通信オーバーヘッドが非常に大きくなり、大幅な速度低下が見られることさえある。この種の問題は、並列プログラミングの複雑さの原因であることが多く、 、通常はアルゴリズムの変更が必要になる。 これが、並列プログラミングがしばしば芸術とみなされる理由である。
アムダールの法則( )をご存じない方は、背景を読み取っておく価値がある。この法則は、コードのごく一部しか並列実行できない場合、CPUをどれだけ投入しても、全体としてはそれほど速く実行できないことを示している。たとえ実行時間の大部分を並列実行できたとしても、全体的な処理を高速化するために効率的に使用できるCPUの数には限りがある。
multiprocessing モジュール を使えば、プロセスベースやスレッドベースの並列処理を使ったり、キュー上で作業を分担したり、プロセス間でデータを共有したりできる。このモジュールは、主にシングルマシンのマルチコア並列処理に焦点を当てている(マルチマシン並列処理には、より優れたオプションがある)。非常に一般的な使い方は、CPUに負荷のかかる問題に対して、プロセスセット上でタスクを並列化することである。OpenMP ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access