gpt4 book ai didi

我可以使用 cudaMalloc 分配比必要更多的内存以避免重新分配吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:28 26 4
gpt4 key购买 nike

我正在编写代码,使用 cuSparse 在 GPU 上对数千个稀疏矩阵进行计算。由于 GPU 上的内存有限,我需要一个一个地处理它们,因为剩余的内存被其他 GPU 变量和密集矩阵占用。

我的工作流程(伪代码)如下:

for (i=0;i<1000;i++){
//allocate sparse matrix using cudaMalloc
//copy sparse matrix from host using cudaMemcpy
//do calculation by calling cuSparse
//deallocate sparse matrix with cudaFree
}

在上面,我在每个步骤中为每个稀疏矩阵分配和释放内存,因为它们的稀疏性不同,因此每个矩阵所需的内存也不同。

我可以改为做类似的事情吗:

//allocate buffer once in the beginning using cudaMalloc with some extra space such 
//that even the sparse matrix with the highest density would fit.
for (i=0;i<1000;i++){
//copy sparse matrix from host using cudaMemcpy to the same buffer
//do calculation by calling cuSparse
}
//free the buffer once at the end using cudaFree

上面的代码避免了在每次迭代中 malloc 和释放缓冲区。上面的方法行得通吗?它会提高性能吗?这是好的做法还是有更好的方法来做到这一点?

最佳答案

The above avoids having to malloc and free the buffer in each iteration. Would the above work?

原则上是的。

Would it improve performance?

可能吧。内存分配和释放并非没有延迟。

Is it good practice or is there a better way to do this?

一般来说,是的。许多广泛使用的 GPU 加速框架(例如 Tensorflow)都使用这种策略来降低 GPU 上的内存管理成本。您的用例是否有好处需要您自己测试。

关于我可以使用 cudaMalloc 分配比必要更多的内存以避免重新分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51355002/

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