Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб-02.doc
Скачиваний:
3
Добавлен:
14.08.2019
Размер:
88.58 Кб
Скачать

Задание 3

В исходном тексте программы на языке C пропущены вызовы процедур стандартногоблокирующего двухточечного обмена. Предполагается, что при запуске четного числапроцессов, те из них, которые имеют четный ранг, отправляют сообщение следующимпо величине ранга процессам. Добавить эти вызовы, откомпилировать и запуститьпрограмму.

#include "mpi.h" #include <stdio.h> int main(int argc,char *argv[]) { int myrank, size, message; int TAG = 0; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &size); message = myrank; if((myrank % 2) == 0) {  if((myrank + 1) != size)  MPI_Send(...); } else {  if(myrank != 0)  MPI_Recv(...);  printf("received :%i\n", message); } MPI_Finalize(); return 0; }

Задание 4

Следующая программа на языке С написана некорректно. Найдите ошибку и исправьте ее.

#include<stdio.h> #include<mpi.h> int main(int argc, char **argv) {    int size, rank, a, b;   MPI_Status st;   int tag=1;   MPI_Init(&argc, &argv);   MPI_Comm_size(MPI_COMM_WORLD, &size);   MPI_Comm_rank(MPI_COMM_WORLD, &rank);   if(rank == 0){          MPI_Recv(&b,1,MPI_INT,1,tag,MPI_COMM_WORLD,&st);           a = 10*rank;         MPI_Send(&a,1,MPI_INT,1,tag,MPI_COMM_WORLD);         printf("b=%d \n",b);   }   else{         MPI_Recv(&b,1,MPI_INT,0,tag,MPI_COMM_WORLD,&st);         a=10*rank;         MPI_Send(&a,1,MPI_INT,0,tag,MPI_COMM_WORLD);         printf("b= %d \n",b);   }   MPI_Finalize();   return(0); }

Задание 5

В исходном тексте программы на языке C пропущены вызовы процедурбуферизованного обмена. Добавить эти вызовы, откомпилировать и запуститьпрограмму.

#include "mpi.h" #include <stdio.h> int main(int argc,char *argv[]) {  int *buffer;  int myrank;  MPI_Status status;  int buffsize = 1;  int TAG = 0;  MPI_Init(&argc, &argv);  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);  if (myrank == 0) {  buffer = (int *) malloc(buffsize + MPI_BSEND_OVERHEAD);  :  buffer = (int *) 10;  : } else {  MPI_Recv(&buffer, buffsize, MPI_INT, 0, TAG, MPI_COMM_WORLD, &status);  printf("received: %i\n", buffer); }  MPI_Finalize();  return 0; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]