C# CUDAfy实例化类

C# CUDAfy实例化类,c#,cuda,cudafy.net,C#,Cuda,Cudafy.net,因此,我尝试在CUDAfy中进行一个复杂的计算,这样可以减少CPU当前占用的时间,我尝试使用“CUDAfy ed”方法,我可以将变量传递到其中,它将返回非常类似于.NET Math.Sin(x)或Math.Cos(x)函数的值。我正试图让这项工作顺利进行,但这只是从CUDAfy翻译人员那里吐出错误,那么我正在努力做的是可能的/在CUDAfy的力量范围内还是我走错了使这项工作顺利进行的道路 例如: public static void Main(){ CudafyModu

因此,我尝试在CUDAfy中进行一个复杂的计算,这样可以减少CPU当前占用的时间,我尝试使用“CUDAfy ed”方法,我可以将变量传递到其中,它将返回非常类似于.NET Math.Sin(x)或Math.Cos(x)函数的值。我正试图让这项工作顺利进行,但这只是从CUDAfy翻译人员那里吐出错误,那么我正在努力做的是可能的/在CUDAfy的力量范围内还是我走错了使这项工作顺利进行的道路

例如:

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);
           }
        }
    }

当我这样做时,它会在CUDAfy转换器中抛出错误。

首先,这些没有用
[CUDAfy]
属性标记为“CUDAfy”的方法。C#代码被翻译成CUDA-C代码(使用翻译程序)。但关于做什么和如何做,有一些规则

其次,显示的这些方法包含对.NET框架(Math.PI)的引用。.NET Framework对GPU不可用。试着在互联网上查找GMath。它是一个Cudafy类,包含.NET数学方法的CUDA实现


在你把自己埋得太深之前,我建议你先看看这里的CUDAfy文档:

首先,这些没有用
[CUDAfy]
属性标记为“CUDAfy”的方法。C#代码被翻译成CUDA-C代码(使用翻译程序)。但关于做什么和如何做,有一些规则

其次,显示的这些方法包含对.NET框架(Math.PI)的引用。.NET Framework对GPU不可用。试着在互联网上查找GMath。它是一个Cudafy类,包含.NET数学方法的CUDA实现

在你把自己埋得太深之前,我建议你先看看这里的CUDAfy文档:

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