sowamaciej

Untitled

Jan 15th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1.  
  2. void zad7() {
  3.  
  4. FILE* input_file; FILE* output_file;
  5.  
  6. tbb::tick_count end, start;
  7.  
  8. input_file = fopen("text.txt", "r");
  9. output_file = fopen("wynik.txt", "w");
  10.  
  11. auto write = [&output_file](string line)
  12. {
  13. fprintf(output_file, "%s\n", line.c_str());
  14. };
  15.  
  16. auto read_tbb = [&input_file](tbb::flow_control& fc) {
  17. char line[256];
  18. char* result;
  19. result = fgets(line, 256, input_file);
  20. if (result == NULL) {
  21. fc.stop();
  22. return std::string("");
  23. }
  24. return string(result);
  25. };
  26.  
  27. auto read = [&input_file]() {
  28. char line[256];
  29. char* result;
  30. result = fgets(line, 256, input_file);
  31. if (result == NULL)
  32. return std::string("");
  33. return string(result);
  34. };
  35.  
  36. auto revers = [](string line)
  37. {
  38. string tmp;
  39. tmp.resize(line.size());
  40. string::reverse_iterator reverse_iterator = line.rbegin();
  41. int counter = 0;
  42. for (; reverse_iterator != line.rend(); ++reverse_iterator)
  43. {
  44. tmp[counter] = *reverse_iterator;
  45. counter++;
  46. }
  47.  
  48. return tmp;
  49. };
  50.  
  51. start = tbb::tick_count::now();
  52.  
  53. tbb::parallel_pipeline(
  54. 16,
  55. tbb::make_filter<void, std::string>(
  56. tbb::filter::serial_in_order, read_tbb)
  57. &
  58. tbb::make_filter<std::string, std::string>(
  59. tbb::filter::parallel, revers)
  60. &
  61. tbb::make_filter<std::string, void>(
  62. tbb::filter::serial_in_order, write));
  63.  
  64. end = tbb::tick_count::now();
  65. printf("Rownolegle %g seconds\n", (end - start).seconds());
  66.  
  67. input_file = fopen("text.txt", "r");
  68. output_file = fopen("wynik_s.txt", "w");
  69.  
  70. start = tbb::tick_count::now();
  71. while (true)
  72. {
  73. const std::string tmp = read();
  74. if (tmp == "")
  75. break;
  76. string reversed = revers(tmp);
  77. write(reversed);
  78. }
  79. end = tbb::tick_count::now();
  80.  
  81. printf("Sekwencyjnie %g seconds\n", (end - start).seconds());
  82. }
Advertisement
Add Comment
Please, Sign In to add comment