Графический процессор Alea for loop не может получить поле

Я только начинаю с 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();
        });
     }

person skevthedev    schedule 09.12.2017    source источник


Ответы (1)


Вы пытаетесь вызвать System.Random.Next. Это код библиотеки .NET, и его нельзя скомпилировать в GPU. За этой функцией нет MSIL, к которому можно было бы получить доступ и скомпилировать для работы на графическом процессоре. Также System.Random.Next — это генератор случайных чисел, реализованный для последовательных приложений. Вам следует использовать параллельные генераторы случайных чисел, предусмотренные в cuRand, которые также доступны в графическом процессоре Alea.

person Daniel    schedule 09.12.2017
comment
Спасибо за ответ @Daniel. Я понял, что это проблема, что меня смущает, так это правильная реализация/интерфейс, чтобы заставить работать неподдерживаемые типы графических процессоров? это даже возможно. вы заявляете, что cuRand может быть скомпилирован графическим процессором, и это здорово, но есть ли способ для графического процессора правильно скомпилировать мой пользовательский тип Pt. также есть список поддерживаемых типов для графического процессора и где я могу его найти. Я очень ценю руководство - person skevthedev; 09.12.2017
comment
На примеров. " rel="nofollow noreferrer">Alea GPU веб-страница. В частности, работайте с этим примером. Это сложнее, чем то, что вам нужно, но должно дать вам достаточно понимания того, как вы должны думать, если программируете графические процессоры. - person Daniel; 05.01.2018
comment
Привет @skevthedev, ты когда-нибудь находил подходящий способ сделать это? Я сталкиваюсь с точно такими же проблемами на своей стороне, и там не так много примеров того, как использовать alea. - person woofwoof; 27.11.2018