2016-10-25 1 views
0

그래서 CUDAfy에서 복잡한 계산을 수행하므로 CPU에 걸리는 현재 시간을 줄일 수 있으므로 변수를 전달할 수있는 "CUDAfy-ed"메소드를 사용하려고합니다. 예를 들어 .NET Math.Sin (x) 또는 Math.Cos (x) 함수를 사용하여 아이디어와 매우 유사한 값을 반환합니다. 나는 이것을 작동 시키려고 노력하고있다. 그러나 CUDAfy 번역기에서 오류를 뱉어 내고 있기 때문에 CUDAfy의 힘 내에서/가능한지하려고 노력하고 있는가? 아니면 내가 잘못된 경로를 따라이 작업을 할 것인가?CUDAfy 인스턴스화 클래스

예 : MathHelper.cs에서

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

가이 계산을 만드는 방법 DegreesToRadians를 가지고 파일 : 나는이 작업을 수행 할 때

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

IT는 CUDAfy 번역기에 에러를 뱉어.

답변

2

첫 번째 것은 [Cudafy] 속성이있는 'Cudafy'의 메소드로 표시되지 않습니다. C# 코드는 CUDA-C 코드 (번역사 포함)로 변환됩니다. 그러나 무엇을 어떻게 할 것인가에 대한 규칙이 있습니다.

두 번째로 표시된이 메서드에는 .NET Framework (Math.PI)에 대한 참조가 포함되어 있습니다. .NET Framework는 GPU에서 사용할 수 없습니다. GMath를 (인터넷) 보도록하십시오. CUDA는 .NET 수학 메서드의 CUDA 구현을 포함하는 Cudafy 클래스입니다.

너 자신을 너무 깊이 파묻기 전에, 여기에있는 CUDAfy 문서를 읽어 보시기 바랍니다 : http://www.hybriddsp.com/cudafy/CUDAfy_User_Manual_1_22.pdf