2017-03-07 5 views
1

私は愛好家であり、自分のプロジェクトに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番目の例外に関して

+0

はなぜ、これはC#のがマークされているのですか? – MickyD

+0

@MickyD vbから提案されたタグの1つでした。ネットとC#はとても似ているので、同じ問題を抱えている誰かが潜在的に解決策を見つけることができます。それはそれと一緒に行く方法ではない場合、私はタグを削除する必要がありますか? – VampireMonkey

+0

その最初のエラーメッセージは、 'Inventory'がメンバ変数であり、ローカル変数だけがそのコンテキストでサポートされていることを示唆しているようです。それがフィールドであると仮定して、ローカルを宣言し、それにフィールド値を割り当て、ラムダでそれを使用してみてください。そのような制限の理由は、フィールドが他の場所から変更される可能性があるためです。 – jmcilhinney

答えて

0

、次のページは、.NET設定ファイルにアリアGPUを設定するための基本を示しています

http://www.aleagpu.com/release/3_0_2/doc/faq.html

私はAlea.Settings種類のドキュメントをチェックし、ことを読んだ後、それがタイプSettingElements.MemoryElementMemoryプロパティを持っていることがわかりました。タイプがBooleanプロパティAllowNonBlittableMemoryTransferを持っていることを

http://www.aleagpu.com/release/3_0_2/api/html/73614a0a-9c5c-cce6-7114-fc6833cb31f2.htm

シナリオにおける非blittable型タイプを許可する、ことを示唆している

は、あなたの設定ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="aleaSettings" type="Alea.Settings, Alea"/> 
    </configSections> 
    <aleaSettings> 
    <memory allowNonBlittableMemoryTransfer="true"/> 
    </aleaSettings> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
</configuration> 
+0

わかりましたので、今、私が得ている過去が、今私が代わりにこれを取得しています: は 'タイプの未処理の例外「のSystem.Exception」のがmscorlib.dllで発生した 追加情報を:のための非管理マーシャラーのサポートされていません「MyApp.MainWindow + InventoryItem(i32)」と入力してください。 私はこの権利を理解していれば、インデックス32に問題があると言います。 – VampireMonkey

+0

'i32'の部分はおそらく32ビットの整数、つまりVBの 'Integer'を指しています。私はAlea GPUを使ったことは一度もありません。この質問を読む前に聞いたこともないので、私は専門家から遠いです。デフォルトで非blittable(ビットマップではない)型をサポートしていないという事実と、カスタム型の整列化をサポートしないというこの新しいエラーメッセージは、それが単純な型だけの使用を意図していることを示唆しています。私は解決策が何であるかはわかりませんが、おそらくそれが何をサポートしているかについてもう少し研究をする必要があることを私は知っています。 – jmcilhinney

関連する問題