【发布时间】:2019-08-29 04:40:04
【问题描述】:
我在一个代码库中工作,其中几个算法被实现了两次:一次在正确的位置使用#pragma omp parallel,一次没有。这些函数被命名为AlgorithmMT() 和AlgorithmST()。
简化示例:
/// Multi-threaded algorithm
std::vector<double>
AlgorithmMT(int n)
{
std::vector<double> result(n);
std::itoa(result.begin(), result.end(), 1.0);
#pragma omp parallel for
for (int i = 0; i < n; ++i) {
result[i] = i / result[i];
}
return result;
}
/// Single-threaded algorithm
std::vector<double>
AlgorithmST(int n)
{
std::vector<double> result(n);
std::itoa(result.begin(), result.end(), 1.0);
// NOTE: there is no #pragma here
for (int i = 0; i < n; ++i) {
result[i] = i / result[i];
}
return result;
}
假设我需要保留两个单独的函数(不能更改更高级别的代码),并且应该允许用户在运行时在它们之间进行选择,我怎样才能让这两个函数共享一个共同的实现?
我意识到该算法有点荒谬,并且可以在没有读取依赖于循环内的result 的情况下实现。请假设这是算法所需的结构。 :)
【问题讨论】:
标签: c++ multithreading openmp