ArrayFile G不起作用

时间:2017-06-27 20:16:44

标签: arrayfire

我尝试运行gfor循环,但这只运行一次......

有人可以帮助我吗?

gfor(seq j, gammaStep-1){
    vector<predicao> vals;
    countLoop = (int) sqc(j).scalar<float>();
    double localGamma = (countLoop+1)*incGamma;
    vector<rbf> rbfs = mountRbf(X1, Y1, localGamma);
    for (int i = 0; i < XT.size(); i++){
        double p = prediction(XT[i], rbfs, localGamma);
        predicao p1;
        p1.val = p;
        p1.err = abs(XT[i] - p);
        vals.push_back(p1);
    }
    double sumErr = 0;
    for (int i = 0; i < vals.size(); i++){
        sumErr += vals[i].err;
    }
    double media = sumErr / vals.size();
    double vary = 0;
    for (int i = 0; i < vals.size(); i++){
        vary += pow(vals[i].err - media, 2);
    }
    double dev = sqrt(vary);
    eM[countLoop] = media;
    eD[countLoop] = dev;
}

在处理结束时,只计算了eM和eD的第一个位置......

1 个答案:

答案 0 :(得分:0)

有几点可能对此有所帮助:

  1. 不要将 j 索引转换为标量。

  2. 删除就地累加器,如

    sumErr + = vals [i] .err;

  3. gfor 循环中尽可能使用af :: array类型

  4. 但主要关注的是对

    的呼吁
     prediction(XT[i], rbfs, localGamma)
    

    这需要完全矢量化,以便它可以在并行循环中运行 gfor 无法自动平行任意功能。

    另一方面,如果你只是想要并行化其他逻辑 - 计算RMS错误,你可以将调用的调用拉出循环,将结果加载到af :: arrays中,并将代码并行化计算每个错误,最后得到并行循环的外部