我正在尝试使用Alea GPU库中的Gpu.Default.For
,但我一直有例外:
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);
//});
}
答案 0 :(得分:3)
两件事:首先,你在GPU代码中新建一个数组,这是不受支持的。其次,我猜CalcResultsList
的类型为List
,但也不受支持。原因是,在GPU代码中分配新内存效率不高。 GPU代码将在许多线程中执行,不建议在GPU代码内部进行分配。