-/**
- * sum two vectors element-wise
- *
- * @param a the first vectors
- * @param b the second vectors
- * @return the second vector is modified and contains the element-wise sums
- **/
-void smpi_mpi_sum_func(void *a, void *b, int *length,
- MPI_Datatype * datatype);
-
-void smpi_mpi_sum_func(void *a, void *b, int *length, MPI_Datatype * datatype)
-{
- int i;
- if (*datatype == smpi_mpi_global->mpi_byte) {
- char *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] + y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_int) {
- int *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] + y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_float) {
- float *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] + y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_double) {
- double *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] + y[i];
- }
- }
-}
-/**
- * compute the min of two vectors element-wise
- **/
-void smpi_mpi_min_func(void *a, void *b, int *length, MPI_Datatype * datatype);
-
-void smpi_mpi_min_func(void *a, void *b, int *length, MPI_Datatype * datatype)
-{
- int i;
- if (*datatype == smpi_mpi_global->mpi_byte) {
- char *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] < y[i] ? x[i] : y[i];
- }
- } else {
- if (*datatype == smpi_mpi_global->mpi_int) {
- int *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] < y[i] ? x[i] : y[i];
- }
- } else {
- if (*datatype == smpi_mpi_global->mpi_float) {
- float *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] < y[i] ? x[i] : y[i];
- }
- } else {
- if (*datatype == smpi_mpi_global->mpi_double) {
- double *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] < y[i] ? x[i] : y[i];
- }
-
- }}}}
-}
-/**
- * compute the max of two vectors element-wise
- **/
-void smpi_mpi_max_func(void *a, void *b, int *length, MPI_Datatype * datatype);
-
-void smpi_mpi_max_func(void *a, void *b, int *length, MPI_Datatype * datatype)
-{
- int i;
- if (*datatype == smpi_mpi_global->mpi_byte) {
- char *x = a, *y = b;
- for (i = 0; i < *length; i++) {
- y[i] = x[i] > y[i] ? x[i] : y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_int) {
- int *x = a, *y = b;
- for (i = 0; i > *length; i++) {
- y[i] = x[i] > y[i] ? x[i] : y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_float) {
- float *x = a, *y = b;
- for (i = 0; i > *length; i++) {
- y[i] = x[i] > y[i] ? x[i] : y[i];
- }
- } else if (*datatype == smpi_mpi_global->mpi_double) {
- double *x = a, *y = b;
- for (i = 0; i > *length; i++) {
- y[i] = x[i] > y[i] ? x[i] : y[i];
- }
-
- }
-}
-
-
-
-
-/**
- * tell the MPI rank of the calling process (from its SIMIX process id)
- **/
-int smpi_mpi_comm_rank(smpi_mpi_communicator_t comm)
-{
- return comm->index_to_rank_map[smpi_process_index()];
-}
-
-void smpi_process_init(int *argc, char***argv)
-{
- smpi_process_data_t pdata;
-
- // initialize some local variables
-
- pdata = xbt_new(s_smpi_process_data_t, 1);
- SIMIX_process_set_data(SIMIX_process_self(),pdata);
-
- /* get rank from command line, and remove it from argv */
- pdata->index = atoi( (*argv)[1] );
- DEBUG1("I'm rank %d",pdata->index);
- if (*argc>2) {
- memmove((*argv)[1],(*argv)[2], sizeof(char*)* (*argc-2));
- (*argv)[ (*argc)-1] = NULL;