【发布时间】:2009-09-20 08:37:10
【问题描述】:
我正在寻找一种算法,该算法基于系统先前的行为来预测未来的行为。
我正在构建一个并行内存分配器,它有一个公共的空块列表。每个线程都可以在需要时从该列表中获取块并从中分配。根据分配大小(8、12、16 字节...到大约 4 KB),这些块被分组到 bin 中。当一个块变空时,它会返回到全局列表(当然会有同步开销)。如果一个 bin 中没有空块,它会尝试从其他 bin 中的块中“窃取”位置,然后再获得一个新的空块。
现在有两种情况让我担心:
- 线程可能分配占用 5 个块的内存。一段时间后,它会释放所有这些内存(并且块会进入全局列表)。紧接着,它再次分配 5 个块,释放它们,依此类推。在这种情况下,明智的做法是始终保留这 5 个块并且不要将它们返回到全局列表,因为这样可以避免同步开销。
- 如果分配器“窃取”一个位置,它会使用否则会被浪费的内存。但在某些情况下,这会增加内存使用量。
我想制作一个可以观察这种模式的系统,并将结果保存在某个地方,以便下次分配器知道什么是明智的,什么是不明智的(在 bin X 中至少保留 N 个块,不要't 从 bin Y 中“窃取”)。
遗传算法有用吗?我对他们一无所知,但我听说他们擅长机器学习或类似的东西。
提前致谢!
【问题讨论】:
-
我认为潜在收益与算法导致的额外开销相形见绌的风险很大。另一件事是,如果您没有大量的历史数据,几乎不可能根据历史预测未来的分配。收集此类数据也会增加分配的开销。恕我直言,你最好让操作系统/运行时处理这个。
-
您是在使用垃圾收集器,还是仅使用分配器?即您是否需要寻找空块,或者您是否通过“免费”方法知道它们是谁?
-
其实分析算法的额外开销可以在单独的线程上承担。它不需要影响实际分配。他们只需要记录请求的内容,然后使用当前的策略。
标签: c++ algorithm optimization memory parallel-processing