Как правильно передать результат MPI типам - PullRequest
0 голосов
/ 08 января 2020

Stackoverflowers.

Я нубский программист. Я работаю над небольшим проектом, в котором я хочу использовать MPI и Python без mpi4py.

Для простого тестирования я создал матричное умножение, работающее на MPI.

Допустим, моя выходная матрица - "output_mat".

Когда я печатаю "output_mat" из MASTER, он показывает правильный результат, но когда я печатаю его с клиентского узла, он равен нулю.

В моем файле ctypes он ожидает фиксированный размер выходной матрицы.

Но моя функция MPI имеет 2 "output_mat"

Теперь, как я должен передать output_mat в MASTER для ctypes?

Я не знаю мелочей в бэкэнде MPICH.

Я приветствую любые отзывы. Если вам нужна дополнительная информация, дайте мне знать.

Я не беспокоюсь о возврате вывода из MASTER; Однако у меня есть еще одна проблема, которая тесно связана с этим постом.

Если я распечатываю вывод из Python, он печатает столько раз, сколько процессов я использовал для запуска программы Python.

В моем demo.py

    ... //some irrelevant code above

    result = mpi_matmul(mat1, 3, 3, mat2, 3, 3, output_mat, 3, 3);

    print("Expected lenght = 9, Actual length = ", len(result))
    for i in range(len(result)):
        if ((i + 1) % 3) == 0:
            print(result[i])
        else:
            print(result[i], end=" ")

Итак, если я запускаю

mpirun -np 2 python3 demo.py

Результат будет

Expected length = 9, Actual length =  9
30.0 36.0 42.0
66.0 81.0 96.0
102.0 126.0 150.0
Expected length = 9, Actual length =  9
1.0 1.0 1.0
1.0 1.0 1.0
1.0 1.0 1.0


Заранее благодарю за внимание.

...