<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>