Проект Templet

акторный фреймворк для запуска задач
на множестве ядер, кластерах и в облаках
templet.ssau.ru

Инструменты пользователя

Инструменты сайта


templet:пример:hello_mpi_world
  /*
   "Hello World" MPI Test Program
  */
  #include <mpi.h>
  #include <stdio.h>
  #include <string.h>
  
  #define BUFSIZE 128
  #define TAG 0
  
  int main(int argc, char *argv[])
  {
    char idstr[32];
    char buff[BUFSIZE];
    int numprocs;
    int myid;
    int i;
    MPI_Status stat;
    /* MPI programs start with MPI_Init; all 'N' processes exist thereafter */
    MPI_Init(&argc,&argv);
    /* find out how big the SPMD world is */
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    /* and this processes' rank is */
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
  
    /* At this point, all programs are running equivalently, the rank
       distinguishes the roles of the programs in the SPMD model, with
       rank 0 often used specially... */
    if(myid == 0)
    {
      printf("%d: We have %d processors\n", myid, numprocs);
      for(i=1;i<numprocs;i++)
      {
        sprintf(buff, "Hello %d! ", i);
        MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD);
      }
      for(i=1;i<numprocs;i++)
      {
        MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, &stat);
        printf("%d: %s\n", myid, buff);
      }
    }
    else
    {
      /* receive from rank 0: */
      MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &stat);
      sprintf(idstr, "Processor %d ", myid);
      strncat(buff, idstr, BUFSIZE-1);
      strncat(buff, "reporting for duty\n", BUFSIZE-1);
      /* send to rank 0: */
      MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD);
    }
  
    /* MPI programs end with MPI Finalize; this is a weak synchronization point */
    MPI_Finalize();
    return 0;
  }
templet/пример/hello_mpi_world.txt · Последнее изменение: 2013/10/25 19:14 — nazarov