fork download
  1. // PruebaOMP.cpp : Este archivo contiene la función "main".
  2. // Código para correr en paralelo una tarea de sumar arreglos
  3.  
  4.  
  5. #include <iostream>
  6. #include <chrono> //
  7.  
  8. #define mostrar 10 // Número de elementos a imprimir del arreglo
  9.  
  10. // Función para imprimir los primeros "mostrar" elementos de un arreglo
  11. void imprimeArreglo(float *d);
  12.  
  13. int main()
  14. {
  15. std::cout << "Variando N y chunk parala medición de tiempos\n";
  16.  
  17. // Valores de N (tamaño del arreglo) y chunk (bloques para procesamiento)
  18. int N_values[] = {1000, 5000, 10000};
  19. int chunk_values[] = {10, 50, 100, 500};
  20.  
  21. // Nombres de las columnas en la tabla de resultados
  22. std::cout << "N\tchunk\tTiempo Inicialización (s)\tTiempo Suma (s)\n";
  23.  
  24. // Ciclo para iterar sobre los diferentes valores de N
  25. for (int N : N_values) {
  26. // Iterar sobre los diferentes valores de chunk
  27. for (int chunk : chunk_values) {
  28. // Declarción e inicialización de los arreglos dinámicamente
  29. float *a = new float[N];
  30. float *b = new float[N];
  31. float *c = new float[N];
  32.  
  33. // ciclo para medir el tiempo de inicialización de los arreglos
  34. auto start = std::chrono::high_resolution_clock::now();
  35. for (int i = 0; i < N; i++) {
  36. a[i] = i * 10; // Inicializar arreglo a
  37. b[i] = (i + 3) * 3.7; // Inicializar arreglo b
  38. }
  39. auto end = std::chrono::high_resolution_clock::now();
  40. std::chrono::duration<double> elapsed_init = end - start;
  41.  
  42. // Ciclo para medir el tiempo para realizar la suma de los arreglos
  43. start = std::chrono::high_resolution_clock::now();
  44. for (int i = 0; i < N; i++) {
  45. c[i] = a[i] + b[i]; // Sumar los arreglos elemento por elemento
  46. }
  47. end = std::chrono::high_resolution_clock::now();
  48. std::chrono::duration<double> elapsed_sum = end - start;
  49.  
  50. // Imprimir resultados en formato de tabla
  51. std::cout << N << "\t" << chunk << "\t" << elapsed_init.count() << "\t\t" << elapsed_sum.count() << "\n";
  52.  
  53. // Liberar memoria dinámica
  54. delete[] a;
  55. delete[] b;
  56. delete[] c;
  57. }
  58. }
  59.  
  60. return 0;
  61. }
  62.  
  63. // Implementación de la función para imprimir un arreglo
  64. void imprimeArreglo(float *d) {
  65. for (int x = 0; x < mostrar; x++) {
  66. std::cout << d[x] << " - ";
  67. }
  68. std::cout << std::endl;
  69. }
  70.  
Success #stdin #stdout 0.01s 5276KB
stdin
Standard input is empty
stdout
Variando N y chunk parala medición de tiempos
N	chunk	Tiempo Inicialización (s)	Tiempo Suma (s)
1000	10	3.572e-06		1.417e-06
1000	50	3.308e-06		1.386e-06
1000	100	3.341e-06		1.35e-06
1000	500	2.679e-06		1.265e-06
5000	10	2.4162e-05		1.3889e-05
5000	50	1.6496e-05		6.556e-06
5000	100	1.6384e-05		6.65e-06
5000	500	1.6572e-05		6.647e-06
10000	10	3.9617e-05		3.3032e-05
10000	50	2.9101e-05		1.2373e-05
10000	100	2.7527e-05		1.2264e-05
10000	500	2.7972e-05		1.2242e-05