0

我刚从 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();
        });
     }
4

1 回答 1

1

您尝试调用 System.Random.Next。这是 .NET 库代码,无法编译到 GPU。该函数背后没有可以访问和编译以在 GPU 上运行的 MSIL。System.Random.Next 也是为串行应用程序实现的随机数生成器。您应该使用 cuRand 中提供的并行随机数生成器,它们也在 Alea GPU 中公开。

于 2017-12-09T09:34:39.960 回答