是否可以将我的循环转换为parallel_for-fnc调用
Is it possible to convert my loop into parallel_for fnc invocation?
我有一个for循环,我想将其转换为parallel_for-fnc调用。我的代码符合成功转换的所有标准(在Parallel_Programming_with_Microsoft_Visual_C_plus,第7页中描述),但我发现很难实现。这是我的例子:
//"Oridinary" for
//numbers_from_file_ is a vector<Big_Int> loaded with Big_Int
//results_ is a vector<Big_Int>
for (unsigned i = 0; i < numbers_from_file_.size(); i += 2)//+2 to skip to another pair
{
results_.push_back( numbers_from_file_[i] * numbers_from_file_[i + 1]);
}
场景是将numbers_from_file_中的每一对数字相乘并存储在results_中。为了使其工作,变量i必须增加2(跳到另一对)。不幸的是,本书中的例子展示了如何将for循环的主体转换为parallel_for-fnc调用,仅当i递增1时
是否可以将我的循环转换为parallel_for-fnc调用?
step
参数。使用它。
可以。您需要先调整结果大小,然后再添加到其中。
results_.resize(numbers_from_file.size() / 2);
parallel_for(static_cast<std::size_t>(0), numbers_from_file_.size(), static_cast<std::size_t>(2), [&](std::size_t i) {
results_[i / 2] = numbers_from_file_[i] * numbers_from_file_[i + 1]);
});
这只是很快,当然,没有保证,但它应该是非常直接的可替换。
您的代码似乎与相同
for (unsigned j = 0; j < numbers_from_file_.size()/2; ++j)
{
results_.push_back( numbers_from_file_[2*j] * numbers_from_file_[2*j + 1]);
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- 函数中的"pragma omp parallel for"在另一个并行循环中调用函数时无效
- C++ + OpenMP for Parallel Computing:如何在Visual Studio中进行设置
- Parallel for with omp
- OpenMP:'parallel for loop'瓶颈
- 简单将 OpenMp Parallel for 转换为 C# Parallel for
- Parallel of std::reference_wrapper for std::shared_ptrs
- OpenMP 'parallel for'预先初始化
- omp parallel for:如何让线程写入私有数组,并在所有线程完成处理后合并所有数组
- OpenMP "master"杂注不得被"parallel for"杂注包围
- C++ Break omp parallel for
- OpenMP "parallel for"在特定程序中很奇怪
- 用OpenMP(Parallel for)并行化时分割错误