<font size=2 face="sans-serif">A customer (Argonne ;) is complaining about
O(p) allocations in collective i/o. A collective read is failing
at larger scale. </font>
<br>
<br><font size=2 face="sans-serif">Any thoughts or comments or advice?
There appears to be lots of O(p) in ROMIO collective I/O. Plus
a lot of (possibly large) aggregated data buffers. A quick search
shows</font>
<br>
<br><font size=2 face="sans-serif">The common ROMIO read collective code:</font>
<br>
<br><font size=2 face="sans-serif">Find all "ADIOI_Malloc", Match
case, Regular expression (UNIX)
</font>
<br><font size=2 face="sans-serif">File Z:\bgq\comm\lib\dev\mpich2\src\mpi\romio\adio\common\ad_read_coll.c
</font>
<br><font size=2 face="sans-serif"> 124 38:
st_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 125 39:
end_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 317 44:
*offset_list_ptr = (ADIO_Offset *) ADIOI_Malloc(2*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 318 41:
*len_list_ptr = (ADIO_Offset *) ADIOI_Malloc(2*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 334 44:
*offset_list_ptr = (ADIO_Offset *) ADIOI_Malloc(2*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 335 41:
*len_list_ptr = (ADIO_Offset *) ADIOI_Malloc(2*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 436 18:
ADIOI_Malloc((contig_access_count+1)*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 437 41:
*len_list_ptr = (ADIO_Offset *) ADIOI_Malloc((contig_access_count+1)*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 573 37: if (ntimes)
read_buf = (char *) ADIOI_Malloc(coll_bufsize);
</font>
<br><font size=2 face="sans-serif"> 578 21: count =
(int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 587 25: send_size
= (int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 590 25: recv_size
= (int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 598 25: start_pos
= (int *) ADIOI_Malloc(nprocs*sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 739 32:
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
</font>
<br><font size=2 face="sans-serif"> 744 33:
read_buf = (char *) ADIOI_Malloc(for_next_iter+coll_bufsize);
</font>
<br><font size=2 face="sans-serif"> 805 9: ADIOI_Malloc((nprocs_send+nprocs_recv+1)*sizeof(MPI_Request));
</font>
<br><font size=2 face="sans-serif"> 827 30:
recv_buf = (char **) ADIOI_Malloc(nprocs * sizeof(char*));
</font>
<br><font size=2 face="sans-serif"> 830 44:
(char *) ADIOI_Malloc(recv_size[i]);
</font>
<br><font size=2 face="sans-serif"> 870 31: statuses
= (MPI_Status *) ADIOI_Malloc((nprocs_send+nprocs_recv+1) * \
</font>
<br><font size=2 face="sans-serif"> 988 35: curr_from_proc
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif"> 989 35: done_from_proc
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif"> 990 35: recv_buf_idx
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif">Total found: 22
</font>
<br>
<br><font size=2 face="sans-serif">Our BG version of read collective:</font>
<br>
<br><font size=2 face="sans-serif">File Z:\bgq\comm\lib\dev\mpich2\src\mpi\romio\adio\ad_bg\ad_bg_rdcoll.c
</font>
<br><font size=2 face="sans-serif"> 179 40:
st_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 180 40:
end_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 183 43:
bg_offsets0 = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 184 43:
bg_offsets = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
</font>
<br><font size=2 face="sans-serif"> 475 37: if (ntimes)
read_buf = (char *) ADIOI_Malloc(coll_bufsize);
</font>
<br><font size=2 face="sans-serif"> 480 21: count =
(int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 489 25: send_size
= (int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 492 25: recv_size
= (int *) ADIOI_Malloc(nprocs * sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 500 25: start_pos
= (int *) ADIOI_Malloc(nprocs*sizeof(int));
</font>
<br><font size=2 face="sans-serif"> 676 32:
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
</font>
<br><font size=2 face="sans-serif"> 681 33:
read_buf = (char *) ADIOI_Malloc(for_next_iter+coll_bufsize);
</font>
<br><font size=2 face="sans-serif"> 761 9: ADIOI_Malloc((nprocs_send+nprocs_recv+1)*sizeof(MPI_Request));
</font>
<br><font size=2 face="sans-serif"> 783 30:
recv_buf = (char **) ADIOI_Malloc(nprocs * sizeof(char*));
</font>
<br><font size=2 face="sans-serif"> 786 44:
(char *) ADIOI_Malloc(recv_size[i]);
</font>
<br><font size=2 face="sans-serif"> 826 31: statuses
= (MPI_Status *) ADIOI_Malloc((nprocs_send+nprocs_recv+1) * \
</font>
<br><font size=2 face="sans-serif"> 944 35: curr_from_proc
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif"> 945 35: done_from_proc
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif"> 946 35: recv_buf_idx
= (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
</font>
<br><font size=2 face="sans-serif"> 1058 23: rdispls
= (int *) ADIOI_Malloc( nprocs * sizeof(int) );
</font>
<br><font size=2 face="sans-serif"> 1063 29: all_recv_buf
= (char *) ADIOI_Malloc( rtail );
</font>
<br><font size=2 face="sans-serif"> 1064 26: recv_buf
= (char **) ADIOI_Malloc(nprocs * sizeof(char *));
</font>
<br><font size=2 face="sans-serif"> 1068 23: sdispls
= (int *) ADIOI_Malloc( nprocs * sizeof(int) );
</font>
<br><font size=2 face="sans-serif"> 1073 29: all_send_buf
= (char *) ADIOI_Malloc( stail );
</font>
<br><font size=2 face="sans-serif">Total found: 23</font>
<br>
<br><font size=2 face="sans-serif"><br>
Bob Cernohous: (T/L 553) 507-253-6093<br>
<br>
BobC@us.ibm.com<br>
IBM Rochester, Building 030-2(C335), Department 61L<br>
3605 Hwy 52 North, Rochester, MN 55901-7829<br>
<br>
> Chaos reigns within.<br>
> Reflect, repent, and reboot.<br>
> Order shall return.<br>
</font>