我刚刚开始使用ALEA,我很好奇如何在给定的gpu parallel.for中访问其他类型和引用。当我执行以下操作时,我得到一个运行时错误,指出“无法获取字段随机。可能的原因:1)不支持静态字段.2)不支持字段类型.3)在闭包类中,字段没有[GpuParam]属性。“
这个错误很有意义,但我不确定正确的实现是什么
[GpuManaged]
public void InitPoints()
{
var gp = Gpu.Default;
gp.For(1, (10), (i) =>
{
int pointStart = random.Next(totalPoints) + 1;
Pt point = new Pt(pointStart, ptAt[i]);
point.Process();
});
}
答案 0 :(得分:1)
您尝试调用System.Random.Next。这是.NET库代码,无法编译为GPU。该功能背后没有可以访问和编译以在GPU上运行的MSIL。 System.Random.Next也是为串行应用程序实现的随机数生成器。您应该使用cuRand中提供的并行随机数生成器,这些生成器也在Alea GPU中公开。