繁体   English   中英

如何在此数组(OpenCL)中分配指向某个结构的数组元素的指针?

[英]How to assign pointer to element of array of some struct in this array(OpenCL)?

也许您可以建议我如何在OpenCL中创建层次结构。 如果您拥有“ new”或“ malloc”,这很容易,但是我不知道如何在GPGPU中使用它。 所以我创建了3个内核:

  1. 将sizeof结构发送到主机。
  2. 初始化数据。
  3. 而内核使用在第二个内核中初始化的数据。

我在OpenCL中有这个结构:

    typedef struct some some;
struct some{
    char data[4];
    some* children[8];
};

第一个内核说这个结构的大小是36个字节(数据4个字节,指针32个字节)。

接下来,我根据先前的信息在GPU上分配内存,并调用第二个内核:

kernel void import(global some *buffer){
for(int i=0;i<4;i++){
buffer[0].data[i]=255; //For example, doesn't matter
}
//Now I need to assign pointer to next element of array(buffer) to first element
buffer[0].children[0]=&buffer[1];
}

但是内核无法编译。 我也尝试过:

*buffer[0].children[0]=buffer[0];

它可以编译,但是当然会崩溃。 这在逻辑上是错误的)如果没有分配指针,一切都会很好。 很酷的程序(1个元素)

尝试使用偏移量或数组索引而不是指针。

typedef struct some some; struct some{ char data[4]; size_t children[8]; // an array of subscripts };

...

// buffer[0].children[0]=&buffer[1]; becomes buffer[0].children[0] = 1;

所以现在您可以通过下标引用一个孩子

buffer[ buffer[0].children[0] ].char[0]

如果您的设备支持OpenCL 2.0,则可以使用Shared Virtual Memory 在主机上创建的指针也将在设备上有效。

Shared Virtual Memory概念的描述以及可在此处此处找到的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM