CUDAfy 实例化 类
CUDAfy Instantiating classes
所以我试图在 CUDAfy 中进行复杂的计算,以便它可以减少当前在 CPU 上花费的时间我正在尝试使用 "CUDAfy-ed" 方法,我可以将变量传入,它将 return 值非常类似于 .NET Math.Sin(x) 或 Math.Cos(x) 函数的想法。我正试图让它工作,但它只是从 CUDAfy 翻译器中吐出错误,所以我正在尝试做的事情 possible/within 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]
属性的方法。 C# 代码被翻译成 CUDA-C 代码(使用翻译器)。但是关于什么和如何做是有规则的。
其次,显示的这些方法包含对 .NET Framework (Math.PI) 的引用。 .NET Framework 不适用于 GPU。尝试在(Internet)上查找 GMath。这是一个 Cudafy class,其中包含 .NET 数学方法的 CUDA 实现。
在你把自己埋得太深之前,我建议你开始阅读位于此处的 CUDAfy 文档:http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf
所以我试图在 CUDAfy 中进行复杂的计算,以便它可以减少当前在 CPU 上花费的时间我正在尝试使用 "CUDAfy-ed" 方法,我可以将变量传入,它将 return 值非常类似于 .NET Math.Sin(x) 或 Math.Cos(x) 函数的想法。我正试图让它工作,但它只是从 CUDAfy 翻译器中吐出错误,所以我正在尝试做的事情 possible/within 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]
属性的方法。 C# 代码被翻译成 CUDA-C 代码(使用翻译器)。但是关于什么和如何做是有规则的。
其次,显示的这些方法包含对 .NET Framework (Math.PI) 的引用。 .NET Framework 不适用于 GPU。尝试在(Internet)上查找 GMath。这是一个 Cudafy class,其中包含 .NET 数学方法的 CUDA 实现。
在你把自己埋得太深之前,我建议你开始阅读位于此处的 CUDAfy 文档:http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf