如何根据先前的行为预测系统的行为
Posted
技术标签:
【中文标题】如何根据先前的行为预测系统的行为【英文标题】:How to predict the behavior of a system based on previous behavior 【发布时间】:2009-09-20 08:37:10 【问题描述】:我正在寻找一种算法,该算法基于系统先前的行为来预测未来的行为。
我正在构建一个并行内存分配器,它有一个公共的空块列表。每个线程都可以在需要时从该列表中获取块并从中分配。根据分配大小(8、12、16 字节...到大约 4 KB),这些块被分组到 bin 中。当一个块变空时,它会返回到全局列表(当然会有同步开销)。如果一个 bin 中没有空块,它会尝试从其他 bin 中的块中“窃取”位置,然后再获得一个新的空块。
现在有两种情况让我担心:
-
线程可能分配占用 5 个块的内存。一段时间后,它会释放所有这些内存(并且块会进入全局列表)。紧接着,它再次分配 5 个块,释放它们,依此类推。在这种情况下,明智的做法是始终保留这 5 个块并且不要将它们返回到全局列表,因为这样可以避免同步开销。
如果分配器“窃取”一个位置,它会使用否则会被浪费的内存。但在某些情况下,这会增加内存使用量。
我想制作一个可以观察这种模式的系统,并将结果保存在某个地方,以便下次分配器知道什么是明智的,什么是不明智的(在 bin X 中至少保留 N 个块,不要't 从 bin Y 中“窃取”)。
遗传算法有用吗?我对他们一无所知,但我听说他们擅长机器学习或类似的东西。
提前致谢!
【问题讨论】:
我认为潜在收益与算法导致的额外开销相形见绌的风险很大。另一件事是,如果您没有大量的历史数据,几乎不可能根据历史预测未来的分配。收集此类数据也会增加分配的开销。恕我直言,你最好让操作系统/运行时处理这个。 您是在使用垃圾收集器,还是仅使用分配器?即您是否需要寻找空块,或者您是否通过“免费”方法知道它们是谁? 其实分析算法的额外开销可以在单独的线程上承担。它不需要影响实际分配。他们只需要记录请求的内容,然后使用当前的策略。 【参考方案1】:关于正确实现内存管理器的文章很多。这些文章中的大多数都提供了时间测量,说明了花费了哪些时间以及原因。所以我建议你看看这个领域已经做了什么。有不少有趣的想法,其中很多都运作良好,并且具有明智而有趣的概念。
虽然机器学习技术学习和了解都很有趣,但我怀疑它们在现实生活中不会产生好的结果。原因是他们需要大量开销才能工作。 我更相信更接近现代缓存工作方式的方法——最近最少使用的方法的不同变体。
因此,在您的示例中,我将执行以下操作:
使用不同大小的“缓存”,并使用它。这意味着保存一个不会返回到系统并用于“重用”的最小大小。 可以动态确定缓存大小:检查为此线程分配和取消分配新内存的频率。如果脱粒过于频繁(通常可能是时间参数),则缓存大小会增加。 关于窃取:缓存大小可以是不可窃取的,解决缓存和脱粒问题。这种方法的主要缺点是内存开销。如果减少缓存大小,也可以减少它(因为在您的情况下这是一种权衡)。
【讨论】:
【参考方案2】:我相信artificial neural networks 比遗传算法更适合您的任务。
查看这些 SO 问题:
When to use Genetic Algorithms and when to use Neural Networks? What are some good resources for learning about Neural Networks?【讨论】:
机器学习人员告诉您,机器学习仅在学习引擎“几乎”知道答案时才有效。神经网络确实有效,但通常在对问题一无所知的情况下被提议为灵丹妙药,这违反了 ML 公理。如果你不知道该怎么做,神经网络不是答案。 @Ira Baxter,Igratian 询问使用遗传算法,我说人工神经网络更合适。如果你训练 ANN,它们可以用于可以观察到类似模式的情况。也许在这个问题中,Igratian 可以找到比人工神经网络更好、更优雅的算法。我同意人工神经网络不是万能的解决方案。【参考方案3】:也许您应该尝试计算特定线程的特定大小的块的分配和释放次数,例如每秒。如果计数器很高并且分配数量与释放数量大致相同,您可以尝试在下一秒忽略该数量的释放。
【讨论】:
【参考方案4】:如果您要获得大小为 2、4、8、16 等的空闲块,那么您的线程还应请求大小为 2、4、8、16 等的内存。请求任何您需要的四舍五入到最接近的二的幂。
【讨论】:
模式 8,12,16,24,32,48,64,96, ... 也有意义。 是的,但是无论分配方案是什么,它们都应该是同步的。以上是关于如何根据先前的行为预测系统的行为的主要内容,如果未能解决你的问题,请参考以下文章
Excel项目实战-根据父母的购买行为来预测儿童的年龄,或者根据孩子的信息(年龄,性别等)来预测用户会购买哪种商品。
Excel项目实战-根据父母的购买行为来预测儿童的年龄,或者根据孩子的信息(年龄,性别等)来预测用户会购买哪种商品。