假設我有一個內核來計算兩個數組的元素總和。而不是將A,B和C三個參數,我讓他們結構成員如下:使用PyOpenCL將結構與指針成員傳遞給OpenCL內核
typedef struct
{
__global uint *a;
__global uint *b;
__global uint *c;
} SumParameters;
__kernel void compute_sum(__global SumParameters *params)
{
uint id = get_global_id(0);
params->c[id] = params->a[id] + params->b[id];
return;
}
有結構上的信息,如果您PyOpenCL的RTFM [1],和其他人也解決了這個問題[ 2] [3] [4]。但是,我找到的OpenCL結構示例都沒有指針作爲成員。
具體來說,我很擔心主機/設備地址空間是否匹配,以及主機/設備指針大小是否匹配。有人知道答案嗎?
[1] http://documen.tician.de/pyopencl/howto.html#how-to-use-struct-types-with-pyopencl
[2] Struct Alignment with PyOpenCL
[3] http://enja.org/2011/03/30/adventures-in-opencl-part-3-constant-memory-structs/
[4] http://acooke.org/cute/Somesimple0.html