2017-01-29 12 views
2

ALEAライブラリを使用して、CPUからGPUへの再帰アルゴリズムを変換しようとしています。私は、コードをビルドする場合、私は、次のエラーを取得:ALEAライブラリでのC#での再帰の使い方

「Fody/Alea.CUDAを:AOTCompileServerは終了コード-1073741571でunexpectly終了した」あなたが再帰のために任意の文書またはリンクを提供する場合、私は感謝します

public class GPUModule : ILGPUModule 
{ 
public GPUModule (GPUModuleTarget target) : base(target) 
{ 
} 

[Kernel] //Same Error whether RecursionTest is another Kernel or not. 
public void RecursionTest(deviceptr<int> a) 
{ 
    ... 
    RecursionTest(a); 
} 

[Kernel] 
public MyKernel(deviceptr<int> a, ...) 
{ 
    ... 
    var a = __shared__.Array<int>(10); 
    RecursionTest(Intrinsic.__array_to_ptr<int>(a)); //Error here 
} 
... 
} 

C#のALEAライブラリを使用した例

答えて

1

あなたはアリアのGPU 2.xのを使用している事前に

おかげで、最新バージョンは、アリアのGPU 3.xのです(www.aleagpu.comを参照)。 3.0で、私はテストを作って、それが動作します:

using Alea; 
using Alea.CSharp; 
using NUnit.Framework; 

    public static void RecursionTestFunc(deviceptr<int> a) 
    { 
     if (a[0] == 0) 
     { 
      a[0] = -1; 
     } 
     else 
     { 
      a[0] -= 1; 
      RecursionTestFunc(a); 
     } 
    } 

    public static void RecursionTestKernel(int[] a) 
    { 
     var tid = threadIdx.x; 
     var ptr = DeviceFunction.AddressOfArray(a); 
     ptr += tid; 
     RecursionTestFunc(ptr); 
    } 

    [Test] 
    public static void RecursionTest() 
    { 
     var gpu = Gpu.Default; 
     var host = new[] {1, 2, 3, 4, 5}; 
     var length = host.Length; 
     var dev = gpu.Allocate(host); 
     gpu.Launch(RecursionTestKernel, new LaunchParam(1, length), dev); 
     var actual = Gpu.CopyToHost(dev); 
     var expected = new[] {-1, -1, -1, -1, -1}; 
     Assert.AreEqual(expected, actual); 
     Gpu.Free(dev); 
    } 
+0

ここALEAの依存関係のバージョンのリストです: ALEA.dll(v4.0.30319/3.0.0.0) ALEA.CUDA.dll(v4.0.30319は、/2.2.0.3307) Alea.CUDA.IL.dll(v4.0.30319/2.2.0.3307) Alea.IL.dll(v4.0.30319/2.2.0.3307) 私は、これはバージョン3 –

+0

だと思いません、つまり、バージョン2.2.0(実際は、バージョン3のalea.dllでちょっと混乱していると思いますが、バージョン2のものです)は、こちらからご覧ください:http://www.quantalea.com/ (メニュー「製品」の下に、バージョン3へのリンクがあります)。 –

+0

はい、weaver.xmlのようなコンパイルエラーを修正できるようになるまでには数週間かかりました。 ALEAのWebサイトには、インストールプロセスと考えられるエラーメッセージに関する十分な文書がありません。だから、私は任意の設定とバージョンを別々に試しなければならなかった。 Class Instance-Based GPU Codingを実装できるように、インストールプロセスを私にお任せください。 Nugetの最新のALEA.CUDAとALEA.CUDA.ILのバージョンは2.2.0.3307です。 ALEA.ILのバージョンは、Nugetを使用して再インストールした後3.0.0.0になりました。しかし、私はまだ同じエラーメッセージが表示されます。 –