Dear All,
Installed openmpi 1.10.0 and gcc-5.2 using Fink (http://www.finkproject.org)
but nothing is changed with my code.
Regarding the MPI_Finalize error in my previous mail, it should be my fault. I
had removed all mpi stuff in /usr/local/ manually and the openmpi-1.10.0 had
been installed then the error message didn’t appear now. Maybe some old version
of openmpi stuff still remained there.
Anyway, I found the reason of my problem. The code is :
void
Block::MPISendEqualInterChangeData( DIRECTION dir, int rank, int id ) {
GetEqualInterChangeData( dir, cf[0] );
int N = GetNumGrid();
int nb = 6*N*N*1;
nb = 1010;
// float *buf = new float[ nb ];
float *buf = (float *)malloc( sizeof(float)*nb);
for( int i = 0; i < nb; i++ ) buf[i] = 0.0;
MPI_Request req;
MPI_Status status;
int tag = 100 * id + (int)dir;
MPI_Isend( buf, nb, MPI_REAL4, rank, tag, MPI_COMM_WORLD, &req );
MPI_Wait( &req, &status );
// delete [] buf;
free( buf );
}
This works. If the “nb” value changes to more than “1010”, MPI_Wait will stall.
This means the upper limit of MPI_Isend would be 4 x 1010 = 4040 bytes.
If this is true, is there any way to increase this?. I guess this should be
wrong and there should be something wrong with my system.
Any idea and suggestions are really appreciated.
Thank you.
2015/11/03 8:05、Jeff Squyres (jsquyres) <[email protected]> のメール:
> On Oct 29, 2015, at 10:24 PM, ABE Hiroshi <[email protected]> wrote:
>>
>> Regarding my code I mentioned in my original mail, the behaviour is very
>> weird. MPI_Isend is called from the different named function, it works.
>> And I wrote a sample program to try to reproduce my problem but it works
>> fine, except the problem of MPI_Finalize.
>>
>> So I decided to make gcc-5.2 and make openmpi on it, which seems to be a
>> recommendation of the FINK project.
>
> Ok. Per the prior mail, if you can make a small reproducer, that would be
> most helpful in tracking down the issue.
>
> Thanks!
ABE Hiroshi
from Tokorozawa, JAPAN