A triangle counting assignment for A.U.TH Parallel and distributed systems class.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. * main.cpp
  3. *
  4. * Created on: Dec 4, 2020
  5. * Author: hoo2
  6. */
  7. #include <sstream>
  8. #include <fstream>
  9. #include <iostream>
  10. #include <algorithm>
  11. #define SIZE 20
  12. std::ifstream file;
  13. /*!
  14. * Calculates and return the median of an array of measurements
  15. * \param t Pointer to measurements
  16. * \param n Size of measurements array
  17. * \return The average
  18. */
  19. int median (int *t, int n) {
  20. std::sort (t, &t[n]);
  21. return (n % 2) ? t[n/2] : (t[n/2] + t[n/2 -1]) /2;
  22. }
  23. /*
  24. * A small post processing...
  25. */
  26. int main(int argc, char* argv[]) {
  27. file = std::ifstream(argv[1]);
  28. std::string line, token, exec, mtx, times, dt, units, dyn1, dyn2;
  29. std::string t1, t2, t3, t4;
  30. enum state_en {RUNNING, LOAD, DATA, SUM} state = RUNNING;
  31. int cnt =0, med =0;
  32. int delta_t[SIZE];
  33. while (std::getline (file, line, '\n')) {
  34. std::stringstream ss(line);
  35. switch (state) {
  36. case RUNNING:
  37. ss >> token;
  38. if (token == "running") {
  39. ss >> exec >> t1 >> mtx >> t2 >> times >> t3 >> t4 >> dyn1 >> dyn2;
  40. cnt =0;
  41. state = LOAD;
  42. }
  43. break;
  44. case LOAD: state = DATA; break;
  45. case DATA:
  46. ss >> t1 >> t2 >> t3 >> dt >> units;
  47. if (units == "[usec]") delta_t[cnt] = std::atoi(dt.c_str());
  48. else if (units == "[msec]") delta_t[cnt] = std::atoi(dt.c_str()) * 1000;
  49. else if (units == "[sec]") delta_t[cnt] = std::atoi(dt.c_str()) * 1000000;
  50. if (++cnt == std::atoi(times.c_str())) {
  51. med = median (delta_t, cnt);
  52. cnt =0;
  53. state = SUM;
  54. }
  55. break;
  56. case SUM:
  57. ss >> token;
  58. if (token == "running") {
  59. std::cout << exec << ',' << mtx << ',' << med << ", ," <<
  60. (((dyn1 == "--dynamic") || (dyn2 == "--dynamic")) ? "dyn\n" : " \n");
  61. dyn1 = "";
  62. dyn2 = "";
  63. ss >> exec >> t1 >> mtx >> t2 >> times >> t3 >> t4 >> dyn1 >> dyn2;
  64. cnt =0;
  65. state = LOAD;
  66. }
  67. else if (token == "[Timing]:") {
  68. ss >> t1 >> t2 >> dt >> units;
  69. if (units == "[usec]") med += std::atoi(dt.c_str());
  70. else if (units == "[msec]") med += std::atoi(dt.c_str()) * 1000;
  71. else if (units == "[sec]") med += std::atoi(dt.c_str()) * 1000000;
  72. state = RUNNING;
  73. std::cout << exec << ',' << mtx << ',' << med << ",sum," <<
  74. (((dyn1 == "--dynamic") || (dyn2 == "--dynamic")) ? "dyn\n" : " \n");
  75. dyn1 = "";
  76. dyn2 = "";
  77. }
  78. break;
  79. }
  80. }
  81. return 0;
  82. }