2016-10-25 2 views
2

Я использую MPI_Bcast в C, когда я выполнил модель, она дает ошибку, необходимую PGC-S-0094-Illegal преобразование типа (om3coupled.c: 7284)Неверное преобразование типа, требуемое в MPI, советы по отладке?

но линия 7284 является довольно простой код:

MPI_Bcast(sumw,1,MPI_FLOAT,0,MPI_COMM_WORLD); 

, где sumw - значение поплавка, равное 1, я определил его ранее. Я попытался передать его из корневого процесса во все узлы. Я знаю, что я, вероятно, перепутался где-то в другом месте, чтобы привести к ошибке в этой, казалось бы, правильной строке, но на этой строке я получил только сообщение об ошибке. Кто-нибудь знает, как отлаживать? Поскольку код 7000 + линии, так что я не придала исходный код

ответ

1

прототип:

int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, 
      MPI_Comm comm) 

вы должны пройти адрес вашего поплавка, как если бы это был массив из 1 элемента :

MPI_Bcast(&sumw,1,MPI_FLOAT,0,MPI_COMM_WORLD); 
+0

Вы правы, это действительно проблема с адресом. Моя путаница в том, что я видел много MP_Bcast в модели, просто передающей матрицу с плавающей точкой без добавления «&», например MPI_Bcast (ind, nmem, MPI_INT, 0, MPI_COMM_WORLD); где ind - одномерный массив типа float (1 * nmem). Когда «&» необходимо? – harmony

+0

вам нужно '&' конвертировать в адрес, когда у вас есть значения. Если у вас есть массив, он вам не нужен, поскольку он уже является адресом. –

Смежные вопросы