gpt4 book ai didi

c++ - CUDA Thrust内存分配问题

转载 作者:行者123 更新时间:2023-11-28 00:42:56 28 4
gpt4 key购买 nike

我有一个 Thrust 代码,它将大量数据(2.4G)加载到内存中,执行计算,结果存储在主机(~1.5G)中,然后释放初始数据,将结果加载到设备中,执行其他对其进行计算,最后重新加载初始数据。推力代码如下所示:

thrust::host_device<float> hostData;
// here is a code which loads ~2.4G of data into hostData
thrust::device_vector<float> deviceData = hostData;
thrust::host_vector<float> hostResult;
// here is a code which perform calculations on deviceData and copies the result to hostResult (~1.5G)
free<thrust::device_vector<float> >(deviceData);
thrust::device_vector<float> deviceResult = hostResult;
// here is code which performs calculations on deviceResult and store some results also on the device
free<thrust::device_vector<float> >(deviceResult);
deviceData = hostData;

免费使用我定义的函数:

template<class T> void free(T &V) {
V.clear();
V.shrink_to_fit();
size_t mem_tot;
size_t mem_free;
cudaMemGetInfo(&mem_free, &mem_tot);
std::cout << "Free memory : " << mem_free << std::endl;
}

template void free<thrust::device_vector<int> >(thrust::device_vector<int>& V);
template void free<thrust::device_vector<float> >(
thrust::device_vector<float>& V);

但是,在尝试将 hostData 复制回 deviceData 时,我收到“thrust::system::detail::bad_alloc' what(): std::bad_alloc: out of memory”错误,即使此时 cudaMemGetInfo 返回了该错误我的设备有 ~6G 的可用内存。以下是 free 方法的完整输出:

Free memory : 6295650304
Free memory : 6063775744
terminate called after throwing an instance of 'thrust::system::detail::bad_alloc'
what(): std::bad_alloc: out of memory

虽然有足够的空闲空间,但似乎表明设备内存不足。这是为推力 vector 释放内存的正确方法吗?我还应该注意到,该代码适用于较小的数据量(最多 1.5G)

最佳答案

如果能看到一个完整的、可编译的复制器代码会很有用。但是,您可能遇到了内存碎片。

即使大量内存可能被报告为空闲,也可能无法将其分配到一个大的连续 block 中。然后,此碎片将限制您可以请求的单个分配的最大大小。

这可能不是您如何释放内存的真正问题,而是更多关于释放内存后剩余的开销分配的函数。您正在检查内存信息并返回大量数据这一事实告诉我,您正在正确释放分配。

要尝试解决此问题,一种方法是仔细管理和重新使用您的分配。例如,如果您需要在设备上使用 float 的大型 2.4G 工作设备 vector ,则分配一次,然后将其重新用于后续操作。此外,如果在尝试重新分配 2.4G vector 之前设备上还有任何剩余分配,则在尝试重新分配 2.4G 之前尝试释放这些分配(即释放您在设备上所做的所有分配) vector 。

关于c++ - CUDA Thrust内存分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877367/

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