On Oct 30, 2013, at 11:55 PM, Jim Parker <jimparker96...@gmail.com> wrote:

> Perhaps I should start with the most pressing issue for me.  I need 64-bit 
> indexing 
> 
> @Martin,
>    you indicated that even if I get this up and running, the MPI library 
> still uses signed 32-bit ints to count (your term), or index (my term) the 
> recvbuffer lengths.  More concretely,
> in a call to MPI_Allgatherv( buffer, count, MPI_Integer, recvbuf, recv-count, 
> displ, MPI_integer, MPI_COMM_WORLD, status, mpierr): count, recvcounts, and 
> displs must be  32-bit integers, not 64-bit.  Actually, all I need is displs 
> to hold 64-bit values...
> If this is true, then compiling OpenMPI this way is not a solution.  I'll 
> have to restructure my code to collect 31-bit chunks...
> Not that it matters, but I'm not using DIRAC, but a custom code to compute 
> circuit analyses.

Yes, that is correct -- the MPI specification makes us use C "int" for outer 
level count specifications.  We do use larger than that internally, though.

The common workaround for this is to make your own MPI datatype -- perhaps an 
MPI_TYPE_VECTOR -- that strings together N contiguous datatypes, and then send 
M of those.

For example, say you need to send 8B (billion) contiguous INTEGERs.  You 
obviously can't represent 8B with a C int (or a 4 byte Fortran INTEGER).  So 
what you would do is something like this (forgive me -- I'm a C guy):

-----
int my_buffer[8 billion];
MPI_Datatype my_type;
// This makes a datatype of 8 contiguous int's
MPI_Type_vector(1, 8, 0, MPI_INT, &my_type);
MPI_Type_commit(&my_type);
MPI_Send(my_buffer, 1048576, my_type, ...);
-----

This basically sends 1B types that are 8 int's long, and is therefore an 8B int 
message.

Make sense?

> @Jeff,
>   Interesting, your runtime behavior has a different error than mine.  You 
> have problems with the passed variable tempInt, which would make sense for 
> the reasons you gave.  However, my problem involves the fact that the local 
> variable "rank" gets overwritten by a memory corruption after MPI_RECV is 
> called.

Odd.  :-\

> Re: config.log. I will try to have the admin guy recompile tomorrow and see 
> if I can get the log for you.  
> 
> BTW, I'm using the gcc 4.7.2 compiler suite on a Rocks 5.4 HPC cluster.  I 
> use the options -m64 and -fdefault-integer-8

Ok.  I was using icc/ifort with -m64 and -i8.

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/

Reply via email to