fork download
  1. #include <mpi.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. int main(int argc, char** argv) {
  11. MPI_Init(&argc, &argv);
  12.  
  13. int rank, size;
  14. MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  15. MPI_Comm_size(MPI_COMM_WORLD, &size);
  16.  
  17. const int N = 1000; // Tamaño total del vector
  18. const int local_N = N / size; // Tamaño del fragmento local
  19.  
  20. vector<double> global_data;
  21. vector<double> local_data(local_N);
  22.  
  23. // El proceso 0 inicializa el vector completo
  24. if (rank == 0) {
  25. global_data.resize(N);
  26. srand(time(NULL));
  27. for(int i = 0; i < N; i++) {
  28. global_data[i] = (double)rand() / RAND_MAX * 100.0; // Números entre 0 y 100
  29. }
  30. cout << "Vector inicial generado de tamaño " << N << endl;
  31. }
  32.  
  33. // Distribuir los datos entre todos los procesos
  34. MPI_Scatter(global_data.data(), local_N, MPI_DOUBLE,
  35. local_data.data(), local_N, MPI_DOUBLE,
  36. 0, MPI_COMM_WORLD);
  37.  
  38. // Cada proceso calcula sus estadísticas locales
  39. double local_max = *max_element(local_data.begin(), local_data.end());
  40. double local_min = *min_element(local_data.begin(), local_data.end());
  41. double local_sum = 0;
  42. for(double val : local_data) {
  43. local_sum += val;
  44. }
  45.  
  46. // Reducir para obtener las estadísticas globales
  47. double global_max, global_min, global_sum;
  48. MPI_Reduce(&local_max, &global_max, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
  49. MPI_Reduce(&local_min, &global_min, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD);
  50. MPI_Reduce(&local_sum, &global_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
  51.  
  52. // El proceso 0 imprime los resultados
  53. if (rank == 0) {
  54. double global_mean = global_sum / N;
  55. cout << "Estadísticas del vector:" << endl;
  56. cout << "Máximo: " << global_max << endl;
  57. cout << "Mínimo: " << global_min << endl;
  58. cout << "Media: " << global_mean << endl;
  59. }
  60.  
  61. MPI_Finalize();
  62. return 0;
  63. }
Success #stdin #stdout #stderr 0.23s 40616KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: unexpected symbol in "using namespace"
Execution halted