想象一下带有seq j的gfor ...
如果我需要使用实例j的值作为索引,我可以做谁?
类似的东西:
vector<double> a(n);
gfor(seq j, n){
//Do some calculation and save this on someValue
a[j] = someValue;
}
有人可以(再次)帮助我吗? 感谢。
答案 0 :(得分:1)
我找到了解决方案...
如果有人有更好的选择,请随时发布...
首先,创建一个与gfor实例大小相同的seq。 然后,在数组中转换该seq。 现在,在数组上取该行的值(它等于索引)
seq sequencia(0, 200);
af::array sqc = sequencia;
//Inside the gfor loop
countLoop = (int) sqc(j).scalar<float>();
答案 1 :(得分:0)
您的方法有效,但打破 gfors 并行化,因为将索引转换为标量会强制将其从gpu写回主机,从而关闭GPU上的断点。
你想要更像这样:
af::array a(200);
gfor(seq j, 200){
//Do some calculation and save this on someValue
a[j] = af::array(someValue); // for someValue a primitive type, say float
}
// ... Now we're safe outside the parallel loop, let's grab the array results
float results[200];
a.host(results) // Copy array from GPU to host, populating a c-type array