Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void zad7() {
- FILE* input_file; FILE* output_file;
- tbb::tick_count end, start;
- input_file = fopen("text.txt", "r");
- output_file = fopen("wynik.txt", "w");
- auto write = [&output_file](string line)
- {
- fprintf(output_file, "%s\n", line.c_str());
- };
- auto read_tbb = [&input_file](tbb::flow_control& fc) {
- char line[256];
- char* result;
- result = fgets(line, 256, input_file);
- if (result == NULL) {
- fc.stop();
- return std::string("");
- }
- return string(result);
- };
- auto read = [&input_file]() {
- char line[256];
- char* result;
- result = fgets(line, 256, input_file);
- if (result == NULL)
- return std::string("");
- return string(result);
- };
- auto revers = [](string line)
- {
- string tmp;
- tmp.resize(line.size());
- string::reverse_iterator reverse_iterator = line.rbegin();
- int counter = 0;
- for (; reverse_iterator != line.rend(); ++reverse_iterator)
- {
- tmp[counter] = *reverse_iterator;
- counter++;
- }
- return tmp;
- };
- start = tbb::tick_count::now();
- tbb::parallel_pipeline(
- 16,
- tbb::make_filter<void, std::string>(
- tbb::filter::serial_in_order, read_tbb)
- &
- tbb::make_filter<std::string, std::string>(
- tbb::filter::parallel, revers)
- &
- tbb::make_filter<std::string, void>(
- tbb::filter::serial_in_order, write));
- end = tbb::tick_count::now();
- printf("Rownolegle %g seconds\n", (end - start).seconds());
- input_file = fopen("text.txt", "r");
- output_file = fopen("wynik_s.txt", "w");
- start = tbb::tick_count::now();
- while (true)
- {
- const std::string tmp = read();
- if (tmp == "")
- break;
- string reversed = revers(tmp);
- write(reversed);
- }
- end = tbb::tick_count::now();
- printf("Sekwencyjnie %g seconds\n", (end - start).seconds());
- }
Advertisement
Add Comment
Please, Sign In to add comment