Каждый поток получает начальный и конечный индекс и работает с этой частью таблицы. строка.
При использовании 1 потока время выполнения составляет 6,5 секунд. После этого время выполнения увеличивается почти линейно, если я использую, например, 2 или 4 потока. В моей системе 8 ядер.
Я также подключаю свою рабочую функцию. Атрибут «lines» — это атрибут класса, который представляет собой вектор строки, где каждая строка является строкой CSV.
Код: Выделить всё
void read_csv_worker(pairt){
auto [start,end] = t;
vector
>vec(num_cols - 1); // timestamp also a column but stored explicitly
string timestamp, curr;
int curr_index;
int curr_col;
stringstream line_stream;
for(int i=start;iinsert(vec, timestamp, i);
}
}
Код: Выделить всё
int curr_pos = 0;
int chunk_size = num_lines/num_threads;
for(int i=0;i
Подробнее здесь: [url]https://stackoverflow.com/questions/79314848/multithreading-causing-linear-increase-in-runtime-c[/url]
Мобильная версия