gpt4 book ai didi

c++ - 有没有办法制作一个程序的 "reusable snapshot"?

转载 作者:行者123 更新时间:2023-12-03 19:46:59 26 4
gpt4 key购买 nike

情况是这样的:我正在开发一个相对较大的 C++ 程序(在 Linux 中)。这个程序可以分为两部分。 A 部分只是一堆基于一些数据的预计算,这些数据随着时间的推移保持不变,构建了一个相当复杂的大数据结构。问题是 A 部分花费了太多时间(大约一分钟),您可以假设它无法进一步显着优化。 B 部分紧接在 A 部分之后,基本上是对 A 部分加载的数据的一些查询。

所以,这就是我想做的:因为 A 部分中构建的数据结构总是相同的,如果有它的“快照”不是很好吗,因此,每次加载程序时,您可以非常快速地从快照中检索数据并直接跳转到 B 吗?

问题来了:有没有办法做到这一点?

最佳答案

您所描述的基本上是 HPC 中的“检查点”:您指定了一 block 内存,如果程序重新启动可以快速恢复,而无需花费大量时间来保存/加载此数据。

那里有很多库或检查点,但我用过 Ken过去效果很好。该库的作用是创建一个在固定内存位置的虚拟内存映射,以及一种自动将此内存捕获到磁盘并重新加载的机制。

当程序重新启动时,您只需再次映射内存并检​​查它是否已初始化。因此,您的启动时间几乎减少到零(内存映射文件和根据需要从磁盘加载一些 block 的时间)。

你没有提供任何代码所以我不能给你具体的建议,但是你需要确保昂贵的部分的所有内存分配都是在 Ken 管理的内存中进行的,例如通过实现你自己的内存分配器支持Ken 管理的内存,通过将自定义分配器传递给所有 STL 数据结构,或者简单地说服您选择的内存管理库在 Ken 内存中分配内存。有关最后一个选项的示例,请参阅 jemallocarena.createthread.arena 选项。

关于c++ - 有没有办法制作一个程序的 "reusable snapshot"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60303201/

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