我想做类似的事情:
typedef struct {
__dontcare __constant Context * ctx;
float memberA, memberB;
} MyStruct;
__kernel void doSomething(__constant Context * ctx, __global MyStruct * data) {
data->ctx = ctx;
...
}
OpenCL 1.2中的AFAIK无法为具有指针成员的内核传递结构。但我喜欢传递一个虚拟的,未经引发的指针成员,并稍后从内核代码初始化它。
有可能吗?
编辑:
如果我这样做(将int转换为ptr,将ptr转换为int):
typedef struct {
int ctx;
float memberA, memberB;
} MyStruct;
__kernel void doSomething(__constant Context * ctx, __global MyStruct * data) {
// with using proper synchronisation and critical section protection:
data->ctx = (int)ctx;
...
float2 pos = ((__constant Context *)(data->ctx))->center;
...
}
会起作用吗?假设每个GPU上的指针大小为4个字节是否安全?