私は愛好家であり、自分のプロジェクトに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に変換しようとしていますので、私の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)
「在庫が」「ItemsInventoryは」(文字列の、InventoryItem)辞書でカスタムクラスであり、「InventoryItem」もカスタムクラスです。
私は取得しています例外がある:スロー
ArgumentExceptionが:Alea.dll 追加情報の 'のSystem.Exceptionは':フィールド "$ 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)
これは私が今得るものです:スロー
例外:Alea.dllの 'のSystem.Exception' 追加情報:非blittable型の配列MyApp.MainWindow + InventoryItem []の転送ではありませんこれをapp.configで変更することができます。
しかし、私はapp.configファイルに追加することができますが、私はこれを解決するために何かオンラインを見つけられませんでした。 2番目の例外に関して
はなぜ、これはC#のがマークされているのですか? – MickyD
@MickyD vbから提案されたタグの1つでした。ネットとC#はとても似ているので、同じ問題を抱えている誰かが潜在的に解決策を見つけることができます。それはそれと一緒に行く方法ではない場合、私はタグを削除する必要がありますか? – VampireMonkey
その最初のエラーメッセージは、 'Inventory'がメンバ変数であり、ローカル変数だけがそのコンテキストでサポートされていることを示唆しているようです。それがフィールドであると仮定して、ローカルを宣言し、それにフィールド値を割り当て、ラムダでそれを使用してみてください。そのような制限の理由は、フィールドが他の場所から変更される可能性があるためです。 – jmcilhinney