fork download
  1. from mpi4py import MPI
  2. import numpy as np
  3.  
  4. def main():
  5. comm = MPI.COMM_WORLD
  6. rank = comm.Get_rank()
  7. size = comm.Get_size()
  8.  
  9. K = size # Число процессов
  10. assert K == 8 or K == 12, "Число процессов должно быть 8 или 12"
  11.  
  12. # Размеры решетки
  13. dims = [2, 2, K // 4] # Размерность 2x2x(K/4)
  14.  
  15. # Индексы координат в решетке для текущего процесса
  16. coords = np.unravel_index(rank, dims)
  17.  
  18. # Массив данных для текущего процесса
  19. local_data = np.random.random() # Генерация случайного вещественного числа
  20.  
  21. # Распечатать данные для каждого процесса
  22. print(f"Процесс {rank}: координаты {coords}, значение данных {local_data}")
  23.  
  24. # Разбиение на столбцы
  25. col_index = coords[2] # Индекс столбца
  26. column_data = np.zeros(K // 4) # Массив для хранения значений одного столбца
  27.  
  28. # Собираем данные из всех процессов в один столбец
  29. comm.Allgather(local_data, column_data)
  30.  
  31. # Произведение всех чисел в одном столбце с использованием операции редукции
  32. column_product = np.prod(column_data)
  33.  
  34. # Определение главного процесса для каждого столбца (процесс 0 в каждом столбце)
  35. if coords[0] == 0 and coords[1] == 0:
  36. print(f"Произведение чисел для столбца {col_index}: {column_product}")
  37.  
  38. if __name__ == '__main__':
  39. main()
  40.  
Success #stdin #stdout #stderr 0.27s 40544KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "from mpi4py"
Execution halted