Возникло исключение: «System.Exception» в Alea.dll «i32 не является типом структуры

Я пытаюсь использовать Gpu.Default.For из библиотеки Alea GPU, но постоянно получаю исключение:

i32 is not a struct type error.

Что означает эта ошибка и почему я получаю ее с помощью этого простого цикла Gpu.Default.For?

for (Int32 j = 0; j <= TimePeriodArray.Length - 1; j++)
//Gpu.Default.For(0, TimePeriodArray.Length - 1, j =>
{
    Int32 days = TimePeriodArray[j];
    Double[] CalcResult = new Double[CloseArray.Length];

    for (Int32 Index = days; Index <= CloseArray.Length - 1; Index++)
    {
        Gpu.Default.For(Index - 1, Index - days, i =>
        {
            CalcResult[Index] = CalcResult[Index] + CloseArray[i];
        });

        CalcResult[Index] = CalcResult[Index] / days;
    }

    CalcResultsList.Add(CalcResult);
//});
}

person user2808755    schedule 02.06.2017    source источник
comment
Это это метод, о котором вы спрашиваете?   -  person Knowledge Cube    schedule 02.06.2017
comment
Да, ошибка возникает, когда код пытается выполнить цикл Gpu.Default.For Gpu.Default.For(Index - 1, Index - days, i => { CalcResult[Index] = CalcResult[Index] + CloseArray[i] ; });   -  person user2808755    schedule 02.06.2017
comment
Пожалуйста, отредактируйте свой вопрос, чтобы он соответствовал теме: включите минимально воспроизводимый пример, который дублирует проблему. Вопросы по отладке (почему этот код работает не так, как я хочу?) должны включать: (1) желаемое поведение, (2) конкретную проблему или ошибку и (3) кратчайший код, необходимый для ее воспроизведения в самом вопросе. См. также: О каких темах я могу здесь спросить? и Как спросить. Наряду с достаточным количеством кода для дублирования проблемы это, в частности, означает предоставление точного текста ошибки, возникающего при запуске кода (как текст в code format).   -  person Makyen♦    schedule 05.06.2017
comment
Не могли бы вы пошутить и установить инклюзивное значение 1 (первый параметр) метода расширения For, а исключительное значение — 10 (второй параметр) и рассказать мне, что произойдет.   -  person WBuck    schedule 05.06.2017


Ответы (1)


Две вещи: во-первых, вы создаете новый массив внутри кода графического процессора, который не поддерживается. Во-вторых, я предполагаю, что CalcResultsList относится к типу List, который также не поддерживается. Причина в том, что неэффективно выделять новую память в коде GPU. Код GPU будет выполняться с большим количеством потоков, размещение внутри кода GPU не рекомендуется.

person Xiang Zhang    schedule 06.06.2017