1

想象一个带有 seq j 的 gfor...

如果我需要使用实例 j 的值作为索引,我可以这样做吗?

就像是:

vector<double> a(n);
gfor(seq j, n){
    //Do some calculation and save this on someValue
    a[j] = someValue;
}

有人可以(再次)帮助我吗?谢谢。

4

2 回答 2

1

我已经找到了解决方案...

如果有人有更好的选择,请随时发布...

首先,创建一个与 gfor 实例大小相同的 seq。然后,将该序列转换为数组。现在,在数组上取该行的值(它等于索引)

seq sequencia(0, 200);
af::array sqc = sequencia;

//Inside the gfor loop
countLoop = (int) sqc(j).scalar<float>();
于 2017-06-27T19:18:39.313 回答
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
于 2017-07-26T20:36:22.490 回答