«Найдено более одного базового блока без предшественников».с моим кодом alea / c #, и я понятия не имею, почему? - PullRequest
0 голосов
/ 25 ноября 2018

Итак, я пытаюсь реализовать код с Alea / C #.На данный момент это основной код.Я попробовал учебники и примеры, доступные на сайте Alea.Примеры работают просто отлично, но когда я делаю свою собственную версию кодов, а именно, использую случайную прогулку с динамически определенным количеством шагов для каждой прогулки, это, похоже, не работает.

Я настраиваю двойной массив следующим образом и инициализирую его 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, но я целый день работаю над решением этой проблемы, и меня все больше смущает, когда я пробую разные методы, такие как запуск ядер и действий и использование общей памяти, но ни один из них не работает.

...