我是一名业余爱好者,想将我的 GPU 用于我的个人项目。我已经安装并运行了 Alea GPU 包。
下面产生相同的输出:
Dim y(10) As Integer
For i = 0 To 10 - 1
y(i) = i
Next
Dim y2(10) As Integer
Array.Copy(y, y2, y.Length)
Parallel.For(0, y.Length - 1, Sub(i) y(i) += i)
Debug.WriteLine(y.Aggregate(Function(now, future) now + future))
Alea.Gpu.Default.For(0, y2.Length - 1, Sub(i) y2(i) += i)
Debug.WriteLine(y2.Aggregate(Function(now, future) now + future))
两者都返回 90。这是最基本的,但我需要的更多。
我正在尝试将我的其他资源密集型 parallel.foreach 循环转换为 GPU.Default.For,这样我就可以充分利用我的 PC 的功能。
请记住,所有这些都作为一个 parallel.foreach 循环完美地工作。其余代码目前已被注释掉,这是阻止它工作的原因。
Gpu.Default.For(0, Inventory.ItemsInventory.Count - 1,
Sub(i)
Dim Level_1 = Inventory.ItemsInventory.ElementAt(i) 'Exception on this line, doesn't happen if commented out.
end sub)
“Inventory”是一个自定义类,其中“ItemsInventory”是一个字典(字符串,InventoryItem)“InventoryItem”也是一个自定义类。
我得到的例外是:
引发 ArgumentException:Alea.dll 中的“System.Exception”附加信息:无法获取字段“$VB$Local_Inventory”。
接下来,我尝试定义一个“InventoryItem”数组,因为这是我对这个特定循环感兴趣的内容。
Dim ItemsArray() As InventoryItem = Inventory.ItemsInventory.Select(Function(f) f.Value).ToArray
Gpu.Default.For(0, ItemsArray.Length - 1,
Sub(i)
Dim Level_1 = ItemsArray(i)
end sub)
这就是我现在得到的:
抛出异常:Alea.dll 中的 'System.Exception' 附加信息:不允许传输非 blittable 数组 MyApp.MainWindow+InventoryItem[],您可以通过 app.config 更改此设置。
但我不知道那部分是什么样子的,我“可以”添加到 app.config 文件中,我还没有在网上找到任何东西来解决这个问题。