运行 并行模拟(使用命令行)

Running parallel simulations (using the Command Line)

如何运行 模拟不同的配置?我正在使用 omnet++ 版本 4.6.

我的 omnetpp.ini 文件如下所示:

[General]

[Config Dcn2]

network = Dcn2

# leaf switch
#**.down_port = 2
**.up_port = 16 #12   # 4

# spine switch
**.port =  28 # 20 #2048

# crossconnect
**.cross_down_port = 28 # 20 #2048
**.cross_up_port = 28 # 20 #2048

# to set destination of packet
**.number_leaf_switch = 28 # 20 #2048

# link speed
#**.switch_switch_link_speed = 40 Mbps


**.interArrivalTime = ${exponential(.0001),exponential(0.0002),exponential(0.0003)}   

**.batch_length = 10
**.buffer_length = 10

sim-time-limit = 1000s

我想 运行 具有不同 interArrivalTime 值的代码。但是我既不能 运行 使用不同的配置(一个接一个),也不能 运行 个单独的 运行 在不同的内核上并行。

我已经尝试在 运行 配置中使用 cmdev 选项,但除了第一个之外,没有显示不同的 运行。当我尝试提及超过一个的进程数时,也只有第一个 运行 被模拟。实在是找不到原因。

配置考试

对于您的情况,您可以执行配置检查。 OMNeT++ 为此提供了不同的选项。它们在 OMNeT++ 手册的 Parameter Studies 部分进行了解释。

因此您可以尝试以下选项之一来检查您的配置,从而检查配置文件:

  • ./run –a - 将显示 omnet.ini
  • 中的所有配置
  • ./run -x <config_name> - 将提供有关特定配置的更多信息
  • ./run -x <config_name> -g - 查看配置的所有组合

首先,您必须导航到您的示例文件夹,然后执行上述命令之一。


我执行了:./run -x Dcn2 -g得到了如下结果

OMNeT++ Discrete Event Simulation  (C) 1992-2014 Andras Varga, OpenSim Ltd.
Version: 4.6, build: 141202-f785492, edition: Academic Public License -- NOT FOR COMMERCIAL USE
See the license for distribution terms and warranty disclaimer
Setting up Tkenv...

Config: Dcn2
Number of runs: 3
Run 0: [=10=]=exponential(.0001), $repetition=0
Run 1: [=10=]=exponential(0.0002), $repetition=0
Run 2: [=10=]=exponential(0.0003), $repetition=0

End.

这确实证实了您尝试修改的模拟参数有 3 个不同的 运行。但是,您用于 interArrivalTime 参数的变量名默认分配给 [=22=],因为您没有指定它。

如果您在配置中更改以下行:

**.interArrivalTime = ${exponential(.0001),exponential(0.0002),exponential(0.0003)}

**.interArrivalTime = ${interArrivalTime = exponential(0.0001),exponential(0.0002),exponential(0.0003)}

您将获得 ./run -x Dcn2 -g

的更具描述性的输出

运行 个不同的 运行 配置:

您的下一步是 运行 不同的 运行 配置。您可以通过导航到您的示例目录并执行:

./run -c <config-name> -r <run-number> -u Cmdenv

请注意,<config-name> 对您来说是 Dcn2-r 指定您想执行上面给出的 运行 中的哪一个。

换句话说,你可以打开三个终端 windows 并导航到你的示例目录并执行:

  1. ./run -c Dcn2 -r 0 -u Cmdenv - 对于 interArrivalTime = exponential(0.0001)
  2. ./run -c Dcn2 -r 1 -u Cmdenv - 对于 interArrivalTime = exponential(0.0002)
  3. ./run -c Dcn2 -r 2 -u Cmdenv - 对于 interArrivalTime = exponential(0.0003)

区分不同的 运行 结果

为了区分给定配置的不同 运行 的输出结果文件,您可以修改输出文件的默认名称。

"how-to" 在 OMNeT++ 手册的 12.2.3 结果文件名 部分给出。

output-vector-file = "${resultdir}/${configname}-${runnumber}.vec"
output-scalar-file = "${resultdir}/${configname}-${runnumber}.sca"

如您所见,默认情况下您的输出文件将由 ${runnumber} 变量区分。您可以通过将 interArrivalTime 添加到输出文件名来进一步改进它。

示例:

output-scalar-file = "${resultdir}/${configname}-${runnumber}-IAtime=${interArrivalTime}.sca/vec"

我还没有测试最终的方法。所以你可能会在路径上遇到一些错误。