“'发现了多个没有前辈的基本街区。”与我的Alea / C#代码一起,我不知道为什么吗?

时间:2018-11-25 04:02:59

标签: aleagpu

所以我试图用Alea / C#实现一些代码。目前,它是基本代码。我尝试了Alea网站上的教程和示例。这些示例很好用,但是当我做自己的代码版本时,即使用随机游走,并为每个游走动态定义了数量的步幅,这似乎不起作用。

我按如下所示设置一个double数组并将其初始化为0:

 [GpuParam] public static double[] gaussian = {0};

然后我使用一个gpumanaged方法:

[GpuManaged]
    private static void Random()
    {
        using (var rng = Generator.CreateGpu(Gpu.Default,RngType.PSEUDO_XORWOW))
        {
            rng.SetPseudoRandomGeneratorSeed(42);

            rng.GenerateUniform(gaussian);
        }
    }

然后我将并行用于函数,在Alea网站上有很多示例。

    [GpuManaged]
    private static void Test()
    {
        var prices = new double[100];

        Gpu.Default.For(0, 100,
            i =>
            {
                Random();
                prices[i] = gaussian[0];
            });
    }

但是,当我运行它时,出现错误:

System.Exception: 'Found more than one basic block without predecessors.

源位置堆栈:

-> in C:\Users\tub08918\source\repos\GpuMCOptics\GpuMCOptics\Program.cs(45,21-45,30)
-> at GpuMCOptics.Program+<>c__DisplayClass6_0.[Void <Test>b__0(Int32)]
-> at Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> at defining runtime64 (sm52,64bit)
Loading method as kernel:
-> Method: Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> InstanceOpt: <None>
-> Argument.#0: 0
-> Argument.#1: 100
-> Argument.#2: System.Action`1[System.Int32]
Getting or loading method as kernel:
-> Method: Alea.Parallel.Device.DeviceFor.[Void Kernel(Int32, Int32, System.Action`1[System.Int32])]
-> InstanceOpt: <None>
-> Argument.#0: 0
-> Argument.#1: 100
-> Argument.#2: System.Action`1[System.Int32]

对此的任何帮助都会有所帮助。我对使用这些gpu架构非常感兴趣,但是我整天都在努力解决这个问题,当我尝试不同的方法(例如启动内核和操作以及使用共享内存)时,我变得越来越困惑,但是它们都不起作用。

0 个答案:

没有答案