bsp_exptable.c

Go to the documentation of this file.
00001 /*
00002     BSPonMPI. This is an implementation of the BSPlib standard on top of MPI
00003     Copyright (C) 2006  Wijnand J. Suijlen
00004                                                                                 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Lesser General Public
00007     License as published by the Free Software Foundation; either
00008     version 2.1 of the License, or (at your option) any later version.
00009                                                                                 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Lesser General Public License for more details.
00014                                                                                 
00015     You should have received a copy of the GNU Lesser General Public
00016     License along with this library; if not, write to the Free Software
00017     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00018                                                                                 
00019     You may contact me via electronic mail:
00020       wjsuijle@users.sourceforge.net
00021     or snail mail:
00022       W.J. Suijlen
00023       Kraaiheidelaan 10
00024       2803 VP Gouda
00025       The Netherlands
00026 */
00027 
00028 #include "bsp_exptable.h"
00029 #include "bsp_alloc.h"
00030 #include "bsp_abort.h"
00046 void
00047 expandableTable_comm (const ExpandableTable * restrict send, 
00048                       ExpandableTable *restrict  recv, MPI_Comm communicator)
00049 {
00050   int recv_offset[send->nprocs], send_offset[send->nprocs];
00051   int recv_bytes[send->nprocs], send_bytes[send->nprocs];
00052   int i;
00053 
00054 /* initalize recv offsets */
00055   for (i = 0; i < recv->nprocs; i++)
00056     {
00057       recv_offset[i] = i * recv->rows * recv->slot_size;
00058       send_offset[i] = i * send->rows * send->slot_size;
00059       send_bytes[i] = send->used_slot_count[i] * send->slot_size;
00060       recv_bytes[i] = recv->used_slot_count[i] * recv->slot_size;
00061     }
00062   /* the next thing to do is to walk the send table and actually send the 
00063    * data */
00064   
00065   MPI_Alltoallv (send->data, send_bytes, send_offset, MPI_BYTE,
00066       recv->data, recv_bytes, recv_offset, MPI_BYTE, communicator);
00067 }
00068 
00069 

Generated on Sat Apr 8 20:12:29 2006 for BSPonMPI by  doxygen 1.4.6