我尝试运行一个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的第一个位置...
在这里有几个点可能会有所帮助:
-
不要将 j 索引转换为标量。
-
删除诸如
的就地蓄能器sumerr = vals [i] .err;
-
在 gfor loop
中,仅使用AF ::阵列类型
,但主要问题是
的呼吁 prediction(XT[i], rbfs, localGamma)
需要完全矢量化,以便它可以在平行循环中运行。
gfor 无法自动化一个任意功能。
另一方面,如果您只想划分另一个逻辑 - RMS错误的计算,则可以将调用的调用从循环中拉出,将结果加载到AF ::计算每个错误,最后将并行循环的外部总和进行。