【发布时间】:2015-08-27 15:14:26
【问题描述】:
也许你可以告诉我如何在 OpenCL 中创建层次结构。如果您有“new”或“malloc”,这很容易,但我不知道如何在 GPGPU 中做到这一点。所以我创建了 3 个内核:
- 将 sizeof 结构发送到主机。
- 初始化数据。
- 以及使用在第二个内核中初始化的数据的内核。
我在 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 个元素的非常酷的程序)
【问题讨论】:
标签: c arrays struct opencl gpgpu