<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE>
BLOCKQUOTE {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 2em
}
OL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
UL {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
DIV.FoxDiv20131214120922199808 {
        WORD-WRAP: break-word; COLOR: #000000; -WEBKIT-NBSP-MODE: SPACE; -WEBKIT-LINE-BREAK: AFTER-WHITE-SPACE
}
P {
        MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px
}
BODY {
        LINE-HEIGHT: 1.5; FONT-FAMILY: 微软雅黑; COLOR: #000080; FONT-SIZE: 10.5pt
}
</STYLE>

<META name=GENERATOR content="MSHTML 8.00.7600.17267"></HEAD>
<BODY style="MARGIN: 10px">
<DIV>Hi, Huiwei, </DIV>
<DIV>       I think the best solution for your 
question is cuting the data buffers into smaller sizes.   However, 
This may be not easy. </DIV>
<DIV>       According to my 
experience, the suggestions are </DIV>
<DIV>           1.  Do 
not use  MPI_Alltoallv, and use nonblocking communication insted, such 
as MPI_send and MPI_irecv.  </DIV>
<DIV>           2.  In 
solution 1, each data buffer can not exceeds 2GB too,   If 
the data is too large,  I think we should develop a 
class encapsulated with the data buffer cuting method.</DIV>
<DIV>      </DIV>
<DIV>      However, using int as the 
parameters' type in MPI communication primitives is not reasonable.  As we 
know, in x86_64 machine,  sizeof(int)=4, however sizeof(long) and 
sizeof(long long int)=8, we should support the new parameter type of long 
and long long int.   </DIV>
<DIV> </DIV>
<HR style="WIDTH: 210px; HEIGHT: 1px" align=left color=#b5c4df SIZE=1>

<DIV><SPAN>jt.meng</SPAN></DIV>
<DIV> </DIV>
<DIV 
style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0cm; PADDING-LEFT: 0cm; PADDING-RIGHT: 0cm; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<DIV 
style="PADDING-BOTTOM: 8px; PADDING-LEFT: 8px; PADDING-RIGHT: 8px; FONT-FAMILY: tahoma; BACKGROUND: #efefef; COLOR: #000000; FONT-SIZE: 12px; PADDING-TOP: 8px">
<DIV><B>From:</B> <A href="mailto:huiweilu@mcs.anl.gov">Huiwei Lu</A></DIV>
<DIV><B>Date:</B> 2013-12-14 07:18</DIV>
<DIV><B>To:</B> <A href="mailto:discuss@mpich.org">discuss</A></DIV>
<DIV><B>Subject:</B> [mpich-discuss] The max amount of data each process 
can send in MPI_Alltoallv</DIV></DIV></DIV>
<DIV>
<DIV style="BACKGROUND-COLOR: white" class=FoxDiv20131214120922199808>Hi, folks,
<DIV><BR></DIV>
<DIV>What’s the max amount of data each process can send in MPI_Alltoallv? <A 
href="http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Alltoallv.html">http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Alltoallv.html</A></DIV>
<DIV><BR></DIV>
<DIV>As I understand, the input parameter of <I>sendcnts</I> is an array of int, 
so the amount of data each process can send is limited to MAX_INT (approximately 
2G).</DIV>
<DIV><BR></DIV>
<DIV>What if I want to use MPI_Alltoallv-like MPI routines to send a buffer of 
data that exceeds 2GB? Does it need to cut the data buffers to smaller sizes? Is 
there an easy way to do this? The reason I am asking is one of my distributed 
sort algorithm uses MPI_Alltoallv to distribute data after partitioning; it 
crashed when I tried to send in each process more than 2GB data.</DIV>
<DIV><BR></DIV>
<DIV>Thanks.</DIV>
<DIV>--</DIV>
<DIV>Huiwei Lu<BR><A 
href="http://www.mcs.anl.gov/~huiweilu/">http://www.mcs.anl.gov/~huiweilu/</A></DIV></DIV></DIV></BODY></HTML>