我正在開發一個CUDA項目。但是,這基本上是C指針與CUDA本身沒什麼關係的概念。將指針傳遞給三個嵌套函數
我不知道我的引用/取消引用指針是否正確地完成,以反映我的kernel
函數(與C函數相同,但在GPU上完成)上的新值。
我kernel
得到一個指針作爲參數:
__global__ kernel(StructA *a)
{
StructB b;
foo1(&a, &b); // passing both addresses to foo1
// I don't need to modify anything on StructA, might in future
// But, I will assign values to StructB (in foo1 and foo2)
...
// Work with StructB
...
}
質疑foo1
:我應該給指針的指針StructA在調用foo2
的地址?
__device__ foo1(StructA **a, StructB *b) // pointer-to pointer and pointer
{
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if((*a)->elem1[tid]) // Access to value in elem1[tid]
foo2(a, &b, tid); // Pass structures to foo2
...
b->elem3 = 1; // Assign value to StructB
...
}
問題爲foo2
:如果我通過StructA地址我將需要StructA第三級指針。但是,我迷失在這個級別的指針。
__device__ foo2(StructA **a, StructB **b, int tid)
{
// Assign value from elem2 in StructA for the thread to elem2 in StructB
(*b)->elem2 = (*a)->elem2[tid]; // Assign value to StructB from StructA
// HELP in previous line, not so sure if referencing the in the Structures
// are done correctly.
...
}
我可以粘貼我的實際代碼,但不想讓事情複雜化。
爲什麼你將指針傳遞給'foo1()'或'foo2()'的指針? – Macattack
@Macattack,因爲我需要在'kernel'上反映值的賦值。 – mrei