<分区>
基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配以及 GPU 上分配的内存。我可以编写自己的代码,如果需要的话,我会这样做,但我不介意换用一种可靠的开源实现。
唯一的问题是,对于 cudaMalloc,内存池无法触及分配的内存。我的理解是许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此它们不起作用。
有谁知道不是这种情况的内存分配器?
<分区>
基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配以及 GPU 上分配的内存。我可以编写自己的代码,如果需要的话,我会这样做,但我不介意换用一种可靠的开源实现。
唯一的问题是,对于 cudaMalloc,内存池无法触及分配的内存。我的理解是许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此它们不起作用。
有谁知道不是这种情况的内存分配器?
最佳答案
如果您所有的小分配大小相同或具有合理的上限,那么固定大小的池分配器是一个很好的模式。
这个想法是,分配器使用系统调用获取一个大块,然后在大块内管理它自己的固定大小块的空闲列表。分配就像获取空闲列表头部的 block 一样简单。解除分配稍微复杂一些,但可以根据您的要求以不同的方式实现。
自己编写很简单,或者如果你用谷歌搜索 C++ 固定大小分配器,你可以找到许多不错的实现,包括 boost::pool
关于c++ - 是否存在不在其分配中存储元数据的自定义内存分配器设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153449/