0

所以我试图在 CUDAfy 中进行复杂的计算,以便它可以减少 CPU 占用的当前时间例如,类似于 .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 翻译器上吐出错误。

4

1 回答 1

3

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

其次,显示的这些方法包含对 .NET Framework (Math.PI) 的引用。.NET Framework 不适用于 GPU。尝试在(互联网)上寻找 GMath。它是一个包含 .NET Math 方法的 CUDA 实现的 Cudafy 类。

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

于 2017-01-03T17:47:27.840 回答