[mpich-discuss] Erroneous MPI type tag warning
Junchao Zhang
jczhang at mcs.anl.gov
Sun Dec 22 23:27:21 CST 2013
Oops, MPI_MAXLOC requires MPI_DOUBLE_INT and the like.
The MPI_Reduce(in, out, 2, INT, MPI_MAXLOC, ...) approach is incorrect.
--Junchao Zhang
On Sun, Dec 22, 2013 at 10:58 PM, Junchao Zhang <jczhang at mcs.anl.gov> wrote:
> Hi, Markus,
> I think you should change MPI_Reduce(in, out, 1, MPI_2INT, MPI_MAXLOC,
> 0, MPI_COMM_WORLD) to MPI_Reduce(in, out, 2, INT, MPI_MAXLOC, 0,
> MPI_COMM_WORLD).
> I guess the warning has nothing to do with padding. For MPI_Reduce(in,
> out, 1, MPI_2INT, ...), the compiler tries to match int, i.e., typeof(*in),
> with MPI_2INT. Whatever the layout of MPI_2INT is defined (e.g., struct
> {int i1; int i2} or int[2]), the compiler fails at matching. If you want to
> use MPI_2INT, then in, out should be defined as of type struct {int v1;
> int v2}.
>
> I agree that MPI_Reduce(in, out, 1, MPI_2INT, ...) is absolutely right.
> I think the only reason for the warning is that the compiler is not smart
> enough. For example, when matching a pointer P with a type T, the compiler
> should try to match typeof(*P) ~ T, typeof(*P)[2] ~T, typeof(*P)[3] ~ T,
> etc.
>
>
> --Junchao Zhang
>
>
> On Sun, Dec 22, 2013 at 3:56 AM, Markus Geimer <m.geimer at fz-juelich.de>wrote:
>
>> Dear MPICH developers,
>>
>> When compiling the attached example with MPICH 3.1rc2 using Clang 3.3,
>> I get the following compiler warnings:
>>
>> -------------------- snip --------------------
>> mpi2int.c:17:20: warning: argument type 'int *' doesn't match specified
>> 'MPI' type tag [-Wtype-safety]
>> MPI_Reduce(in, out, 1, MPI_2INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
>> ^~~ ~~~~~~~~
>> mpi2int.c:17:16: warning: argument type 'int *' doesn't match specified
>> 'MPI' type tag [-Wtype-safety]
>> MPI_Reduce(in, out, 1, MPI_2INT, MPI_MAXLOC, 0, MPI_COMM_WORLD);
>> ^~ ~~~~~~~~
>> 2 warnings generated.
>> -------------------- snip --------------------
>>
>> According to the MPI standard, however, MPI_2INT is a datatype as if
>> defined by
>>
>> MPI_Type_contiguous(2, MPI_INT, MPI_2INT)
>>
>> i.e., 'int[2]' should be a perfect match. This is not necessarily true
>> for the type used for comparison,
>>
>> struct mpich_struct_mpi_2int { int i1; int i2; };
>>
>> which will only be contiguous if the compiler does not add any padding.
>>
>> Is there any chance this gets fixed for the final 3.1 release? Or did
>> I miss something?
>>
>> Thanks,
>> Markus
>>
>> --
>> Dr. Markus Geimer
>> Juelich Supercomputing Centre
>> Institute for Advanced Simulation
>> Forschungszentrum Juelich GmbH
>> 52425 Juelich, Germany
>>
>> Phone: +49-2461-61-1773
>> Fax: +49-2461-61-6656
>> E-mail: m.geimer at fz-juelich.de
>> WWW: http://www.fz-juelich.de/jsc/
>>
>>
>>
>> ------------------------------------------------------------------------------------------------
>>
>> ------------------------------------------------------------------------------------------------
>> Forschungszentrum Juelich GmbH
>> 52425 Juelich
>> Sitz der Gesellschaft: Juelich
>> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
>> Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
>> Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender),
>> Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
>> Prof. Dr. Sebastian M. Schmidt
>>
>> ------------------------------------------------------------------------------------------------
>>
>> ------------------------------------------------------------------------------------------------
>>
>>
>> _______________________________________________
>> discuss mailing list discuss at mpich.org
>> To manage subscription options or unsubscribe:
>> https://lists.mpich.org/mailman/listinfo/discuss
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20131222/30ec8d0c/attachment.html>
More information about the discuss
mailing list