Я хотел понять сложность времени выполнения функций MPI_Scatter и MPI_Bcast. От них зависит только количество процессоров или количество отправляемых нами элементов.
Пример:
- Трансляция от 1 целого до 10 тыс. Процессоров
- Вещательный массив из 100 целых чисел на процессоры 10 КБ
- Разбрасывание 10000 элементов на 200 процессоров
- разбрасывает 10000 элементов на 1000 процессоров
Я попытался понять время выполнения, используя MPI_Wtime, как показано ниже, и обнаружил, что время выполнения как разброса, так и широковещания зависит только от количества процессоров. Это утверждение правильно?
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 0)
t1 = MPI_Wtime();
MPI_Scatter(&data, n/p, MPI_INT, &temp_data, n/p, MPI_INT, 0, MPI_COMM_WORLD);
//MPI_Bcast(&data, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
t2 = MPI_Wtime();
cout << "Time taken" " << t2-t1 << endl;
Вывод, который я хочу, - это уметь приблизительно сказать, что время выполнения разброса и широковещания будет O (log p), где p - число процессоров.