私は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トランスレータでエラーを出してくれる。