Advertisement
filip710

rrs_lv3

Sep 10th, 2020
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. 1. Proces 2 treba poslati posljednji element polja decimalnih brojeva naziva abc od 5 elemenata svim ostalim
  2.  
  3. procesima unutar komunikatora COMM_WORLD. Procesi koji dobiju navedeni element polja trebaju taj
  4.  
  5. element pohraniti na istu memorijsku lokaciju kao i na procesu 2. Koji je ispravan način da se to učini?
  6.  
  7. Obrazložite (i ispravne i neispravne).
  8.  
  9.  
  10.  
  11. - MPI::COMM_WORLD.Broadcast(&abc[4], 5, MPI::FLOAT, 1)
  12.  
  13. Neispravan način zbog neispravnog naziva funkcije, pogrešnog broja količine podataka.
  14.  
  15. - MPI::COMM_WORLD.Bcast(abc+4, 1, MPI::FLOAT, 1)
  16.  
  17. Neispravan način zbog pogrešne oznake procesa.
  18.  
  19. - MPI::COMM_WORLD.Broadcast (&abc[4], 1, MPI::FLOAT, 2)
  20.  
  21. Neispravan način zbog neispravnog naziva funkcije i pogrešne oznake procesa.
  22.  
  23. - MPI::COMM_WORLD.Bcast(abc+5, 1, MPI::FLOAT, 2)
  24.  
  25. Neispravan način zbog slanja elementa koji je izvan granica polja i pogrešne oznake procesa.
  26.  
  27. - MPI::COMM_WORLD.Bcast(&abc+4, 1, MPI::FLOAT, 2)
  28.  
  29. Ispravan način.
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37. 2.
  38.  
  39. #include <iostream>
  40. #include <mpi.h>
  41. using namespace std;
  42. int main(int argc, char* argv[])
  43. {
  44. int vectorSize;
  45. float prosjek = 0;
  46. int *vector;
  47. int velicina_spremnika;
  48. int *vector_spremnik;
  49. float decNumber;
  50. MPI::Init(argc, argv);
  51. int rang = MPI::COMM_WORLD.Get_rank();
  52. int velicina = MPI::COMM_WORLD.Get_size();
  53. int maticni_proces = 0;
  54.  
  55. if(rang == maticni_proces) {
  56. cout << "Velicina vektora: ";
  57. cin >> vectorSize;
  58. velicina_spremnika = vectorSize/velicina;
  59. vector = new int[vectorSize];
  60. vector_spremnik = new int[velicina_spremnika];
  61.  
  62. for(int i = 0; i < vectorSize; i++) {
  63. cin >> vector[i];
  64. }
  65.  
  66. cout << "Decimalni broj: ";
  67. cin >> decNumber;
  68. }
  69. MPI::COMM_WORLD.Barrier();
  70. MPI::COMM_WORLD.Bcast(&decNumber, 1, MPI::FLOAT, maticni_proces);
  71. MPI::COMM_WORLD.Bcast(&velicina_spremnika, 1, MPI::INT, maticni_proces);
  72. MPI::COMM_WORLD.Scatter(vector, velicina_spremnika, MPI::INT, vector_spremnik, velicina_spremnika, MPI::INT, maticni_proces);
  73.  
  74. for(int i = 0; i < velicina_spremnika; i++) {
  75. vector_spremnik[i] *= decNumber;
  76. }
  77. MPI::COMM_WORLD.Barrier();
  78. MPI::COMM_WORLD.Gather(vector_spremnik, velicina_spremnika, MPI::INT, vector, velicina_spremnika, MPI::INT, maticni_proces);
  79. // MPI::COMM_WORLD.Reduce(&vector[rang], &prosjek, 1, MPI::INT, MPI::SUM, maticni_proces);
  80. if(rang == 0){
  81. cout << "Vektor:"<<endl;
  82. for(int i = 0; i < vectorSize; i++) {
  83. cout << vector[i] << endl;
  84. prosjek += vector[i];
  85. }
  86. cout << "Prosjek: "<< prosjek/vectorSize << endl;
  87. }
  88.  
  89. //MPI::COMM_WORLD.Barrier();
  90. /*
  91. if(rang == 0) {
  92. cout << "Velicina vektora: ";
  93. cin >> vectorSize;
  94.  
  95. vector = new int[vectorSize];
  96.  
  97. for(int i = 0; i < vectorSize; i++) {
  98. cin >> vector[i];
  99. }
  100.  
  101. cout << "Decimalni broj: ";
  102. cin >> decNumber;
  103. }
  104. */
  105.  
  106. MPI::Finalize();
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement