我想在项目中清理CUDA内核的参数。
现在,内核需要3个uint32_t数组,这会导致非常丑陋的代码:( id表示全局线程id和valX是某个任意值)
__global__ void some_kernel(uint32_t * arr1, uint32_t * arr2, uint32_t * arr3){arr1[id] = val1; arr2[id] = val2; arr3[id] = val3;}
Run Code Online (Sandbox Code Playgroud)
我想用一个结构围绕所有这些数组:
typedef struct S{uint_32_t arr1, uint_32_t arr2, uint_32_t arr3, uint32_t size} S;
Run Code Online (Sandbox Code Playgroud)
其中size表示结构内每个arrX的长度。
我想拥有的是:
__global__ void some_kernel(S * s){s->arr1[id] = val1; s->arr2[id] = val2; s->arr3[id] = val3;}
Run Code Online (Sandbox Code Playgroud)
对于这样的结构,对应的cudaMalloc和cudaMemcpy将会是什么样?有没有由此带来的性能缺陷,我还没有看到?
提前致谢!