On Wed, Oct 31, 2012 at 4:25 AM, Jeff Squyres <[email protected]> wrote:
> On Oct 28, 2012, at 10:28 AM, Dmitri Gribenko wrote:
>
>> Thank you for the feedback! Hopefully the attached patch fixes both of
>> these.
>>
>> 1. There are two helper structs with complex numbers. I predicated
>> the struct declarations and use to appear only in C99.
>>
>> 2. These macros were indeed missing.
>
> I did a few tests and this now looks good; no more warnings.
>
> I brought up this functionality on the weekly OMPI dev telecon today and got
> an important piece of feedback: apparently there are a large class of apps
> that wrap their messages as transparent blobs, and then use either
> non-blob-like or derived MPI datatypes. (I said something similar to this
> earlier in the thread, but I didn't know that there was a large class of apps
> that actually did it)
>
> A very simple example is:
>
> char *foo = malloc(...);
> // ...fill foo...
> MPI_Send(foo, x, MPI_INT, ...);
>
> Another not-uncommon example is:
>
> char *foo = malloc(...);
> // Receive some INTEGERs from a Fortran sender
> MPI_Recv(foo, x, MPI_INTEGER, ...);
>
> With this patch, they'd get warnings about these uses, even though they are
> completely valid according to MPI.
>
> A suggestion was that this functionality could be disabled by default, and
> enabled with a magic macro. Perhaps something like:
>
> mpicc -DOMPI_DDT_CHECKING ...
>
> or something like that.
>
> Thoughts?
This is a vaild concern and a good idea for a FAQ entry.
Q: How to silence warnings about buffer type/type tag mismatch?
A: There are multiple ways for an MPI application to silence these
warnings. To silence a particular warning, change the type of the
buffer to 'void *' or explicitly cast it to 'void *':
void *foo = malloc(...);
// ...fill foo...
MPI_Send(foo, x, MPI_INT, ...);
or:
char *foo = malloc(...);
// ...fill foo...
MPI_Send((void *) foo, x, MPI_INT, ...);
To turn off all warnings of this kind in clang, use the
-Wno-type-safety command line option.
It is also possible to completely remove annotations from mpi.h by
defining a macro OMPI_NO_ATTR_TYPE_TAGS in the source code or on the
compiler's command line.
Dmitri
--
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <[email protected]>*/