MPI をインポートする mpi4py を使用して Python コードを作成しています。次に、グローバル コミュニケーター MPI.COMM_WORLD をセットアップし、変数 comm に格納します。
このコードを n > 1 のスレッドで実行していますが、ある時点ですべてのスレッドが for ループに入ります (すべてのコアで反復回数が同じになります)。
for ループ内には、「comm.reduce(...)」呼び出しがあります。これはコアの数が少ない場合は機能するようですが、問題のサイズが大きくなると (たとえば 64 コアの場合)、プログラムが「ハング」することがあります。
これが reduce(...) 呼び出しと関係があるかどうか疑問に思っています。この呼び出しにはすべてのスレッドが必要であることはわかっています (つまり、合計で 2 つのスレッドを実行するとします。1 つのスレッドがループに入り、もう 1 つのスレッドが何らかの理由でループに入らない場合、reduce(...) 呼び出しが待機するため、プログラムはハングします。両方のスレッドに対して)。
私の質問は次のとおり です。reduce 呼び出しは「同期」タスクですか、つまり、「comm.Barrier()」呼び出しのように機能しますか? また、可能であれば、より一般的に、同期タスクは何ですか (バリア以外にある場合)?