我想使用openmp来加速下面的代码。
代码只是解释操作,而不是真实的。
Iterator iterator(records);
while(iterator.next())
{
int current_id = iterator.current_row_index();
bool result = index.find(records[current_id])
if (result == false)
if (index.insert(records[current_id]) == false)
break;
}
return iterator.current_row_index();
索引由所有线程共享。
以下是我的一些想法:
但我真的怀疑加速,因为几乎所有的操作都很关键。
是否有一些建议使用openmp加速代码?
谢谢!
答案 0 :(得分:4)
回答问题的标题并假设没有其他问题(在下面讨论),一个突破前向迭代器的一般while循环可以这样翻译:
Iterator iterator(records);
#pragma omp parallel
{
#pragma omp single nowait
{
while(iterator.next())
{
int current_id = iterator.current_row_index();
#pragma omp task firstprivate(current_id)
{
if ( should_stop(current_id)) ) {
// below requires OpenMP 4.0
#pragma omp cancel parallel
}
}
}
}
}
但是,你的问题中存在更复杂的问题,这些问题实际上应该得到单独的问题。