c++ - 看似简单的循环的安全显式矢量化
问题描述
新手,希望能帮到你。我试图在下面的成员函数代码中显式地矢量化两个 for 循环,因为它们是主要的运行时瓶颈,并且由于依赖关系,自动矢量化不起作用。然而,对于我的一生,我找不到“安全”条款/减少。
PSvector& RTMap::Apply(PSvector& X) const
{
PSvector Y(0);
double k=0;
// linear map
#pragma omp simd
for(RMap::const_itor r = rterms.begin(); r != rterms.end(); r++)
{
Y[r->i] += r->val * X[r->j];
}
// non-linear map
#pragma omp simd
for(const_itor t = tterms.begin(); t != tterms.end(); t++)
{
Y[t->i] += t->val * X[t->j] * X[t->k];
}
Y.location() = X.location();
Y.type() = X.type();
Y.id() = X.id();
Y.sd() = X.sd();
return X = Y;
}
请注意,由于竞争条件,所写的#pragmas 不起作用。有没有一种可以工作的宣布减少的方法?我试过类似的东西:
#pragma omp declare reduction(+:PSvector:(*omp_out.getvec())+=(*omp_in.getvec()))
编译(icpc)但似乎产生废话。
/干杯
解决方案
推荐阅读
- python - 关于如何为 if 语句解释非布尔数据类型的文档
- docker - Kubernetes Pod - docker容器内的ssh超时
- r - grid.Call.graphics 中的错误(C_text,as.graphicsAnnot(x$label),x$x,x$y,:无效的字体类型
- python - 需要帮助输出
- flutter - Flutter ListView 对 StatefulWidget 项的状态匹配错误
- powershell - 从 web api 为多个请求调用 powershell 命令
- javascript - 使用 jQuery 对单选按钮状态的反应
- python - Python typehint 从类型元组作为参数的联合返回类型
- javascript - 即使可能的输出数量(arr.length)增加,如何将输入(int 0-99)映射到相同的输出(arr [n])
- r - Sankey NetworkD3:在整个流程中设置链接颜色