也许你能告诉我如何在 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 个元素程序)
尝试使用偏移量或数组索引而不是指针。
typedef struct some some;
结构一些{
字符数据[4];
size_t 个 child [8];//下标数组
};
...
//缓冲区[0].children[0]=&buffer[1];成为
缓冲区[0].children[0] = 1;
所以现在你可以通过它的下标引用一个 child
buffer[ buffer[0].children[0] ].char[0]
我是一名优秀的程序员,十分优秀!