OpenCL 1.2:使用uninited指针成员将struct传递给kernel

时间:2018-04-22 10:06:42

标签: opencl

我想做类似的事情:

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个字节是否安全?

0 个答案:

没有答案