我有一组指针unsigned char *dev_src[2];
。实际上这些指针必须指向由cudaMalloc()
分配的内存。
如果我使用以下代码在main()
内完成,我可以获取已分配内存的地址:
//Inside the same function
int memsize = 100;
int main()
{
unsigned char *dev_src[2];
//Allocate memomry
for (int i = 0; i < numCudaStreams; i++)
{
cudaMalloc((void**)&dev_src[i], memsize);
}
return 0;
}
问题:我想在另一个函数中获取已分配内存的地址,我需要将此指针数组传递给该函数。我已经知道如何将数组传递给另一个函数并在其中进行更改,但在这种情况下,我无法获得正确的方法。
//Inside another function
int memsize = 100;
void memallocation(unsigned char ????)
{
//Allocate memomry
for (int i = 0; i < numCudaStreams; i++)
{
cudaMalloc((void**)??????????, memsize);
}
}
int main()
{
unsigned char *dev_src[2];
//Initialization of pointers before passing them to a function
for (int i = 0; i < 2; i++)
*dev_src[i] = NULL;
memallocation(&dev_src);
return 0;
}
更新:它不是this question的副本。我已经提到我知道如何通过引用传递数组来更改其元素,但在这种情况下,元素本身必须是由cudaMalloc()
指定的指针。
答案 0 :(得分:2)
您可以执行以下操作。我将数组作为参考传递,并使其适用于不同的数组大小,我已将其作为模板。用cudaMalloc替换内存分配行。
template<int N>
void memallocationA(unsigned char *(&arr)[N])
{
//Allocate memomry
for (int i = 0; i < N; i++)
{
//cudaMalloc((void**) &arr[i] , memsize);
arr[i] = new unsigned char[10];
}
}
int main()
{
unsigned char *dev_src[2];
//Initialization of pointers before passing them to a function
for (int i = 0; i < 2; i++)
dev_src[i] = NULL;
memallocationA(dev_src);
return 0;
}