也许你可以建议我如何在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];
它可以编译,但当然会崩溃。这在逻辑上是错误的)没有指针的分配,一切都可以正常工作。一个元素的非常酷的程序)
最佳答案
尝试使用偏移量或数组索引而不是指针。typedef struct some some;struct some{ char data[4]; size_t children[8]; // an array of subscripts};
...// buffer[0].children[0]=&buffer[1]; becomesbuffer[0].children[0] = 1;
所以现在你可以通过它的下标引用一个孩子
buffer[ buffer[0].children[0] ].char[0]
关于c - 如何在此数组(OpenCL)中分配指向某个结构的数组元素的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32253230/