所以我试图在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翻译器上发出错误。
答案 0 :(得分:2)
首先,这些并没有被标记为Cudafy&#39;使用[Cudafy]
属性。 C#代码被转换为CUDA-C代码(使用翻译器)。但是有关于什么和如何的规则。
其次,显示的这些方法包含对.NET Framework(Math.PI)的引用。 .NET不支持.NET Framework。试着寻找(互联网)GMath。它是一个Cudafy类,包含.NET Math方法的CUDA实现。
在你埋葬自己之前,我建议你先来看看这里的CUDAfy文档:http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf