2017-12-09 5 views
0

私はちょうどALEAで始まっています。私はあなたが与えられたgpu parallel.forの内部で他のタイプと参照にアクセスする方法が不思議です。可能性のある理由:1)静的フ​​ィールドはサポートされていません.2)フィールドタイプはサポートされていません。3)クロージャークラスでは、フィールドには[GpuParam]属性です。ループのためのAlea GPUはフィールドを得ることができません

このエラーは理にかなっているが、私は正しい実装は、あなたがSystem.Random.Nextを呼び出すしよう

[GpuManaged] 
    public void InitPoints() 
    { 
     var gp = Gpu.Default; 
     gp.For(1, (10), (i) => 
     { 
      int pointStart = random.Next(totalPoints) + 1; 
      Pt point = new Pt(pointStart, ptAt[i]); 
      point.Process(); 
     }); 
    } 

答えて

1

どうなるかわかりません。これは.NETライブラリのコードであり、GPUにコンパイルすることはできません。この機能の背後には、GPL上で実行するためにアクセスしてコンパイルできるMSILはありません。また、System.Random.Nextは、シリアルアプリケーション用に実装された乱数ジェネレータです。 cuRandで提供される並列乱数生成器を使用する必要があります。これらは、Alea GPUでも公開されています。

+0

@Danielさんへのお返事ありがとうございます。私はこれが問題であると理解していましたが、私が混乱しているのは、サポートされていないgpuタイプを動作させるための正しい実装/インタフェースです。それは可能ですか? cuRandはGPUでコンパイルすることができますが、それは素晴らしいですが、GPUが私のカスタム "Pt"タイプを適切にコンパイルする方法があります。また、サポートされているタイプのGPUのリストがあり、どこでこれを見つけることができますか?私は本当に助けに感謝します – skevthedev

+0

[Alea GPU](http://www.aleagpu.com)Webページには多くの[samples](http://www.aleagpu.com/gallery.html)があります。特に[このサンプル](http://www.aleagpu.com/release/3_0_4/doc/samples/aleasample_cs_financeasianoptionmontecarlo.html)を通して作業してください。必要以上に複雑ですが、GPUをプログラムする場合の考え方を十分に理解しておく必要があります。 – Daniel

関連する問題