2013-01-01 2 views
1

J'utilisais CUDA C pour l'évaluation et maintenant commencé à utiliser cudafy .net.Passage de Enum à un noyau en utilisant Cudafy .Net

laisse supposer que j'ai le ENUM suivant

[Cudafy] 
    public enum MyEnum 
    { 
     mon = 0,tue=1,wed=2,thu=3,fri=4,sat=5 
    } 

Je veux passer à un noyau

[Cudafy] 
    public static void Enum_Kernel(GThread thread, MyEnum[] en) 
    { 
     MyEnum day = en[thread.threadIdx.x]; 
    }  

J'allouez de la mémoire

 MyEnum [] enum1 = new MyEnum[10]; 
     for (int i = 0; i < 10; i++) 
     { 
      enum1[i] = MyEnum.mon; 
     } 
     MyEnum [] d_enum1 = gpu.CopyToDevice<MyEnum>(enum1); 

Au cours de l'exécution, le programme accidents à la ligne aboce avec le message

Error Message

Quel est le problème que je dois résoudre?

Répondre

1

Vous n'avez pas besoin d'allouer de la mémoire par vous-même. Dites simplement au module cudafy quel type de structure vous voulez utiliser.

Exemple de cudafy:

// in your main execution method 
CudafyModule km = CudafyTranslator.Cudafy(typeof(ComplexFloat)); 
GPGPU gpu = CudafyHost.GetDevice(eGPUType.Cuda); 
gpu.LoadModule(km); 

// the struct 
[Cudafy] 
public struct ComplexFloat 
{ 
    public ComplexFloat(float r, float i) 
    { 
     Real = r; 
     Imag = i; 
    } 
    public float Real; 
    public float Imag; 
    public ComplexFloat Add(ComplexFloat c) 
    { 
     return new ComplexFloat(Real + c.Real, Imag + c.Imag); 
    } 
} 
1

Essayez de remplacer enum avec de simples int.