MPI_Bcast()
- это коллективная функция, которая означает, что каждый процесс в коммуникаторе должен вызывать ее. Другими словами, не звоните MPI_Recv()
. Так что избавьтесь от условного if(myrank == 0)
и вызовите все процессы:
MPI_Bcast(vec,W,MPI_INT,0,MPI_COMM_WORLD);
Обратите внимание, что у меня vec
выше, а не &vec
; поскольку vec
уже является массивом, это указатель, который нужен MPI. Кроме того, ваш результат появится в vec
для процессов без полномочий root; нет необходимости в отдельном массиве arr
.
Я рекомендую вам прочитать некоторые примеры MPI и попытаться сделать ваш код более похожим на них.