Advertisement
bkit4s0

[LAB 5]

Mar 11th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.99 KB | None | 0 0
  1. #include <mpi.h>
  2. #include <stdio.h>
  3. #define N 1000
  4. int master(int procs){
  5.         long matrixA[N][N], vectorC[N];
  6.         long i,j,dotp, sender, row, numsent=0;
  7.         MPI_Status status;
  8.         /* Initialize data */
  9.         for(i=0; i < N; i++)
  10.                 for(j=0; j < N; j++)
  11.                         matrixA[i][j] = 1;
  12.         /*distribute data to slave */
  13.         for(i=1; i < minFunc(procs, N); i++)
  14.         {
  15.         MPI_Send(&matrixA[i-1][0], N, MPI_LONG, i, i, MPI_COMM_WORLD );
  16.         numsent++;
  17.         }
  18.         /* receive result and distribute data */
  19.         for(i=0; i < N; i++)
  20.         {
  21.         MPI_Recv(&dotp, 1, MPI_LONG, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
  22.         /* SV xac dinh process gui ket qua ve va gui tiep du lieu cho no ??? */
  23.         sender = status.MPI_SOURCE;
  24.         row = status.MPI_TAG - 1;
  25.         vectorC[row] = dotp;
  26.         if(numsent < N) {
  27.                 MPI_Send(&matrixA[numsent][0], N, MPI_LONG, sender, numsent+1, MPI_COMM_WORLD);
  28.                 numsent++;
  29.         }
  30.         else {
  31.                 /* SV gui thong diep thong bao ket thuc cong viec */
  32.                 MPI_Send(MPI_BOTTOM, 0, MPI_LONG, sender, 0, MPI_COMM_WORLD);
  33.         }
  34.         }
  35.         /* In ket qua de xac dinh tinh dung dan cua chuong trinh */
  36.         for(i = 0; i < 10; i++)
  37.                 fprintf(stdout,"%ld ",vectorC[i]);
  38.                 return 0;
  39.         }
  40. /* SV tìm hiểu mã nguồn chương trình và hoàn tất hàm slave */
  41. int slave(){
  42. /* Cong viec cua slave */
  43. //Nhận dữ liệu từ master
  44. //Nhân vector dữ liệu vừa nhận với vector của nó
  45. //Gửi kết quả trả về
  46. //Đợi nhận thêm dữ liệu
  47. //Nếu không còn dữ liệu thì kết thúc
  48. /* Kết thúc */
  49. return 0;
  50. }
  51. int main(int argc, char *argv[]) {
  52. int rank,size;
  53. MPI_Init(&argc,&argv);
  54. MPI_Comm_rank(MPI_COMM_WORLD,&rank);
  55. MPI_Comm_size(MPI_COMM_WORLD,&size);
  56. if(rank==0)
  57. master(4);
  58. else
  59. slave();
  60. MPI_Finalize();
  61. return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement