Bu Blogda Ara

7 Şubat 2010 Pazar

add two vectors using cyclic distribution of arrays. Program * to illustrate use of cyclic_io functions.

/* sum.c -- add two vectors using cyclic distribution of arrays. Program
* to illustrate use of cyclic_io functions.
*
* Input:
* n: order of vectors
* x, y: the vectors being added
*
* Output:
* z: the sum vector
*
* Notes: Compile with Makefile.sum
*
* See Chap 8, pp. 170 & ff in PPMPI
*/
#include
#include "mpi.h"

/* Header file for the basic I/O functions */
#include "cio.h"

/* Header file for the cyclic array I/O functions */
#include "cyclic_io.h"

main(int argc, char* argv[]) {
CYCLIC_ARRAY_STRUCT x;
CYCLIC_ARRAY_STRUCT y;
CYCLIC_ARRAY_STRUCT z;
int n;
MPI_Comm io_comm;
int i;

MPI_Init(&argc, &argv);

/* Build communicator for I/O */
MPI_Comm_dup(MPI_COMM_WORLD, &io_comm);
if (Cache_io_rank(MPI_COMM_WORLD, io_comm) ==
NO_IO_ATTR)
MPI_Abort(MPI_COMM_WORLD, -1);

/* Get n */
Cscanf(io_comm, "Enter the array order", "%d", &n);

/* Initialize scalar members. Calls */
/* function for building derived type */
Initialize_params(&io_comm, n, &x);
Initialize_params(&io_comm, n, &y);
Initialize_params(&io_comm, n, &z);

/* Get vector elements */
Read_entries("Enter elements of x", &x);
Read_entries("Enter elements of y", &y);

/* Add local entries */
for (i = 0; i < Local_size(&x); i++)
Local_entry(&z,i) =
Local_entry(&x,i) + Local_entry(&y,i);

/* Print z */
Print_entries("x + y =", &z);

MPI_Finalize();
}

Hiç yorum yok:

Yorum Gönder