0

我编写了一个 C++ 代码,我必须在许多低配置计算机上运行。现在,我的电脑配置很高。我正在使用 Ubuntu 10.04 并且我对某些资源(即内存和虚拟内存)设置了硬限制。现在我的问题是:

1)如何设置缓存大小和缓存行大小的限制?2)我应该设置哪些其他限制来检查我的代码是否可以?

我正在使用命令:

ulimit -H -m 1000000
ulimit -H -v 500000
4

2 回答 2

3

您不能限制缓存大小,这是一个(大部分是透明的)硬件功能。

好消息是这无关紧要,因为你不能用完缓存——它只会溢出,你的程序运行得更慢。

如果您担心避免溢出,您可以进行调查valgrind --tool=cachegrind- 可能会检查目标硬件缓存上的可能行为。

于 2013-08-09T12:24:11.380 回答
1

要正确模拟在低端机器上的运行(尽管没有低缓存限制),您可以在虚拟机而不是机器的真实硬件中运行代码。这将向您展示在内存较小的机器上发生的情况,而不是限制 using ulimit,因为ulimit只是限制了您的应用程序将获得的内容。因此,它表明您的应用程序在运行一组特定的测试时不会耗尽内存。但它并没有显示当首先没有大量内存时应用程序和系统如何一起运行。

具有少量物理内存的机器在交换行为和文件系统缓存方面的行为会完全不同,仅提及“大内存,但应用程序受限”与“内存小”之间的一些变化第一名”。

我不确定 Ubuntu 是否带有任何类型的虚拟机设置,但例如 VirtualBox 很容易在任何 Linux/Windows 机器上配置和设置。只要您有足够现代的处理器来运行硬件虚拟化指令。

正如Useless 根本没有无用的陈述,缓存内存不会“用完”或以任何其他方式导致失败。它的运行速度会慢一点,但不会很大(对于任何给定的操作大约是 10 倍,但在大多数情况下,这将是大量其他指令的平均值,除非您真的在努力证明缓存的重要性,例如非常大的矩阵乘法)。

一个提示也可能是四处寻找一些旧硬件。通常有几年前的电脑出售,在“电脑回收店”或类似的地方几乎没有。设置这样的系统,安装您选择的操作系统,然后看看会发生什么。

于 2013-08-09T12:37:11.973 回答