CUDAfy实例化类

本文关键字:实例化 CUDAfy | 更新日期: 2023-09-27 18:14:42

所以我试图在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);
           }
        }
    }

在MathHelper.cs文件中,它有一个方法DegreesToRadians,它进行了这样的计算:

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

当我这样做时,它会在CUDAfy翻译器上吐出错误。

CUDAfy实例化类

首先,这些没有被标记为具有[Cudafy]属性的'Cudafy'方法。c#代码被翻译成CUDA-C代码(使用翻译器)。但是做什么和怎么做是有规则的。

其次,这些方法包含对。net框架(Math.PI)的引用。GPU无法使用。net框架。试着(在网上)找一下GMath。这是一个Cudafy类,包含。net Math方法的CUDA实现。

在你把自己埋得太深之前,我建议你从这里开始阅读CUDAfy文档:http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf