МПИ отправить правильный способ, чтобы отправить матрицу


Я должен использовать MPI API для отправки/получения матриц в моих программах. Для отправки Матрицы я использовал следующий синтаксис:

MPI_Send(matrix, ...)  <- USE THIS

MPI_Send(&matrix, ...)

MPI_Send(&matrix[0][0], ...)

Similar to the last one, but untested: MPI_Send(&matrix[0],....

Я видел в разных примерах использование вышеизложенного, и мне интересно, есть ли разница между ними или кто-то собирается вызвать ошибки на больших данных? Я спрашиваю, потому что я слышал, как человек, который немного знает HPC, говорит об использовании только первого синтаксиса (перечисленного выше), но у меня не было времени спросить его, почему, и я не могу найти причину в Интернете, или Я не знаю, где искать. Все вышеперечисленные работы просто найти на небольших примерах, которые я скомпилировал, но у меня есть только 2 ядра на моем процессоре, так что я не могу быть в состоянии увидеть проблему.

Я понимаю, что эти примеры указывают на один и тот же адрес памяти, так в чем же будет проблема ? Есть ли проблема, связанная с MPI API?

Заранее спасибо

1 3

1 ответ:

Все ссылки на матрицу в вашем вопросе указывают на один и тот же адрес, хотя и с разными типами. MPI_Send принимает void*, поэтому он все равно теряет тип. Так что все звонки практически эквивалентны.

Если тип матрицы изменяется от двумерного массива к указателю, то вышеизложенное уже не эквивалентно. Например, если матрицей является int*, то только первый и последний варианты компилируют и производят требуемый адрес. Поэтому я бы тоже рекомендовал использовать первый вариант-так безопаснее если тип матрицы изменится.