gpt4 book ai didi

c++ - ppl,如何正确使用它?

转载 作者:行者123 更新时间:2023-11-30 03:03:35 25 4
gpt4 key购买 nike

以下代码:

#include <ppl.h>
int i;
vector<int> val(10),summ(10,0);
for(i=0;i<10;i++) val[i]=i;

parallel_for(0, 10, [&] (int y){
vector<int> vett(1000);
double vall=val[y];

for(i=0;i<vett.size();i++)
vett[i]=vall;

for(i=0;i<vett.size();i++)
summ[y]+=vett[i];
});

for(i=0;i<10;i++)
cout<<summ[i]<<endl;

产生随机输出,如:0100014682043600255898700074561395

我想我应该使用“combinable”,但我找到的关于它的文档不是很好。你知道如何使这段代码正常工作吗?如果 vett 是一个二维 vector 呢?

既然我想学习并行计算,是否值得学习这个新的微软库或者有更好的选择?

最佳答案

您的代码的主要问题是 i 下标变量。它被多个并行任务同时使用。随之而来的是困惑,这是不稳定结果的原因。最简单的解决方法是像这样在 lambda 中声明循环:

for(int i=0;i<vett.size();i++)
vett[i]=vall;

for(int i=0;i<vett.size();i++)
summ[y]+=vett[i];

请注意,每个循环索引都在 for 循环初始化中声明。这是更惯用的用法,可以在所有循环中使用,除非在循环结束后您确实需要 i 的最终值。

关于c++ - ppl,如何正确使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com