是否可以将我的循环转换为parallel_for-fnc调用

Is it possible to convert my loop into parallel_for fnc invocation?

本文关键字:parallel for-fnc 调用 转换 循环 我的 是否      更新时间:2023-10-16

我有一个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调用?

MSDN说有一个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]);
}