我是一名業餘愛好者,並希望將我的GPU用於我的個人項目。 我已經安裝並運行了Alea 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,因此我可以充分利用我的電腦。
請記住,所有這些工作完美地作爲一個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)
「廣告資源」是一個自定義類,其中「ItemsInventory」是一個字典(字符串,InventoryItem)「InventoryItem」也是一個自定義類。
我得到的例外是:
ArgumentException的拋出: 'System.Exception的' 在Alea.dll 其他信息:無法獲得域 「$ VB $當地庫存」。
接下來我試圖定義一個'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)
這就是我現在得到:
拋出異常: 'System.Exception的' 在Alea.dll 其他信息:非blittable陣列MyApp.MainWindow + InventoryItem []轉不允許,你可以通過app.config來改變它。
但我不知道該部分是怎麼樣的,我可以添加到app.config文件中,我還沒有發現任何聯機來解決這個問題。
爲什麼這標誌着C#? – MickyD
@MickyD這是建議的標籤之一,因爲vb。net和c#是如此相似,有相同問題的人可能會在這裏找到解決方案。如果這不符合要求,我應該刪除標籤嗎? – VampireMonkey
第一個錯誤消息似乎表明'Inventory'是一個成員變量,只有局部變量在該上下文中受支持。假設它是一個字段,嘗試聲明一個本地並將字段值賦給它並在lambda中使用它。這種限制的原因可能是某個領域可能會從其他地方改變。 – jmcilhinney