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

时间:2011-06-30 08:12:49

标签: c++ visual-studio-2010

我有一个for循环,我想将其转换为parallel_for fnc调用。我的代码符合所有标准(在Parallel_Programming_with_Microsoft_Visual_C_plus_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(跳到另一对)。不幸的是,本书中的示例显示了如果i增加1,如何将for循环体转换为parallel_for fnc调用。
是否可以将我的循环转换为parallel_for fnc调用?

3 个答案:

答案 0 :(得分:1)

MSDN表示存在step参数。使用它。

答案 1 :(得分:0)

您的代码似乎与

相同
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]);
}

答案 2 :(得分:0)

是的,你可以。您需要先调整结果大小,然后再添加它。

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]);
});

这很快,当然,没有保证,但它应该可以直接替换。