2016-10-25 7 views
0

私はCUDAfyで複雑な計算を行い、CPUにかかる現在の時間を短縮できるようにしようとしています。変数を渡すことができる「CUDAfy-ed」メソッドを利用しようとしています。たとえば、.NET Math.Sin(x)関数やMath.Cos(x)関数を使用した場合と非常によく似た値が返されます。私はこれを動作させようとしていますが、CUDAfyの翻訳者からのエラーを吐き出しているだけなので、CUDAfyの能力の範囲内で、または私がこの作業を行うために間違ったルートを下っていますか?CUDAfyクラスをインスタンス化する

例:MathHelper.csで

public static void Main(){  
     CudafyModule km = CudafyTranslator.Cudafy(); 
     GPGPU gpu = CudafyHost.GetDevice(CudafyModes.Target, CudafyModes.DeviceId); 
     gpu.LoadModule(km); 
     double Value; 
     double[] dev_Value = gpu.Allocate<double>(10); 
     gpu.Launch(1,1).SumOfSines(dev_Value); 
     Console.WriteLine(Value); 
     gpu.FreeAll();} 

public static void SumOfSines(double[] Value) 
    { 
    int numThreads = thread.blockDim.x * thread.gridDim.x; 
    int threadID = thread.threadIdx.x + thread.blockIdx.x * thread.blockDim.x; 
     for (int i = threadID; i < 1000000; i += numThreads) 
     { 
      for (double a = 0; a < 100; a++) 
      { 
      double angle = MathHelper.DegreesToRadians((double)a);  //can I do this? 
      Value[i] += Math.Sin(angle); 
      } 
     } 
    } 

が、それはこの計算を作る方法DegreesToRadiansを持つファイル:私はこれを行うと

public static double DegreesToRadians(double deg) 
    { 
     double rad = deg * (Math.PI/180.0); 
     return rad; 
    } 

はそれがCUDAfyトランスレータでエラーを出してくれる。

答えて

2

最初のものは、[Cudafy]属性の「Cudafy」のメソッドとしてマークされていません。 C#コードはCUDA-Cコード(トランスレータ付き)に変換されます。しかし、何や方法についての規則があります。

第2に、これらのメソッドには.NET Framework(Math.PI)への参照が含まれています。 .NET FrameworkはGPUでは使用できません。 GMathの(インターネット)を見てみてください。これは、CUDAの.NET Mathメソッドの実装を含むCudafyクラスです。

あなた自身をあまりにも深く埋める前に、ここにあるCUDAfyのドキュメントを読むことをお勧めします:http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf

関連する問題