【发布时间】:2015-01-09 22:56:29
【问题描述】:
我目前正在开发一个系统,在该系统中我读取超过约 2 亿条记录(行)的文件,因此我正在缓冲记录并使用 OpenMP 任务来管理每个批次,同时继续处理输入。缓冲区中的每条记录在work_on_data 中处理大约需要60μ,并且会生成一个字符串结果。为了避免关键区域,我为结果创建了一个向量,并通过地址将记录占位符(我插入到这个向量中)传递给 work_on_data 函数:
int i = 0;
string buffer[MAX_SIZE];
vector<string> task_results;
#pragma omp parallel shared(map_a, task_results), num_threads(X)
#pragma omp single
{
while (getline(fin, line) && !fin.eof())
{
buffer[i] = line;
if (++i == MAX_SIZE)
{
string result = "";
task_results.push_back(result);
#pragma omp task firstprivate(buffer)
work_on_data(buffer, map_a, result);
i = 0;
}
}
}
// eventually merge records in task_results
work_on_data 的末尾,传入的每个result 都不会是空字符串(如已初始化)。 但是,当合并结果时,每个结果仍然是一个空字符串。我可能在范围/寻址方面做了一些愚蠢的事情,但我不明白问题出在哪里。有什么想法吗?
提前致谢。
【问题讨论】:
标签: c++ reference io parallel-processing openmp