gpt4 book ai didi

memory-management - 为现有全局内存阵列分配更多内存

转载 作者:行者123 更新时间:2023-12-04 08:58:03 25 4
gpt4 key购买 nike

是否可以将内存添加到全局内存中先前分配的数组中?

我需要做的是:

//cudamalloc memory for d_A
int n=0;int N=100;
do
{
Kernel<<< , >>> (d_A,n++);
//add N memory to d_A
while(n!=5)}

执行另一个 cudamalloc 是否会删除先前分配的数组的值?就我而言,应保留先前分配的数组的值...

最佳答案

首先,cudaMalloc 的行为类似于 malloc,而不是 realloc。这意味着 cudaMalloc 将在新位置分配全新的设备内存。 cuda API中没有realloc函数。

其次,作为解决方法,您可以再次使用 cudaMalloc 来分配更多内存。请记住在为 d_a 分配新地址之前使用 cudaFree 释放设备指针。以下代码在功能上正是您想要的。

int n=0;int N=100;

//set the initial memory size
size = <something>;

do
{
//allocate just enough memory
cudaMalloc((void**) &d_A, size);

Kernel<<< ... >>> (d_A,n++);

//free memory allocated for d_A
cudaFree(d_A);

//increase the memory size
size+=N;

while(n!=5)}

第三,cudaMalloc 可能是一个昂贵的操作,我预计上面的代码会相当慢。我认为你应该考虑为什么要增加数组。您能否为 d_A 分配一次内存,并为最大的用例提供足够的内存?如果您知道稍后需要 1,000 字节,则可能没有理由只分配 100 字节!

//calculate the max memory requirement
MAX_SIZE = <something>;

//allocate only once
cudaMalloc((void**) &d_A, MAX_SIZE);

//use for loops when they are appropriate
for(n=0; n<5; n++)
{
Kernel<<< ... >>> (d_A,n);
}

关于memory-management - 为现有全局内存阵列分配更多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com