Introduction
見事な罠にはまったので。
マルチスレッドだと速度が出ないから、とマルチプロセスにしたら全体的なパフォーマンスは上がったのに、なぜか動かなくなったのが Open3D の DBSCAN によるクラスタリング。
What’s wrong?
実は Issue が上がっている。
Deadlock with multiprocessing (using fork) and OpenMP #1552 。
とはいえ、ちょっと探すのに苦労はした。
問題の Issue では、KDTreeSearchParamHybrid
を使っていたため検索で cluster_dbscan
を必死で検索していても何も出ないわけです。
POSIX 環境における folk
が問題なようで、プロセス生成のコンテキストを spawn
から folkserver
に変えると解決する。
自宅でも検証した。
また、C++ でも同様にデッドロックをするように見える。
C++ では spawn
や folkserver
にすることはできても、ワーカーのコードをスクリプトとして実行する必要があるみたいなので、デッドロックを解除する版は未検証。