МПИ отправить правильный способ, чтобы отправить матрицу
Я должен использовать 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 ответ:
Все ссылки на матрицу в вашем вопросе указывают на один и тот же адрес, хотя и с разными типами.
MPI_Send
принимаетvoid*
, поэтому он все равно теряет тип. Так что все звонки практически эквивалентны.Если тип матрицы изменяется от двумерного массива к указателю, то вышеизложенное уже не эквивалентно. Например, если матрицей является
int*
, то только первый и последний варианты компилируют и производят требуемый адрес. Поэтому я бы тоже рекомендовал использовать первый вариант-так безопаснее если тип матрицы изменится.