1

我使用 CUDA C 进行评估,现在开始使用 cudafy .net。

让我们假设我有以下枚举

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

我想将它传递给内核

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

我正在分配内存

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

在运行期间,程序在 aboce 行崩溃并显示消息

错误信息

我需要解决什么问题?

4

2 回答 2

1

尝试enum用简单的int.

于 2013-11-05T09:18:30.797 回答
1

您不需要自己分配内存。只需告诉 cudafy 模块您要使用什么结构类型。

来自 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);
    }
 }
于 2013-08-08T08:20:12.523 回答