我在分配一个包含几个数组的结构给GPU时遇到了一些问题。在第二个代码块中,我得到了一个错误:
SimpleDataStructure[] dev_SDS = _gpu.CopyToDevice(SDS);
有人知道为什么吗?据我所知,CopyToDevice()不支持将结构作为参数。不过,我可能遗漏了一些东西,所以在任何情况下都会感谢一些帮助。
结构声明:
[Cudafy]
public struct SimpleDataStructure
{
public float[] AreaCode;
public float[] Number;
public SimpleDataStructure(int x)
{
AreaCode = new float[x];
Number = new float[x];
}
}我的类中的方法中的代码:
Public class TaskManager
{
private static GPGPU _gpu;
private SimpleDataStructure SDS;
public void PreparationForTasks()
{
DataRetrieval();
SDS = new SimpleDataStructure(_entity.Data.Count - 1);
CudafyModule km = CudafyTranslator.Cudafy();
_gpu = CudafyHost.GetDevice(eGPUType.Cuda);
_gpu.LoadModule(km);
//Loaded SimpleDataStructure into same module.
km = CudafyTranslator.Cudafy(typeof(SimpleDataStructure));
_gpu.LoadModule(km, false);
//Getting error on following line.
SimpleDataStructure[] dev_SDS = _gpu.CopyToDevice(SDS);
dim3 grid = new dim3(10, 10, 1);
dim3 block = new dim3(8, 8, 1);
_gpu.Launch(grid, block, "WorkerKernelOnGPU", dev_SDS);
SimpleDataStructure result_SDS = new SimpleDataStructure(100);
_gpu.CopyFromDevice(dev_SDS, result_SDS);
}
//.....
}发布于 2013-06-18 23:22:09
不能将数组引用作为结构的成员,这是cudafy不支持的。您可以通过自己将数组复制到设备并将设备地址作为IntPtrs存储在结构中来解决此问题。或者,如果数组的大小是固定的,您可以使结构不安全,并在结构中使用固定大小的数组。
https://stackoverflow.com/questions/17171646
复制相似问题