首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cudafy.net中将结构传递给内核

在cudafy.net中将结构传递给内核
EN

Stack Overflow用户
提问于 2013-06-18 22:33:18
回答 1查看 1.5K关注 0票数 3

我在分配一个包含几个数组的结构给GPU时遇到了一些问题。在第二个代码块中,我得到了一个错误:

SimpleDataStructure[] dev_SDS = _gpu.CopyToDevice(SDS);

有人知道为什么吗?据我所知,CopyToDevice()不支持将结构作为参数。不过,我可能遗漏了一些东西,所以在任何情况下都会感谢一些帮助。

结构声明:

代码语言:javascript
复制
[Cudafy]
public struct SimpleDataStructure
{
    public float[] AreaCode;
    public float[] Number; 

    public SimpleDataStructure(int x)
    {
        AreaCode = new float[x];
        Number = new float[x];
    }
}

我的类中的方法中的代码:

代码语言:javascript
复制
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);
    }

    //.....
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 23:22:09

不能将数组引用作为结构的成员,这是cudafy不支持的。您可以通过自己将数组复制到设备并将设备地址作为IntPtrs存储在结构中来解决此问题。或者,如果数组的大小是固定的,您可以使结构不安全,并在结构中使用固定大小的数组。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17171646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档