/* Copyright: Rolf Rabenseifner, 1997
* Computing Center University of Stuttgart
/* Copyright: Rolf Rabenseifner, 1997
* Computing Center University of Stuttgart
MPI: /opt/ctl/mpt/1.1.0.3
datatype: MPI_DOUBLE
Ldb[][] = {{ 896,1728, 576, 736},{ 448,1280, 512, 512}}
MPI: /opt/ctl/mpt/1.1.0.3
datatype: MPI_DOUBLE
Ldb[][] = {{ 896,1728, 576, 736},{ 448,1280, 512, 512}}
#endif
typedef enum {MPIM_SHORT, MPIM_INT, MPIM_LONG, MPIM_UNSIGNED_SHORT,
#endif
typedef enum {MPIM_SHORT, MPIM_INT, MPIM_LONG, MPIM_UNSIGNED_SHORT,
- MPIM_UNSIGNED, MPIM_UNSIGNED_LONG, MPIM_FLOAT,
+ MPIM_UNSIGNED, MPIM_UNSIGNED_LONG, MPIM_UNSIGNED_LONG_LONG, MPIM_FLOAT,
-typedef enum {MPIM_MAX, MPIM_MIN, MPIM_SUM, MPIM_PROD,
- MPIM_LAND, MPIM_BAND, MPIM_LOR, MPIM_BOR,
+typedef enum {MPIM_MAX, MPIM_MIN, MPIM_SUM, MPIM_PROD,
+ MPIM_LAND, MPIM_BAND, MPIM_LOR, MPIM_BOR,
MPIM_LXOR, MPIM_BXOR} MPIM_Op;
#define MPI_I_DO_OP_C_INTEGER(MPI_I_do_op_TYPE,TYPE) \
static void MPI_I_do_op_TYPE(TYPE* b1,TYPE* b2,TYPE* rslt, int cnt,MPIM_Op op)\
MPIM_LXOR, MPIM_BXOR} MPIM_Op;
#define MPI_I_DO_OP_C_INTEGER(MPI_I_do_op_TYPE,TYPE) \
static void MPI_I_do_op_TYPE(TYPE* b1,TYPE* b2,TYPE* rslt, int cnt,MPIM_Op op)\
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_ushort, unsigned short)
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_uint, unsigned int)
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_ulong, unsigned long)
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_ushort, unsigned short)
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_uint, unsigned int)
MPI_I_DO_OP_C_INTEGER( MPI_I_do_op_ulong, unsigned long)
MPI_I_DO_OP_FP( MPI_I_do_op_float, float)
MPI_I_DO_OP_FP( MPI_I_do_op_double, double)
MPI_I_DO_OP_BYTE( MPI_I_do_op_byte, char)
MPI_I_DO_OP_FP( MPI_I_do_op_float, float)
MPI_I_DO_OP_FP( MPI_I_do_op_double, double)
MPI_I_DO_OP_BYTE( MPI_I_do_op_byte, char)
MPI_I_DO_OP_CALL(MPI_I_do_op_uint, unsigned int)
case MPIM_UNSIGNED_LONG:
MPI_I_DO_OP_CALL(MPI_I_do_op_ulong, unsigned long)
MPI_I_DO_OP_CALL(MPI_I_do_op_uint, unsigned int)
case MPIM_UNSIGNED_LONG:
MPI_I_DO_OP_CALL(MPI_I_do_op_ulong, unsigned long)
case MPIM_FLOAT : MPI_I_DO_OP_CALL(MPI_I_do_op_float, float)
case MPIM_DOUBLE: MPI_I_DO_OP_CALL(MPI_I_do_op_double, double)
case MPIM_BYTE : MPI_I_DO_OP_CALL(MPI_I_do_op_byte, char)
case MPIM_FLOAT : MPI_I_DO_OP_CALL(MPI_I_do_op_float, float)
case MPIM_DOUBLE: MPI_I_DO_OP_CALL(MPI_I_do_op_double, double)
case MPIM_BYTE : MPI_I_DO_OP_CALL(MPI_I_do_op_byte, char)
{
char *scr1buf, *scr2buf, *scr3buf, *xxx, *sendbuf, *recvbuf;
int myrank, size, x_base, x_size, computed, idx;
{
char *scr1buf, *scr2buf, *scr3buf, *xxx, *sendbuf, *recvbuf;
int myrank, size, x_base, x_size, computed, idx;
- int x_start, x_count, r, n, mynewrank, newroot, partner;
+ int x_start, x_count = 0, r, n, mynewrank, newroot, partner;
int start_even[20], start_odd[20], count_even[20], count_odd[20];
MPI_Aint typelng;
MPI_Status status;
size_t scrlng;
int new_prot;
int start_even[20], start_odd[20], count_even[20], count_odd[20];
MPI_Aint typelng;
MPI_Status status;
size_t scrlng;
int new_prot;
if (mpi_datatype==MPI_SHORT ) datatype=MPIM_SHORT;
else if(mpi_datatype==MPI_INT ) datatype=MPIM_INT;
else if(mpi_datatype==MPI_LONG ) datatype=MPIM_LONG;
else if(mpi_datatype==MPI_UNSIGNED_SHORT) datatype=MPIM_UNSIGNED_SHORT;
else if(mpi_datatype==MPI_UNSIGNED ) datatype=MPIM_UNSIGNED;
else if(mpi_datatype==MPI_UNSIGNED_LONG ) datatype=MPIM_UNSIGNED_LONG;
if (mpi_datatype==MPI_SHORT ) datatype=MPIM_SHORT;
else if(mpi_datatype==MPI_INT ) datatype=MPIM_INT;
else if(mpi_datatype==MPI_LONG ) datatype=MPIM_LONG;
else if(mpi_datatype==MPI_UNSIGNED_SHORT) datatype=MPIM_UNSIGNED_SHORT;
else if(mpi_datatype==MPI_UNSIGNED ) datatype=MPIM_UNSIGNED;
else if(mpi_datatype==MPI_UNSIGNED_LONG ) datatype=MPIM_UNSIGNED_LONG;
else if(mpi_datatype==MPI_FLOAT ) datatype=MPIM_FLOAT;
else if(mpi_datatype==MPI_DOUBLE ) datatype=MPIM_DOUBLE;
else if(mpi_datatype==MPI_BYTE ) datatype=MPIM_BYTE;
else if(mpi_datatype==MPI_FLOAT ) datatype=MPIM_FLOAT;
else if(mpi_datatype==MPI_DOUBLE ) datatype=MPIM_DOUBLE;
else if(mpi_datatype==MPI_BYTE ) datatype=MPIM_BYTE;
if (mpi_op==MPI_MAX ) op=MPIM_MAX;
else if(mpi_op==MPI_MIN ) op=MPIM_MIN;
else if(mpi_op==MPI_SUM ) op=MPIM_SUM;
if (mpi_op==MPI_MAX ) op=MPIM_MAX;
else if(mpi_op==MPI_MIN ) op=MPIM_MIN;
else if(mpi_op==MPI_SUM ) op=MPIM_SUM;
new_prot = 0;
MPI_Comm_size(comm, &size);
if (size > 1) /*otherwise no balancing_protocol*/
new_prot = 0;
MPI_Comm_size(comm, &size);
if (size > 1) /*otherwise no balancing_protocol*/
new_prot = count >= Lsh[is_all][ss]; break;
case MPIM_INT: case MPIM_UNSIGNED:
new_prot = count >= Lin[is_all][ss]; break;
new_prot = count >= Lsh[is_all][ss]; break;
case MPIM_INT: case MPIM_UNSIGNED:
new_prot = count >= Lin[is_all][ss]; break;