I just started with OpenMP using C ++. My serial code in C ++ looks something like this:
#include <iostream> #include <string> #include <sstream> #include <vector> #include <fstream> #include <stdlib.h> int main(int argc, char* argv[]) { string line; std::ifstream inputfile(argv[1]); if(inputfile.is_open()) { while(getline(inputfile, line)) { // Line gets processed and written into an output file } } }
Since each line is processed almost independently, I tried to use OpenMP to parallelize this, because the input file is in gigabyte order. Therefore, I assume that I first need to get the number of lines in the input file, and then parallelize the code this way. Can someone please help me here?
#include <iostream> #include <string> #include <sstream> #include <vector> #include <fstream> #include <stdlib.h> #ifdef _OPENMP #include <omp.h> #endif int main(int argc, char* argv[]) { string line; std::ifstream inputfile(argv[1]); if(inputfile.is_open()) { //Calculate number of lines in file? //Set an output filename and open an ofstream #pragma omp parallel num_threads(8) { #pragma omp for schedule(dynamic, 1000) for(int i = 0; i < lines_in_file; i++) { //What do I do here? I cannot just read any line because it requires random access } } } }
EDIT:
Important things
- Each line is processed independently.
- The order of the results does not matter.
c ++ parallel-processing openmp
Legend
source share