1

4 つのフレーム (ビデオから取得した画像) を並行して処理するために、joblib を使用しています。これには、各ループが異なるフレームに対して同じ関数を呼び出す並列 for ループを使用しました。フレームのキャプチャにかかる時間は合計処理時間の 1% にすぎないため (ライン プロファイラーを使用した Python スクリプトのプロファイリングで確認)、最初に 4 つのフレームをキャプチャし、マルチプロセッシングのために joblib に渡します。

ラップトップを使用すると、プロセスが約 5 倍高速化されることがわかりました。Rapberry pi-2 (クアッドコア) では、ほぼ 8 倍のスピードアップが観察され、Beaglebone Black (マルチコアではない) でも、ほぼ 7 倍のスピードアップが観察されました。では、joblib はどのように正確にタスクを分散するのでしょうか?

4

1 に答える 1

1

デフォルトでは、 joblib.parallelは Pythonmultiprocessingモジュールを使用して個別の Python ワーカー プロセスをフォークし、個別の CPU で同時にタスクを実行します。

モジュールは複数のコア/プロセッサを利用できます(multiprocessing複数のプロセスを透過的に開始することで GIL を回避します)。threading モジュールに似たいくつかのプリミティブを提供します。

全体的な効率は、コアがメモリへのアクセスを共有する方法の微妙な点に依存します。

于 2015-05-02T20:21:58.323 に答える