我正在阅读一些关于模拟和性能建模的论文。某些图中的 Y 轴标记为“每个模拟日的秒数”。我不确定它的实际含义。它的范围从 0、20、40 到 120。
另一个标签是“每天模拟年数”。我猜这意味着模拟环境中的客户操作系统认为它已经过去了几年,而实际上它在现实世界中只过了一天?但是我想模拟应该会减慢执行速度,所以我想模拟环境内部经过了几个小时,而实际上它在现实世界中只经过了一天会更合理。
谢谢。
我正在阅读一些关于模拟和性能建模的论文。某些图中的 Y 轴标记为“每个模拟日的秒数”。我不确定它的实际含义。它的范围从 0、20、40 到 120。
另一个标签是“每天模拟年数”。我猜这意味着模拟环境中的客户操作系统认为它已经过去了几年,而实际上它在现实世界中只过了一天?但是我想模拟应该会减慢执行速度,所以我想模拟环境内部经过了几个小时,而实际上它在现实世界中只经过了一天会更合理。
谢谢。
在没有看到论文的情况下,我假设他们正在尝试比较在模拟中达到某个物理时间所需的 CPU 时间。
因此,“每个模拟日的秒数”很可能是在模拟中获得 24 小时所需的时间。
同样,“每天模拟年数”是模拟/现实生活日的物理时间。
当然,没有看到论文是不可能确定的。他们也可能正在查看 CPU-seconds 或 CPU-days,这将是 nCPUs*walltime。
模拟通常以离散时间单位运行,称为时间步长。如果您想在模拟中模拟跨越特定时间的特定过程,则必须执行一定数量的时间步长。如果时间步的长度是固定的,那么步数就是模拟时间除以时间步的长度。每个时间步的计算都需要一定的时间,模拟的总运行时间等于时间步数乘以执行一个时间步所需的时间:
(1) total_time = (simulation_time / timestep_length) * run_time_per_timestep
现在可以通过在左侧放置不同的参数来获得几个基准参数。例如,如果你修复simulation_time = 1 day
然后total_time
会给你总的模拟运行时间,即
(2) seconds_per_sim_day = (1 day / timestep_length) * run_time_per_timestep
较大的值seconds_per_sim_day
可能意味着:
run_time_per_timestep
太高 -> 计算算法应针对速度进行优化;另一方面,如果您求解(1)
并simulation_time
修复total_time = 1 day
,您将得到每天可以执行的时间步长乘以时间步长,或者每天计算可以达到的总模拟时间:
(3) simulation_time_per_day = (1 day / run_time_per_step) * timestep_length
现在可以观察到:
simulation_time_per_day
,即可以计算更长的模拟;simulation_time_per_day
会下降。通常,在决定购买某个计算中心的 CPU 时间时,可以使用这些数据。例如,您想模拟 100 年,然后将其除以每天的模拟年数,您就可以得到需要支付(或等待)多少计算天数。在这种情况下,较大的值simulation_time_per_day
肯定会使您受益。另一方面,如果您只有 10 天的计算时间可供您使用,那么您可以计算可以计算多长时间的模拟并做出一些决定,例如更短的模拟但具有许多不同的参数,而不是更少但更长的模拟您预测为最佳参数的一些参数。
在现实生活中,事情要复杂得多。通常计算每个时间步可能会花费不同的时间(尽管在某些情况下每个时间步所花费的时间与所有其他时间步完全相同)并且很大程度上取决于模拟大小、配置等。这就是存在标准化测试的原因通常会报告一些平均值。
总结一下:假设所有测试参数保持相等,
顺便说一句,这两个数量都是相互的,并且通过这个简单的方程相关:
simuation_years_per_day = 236,55 / seconds_per_simulation_day
(即“每天的模拟年数”等于 86400 除以“每个模拟日的秒数”/它为您提供每天的模拟天数/然后除以 365.25 将结果转换为年数)
因此,是否呈现“每天模拟年数”或“每天模拟秒数”并不重要。一个人只需要选择清楚地表明新系统比以前/旧/现有系统好多少的表示:)