运行 并行模拟(使用命令行)
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 并导航到你的示例目录并执行:
./run -c Dcn2 -r 0 -u Cmdenv
- 对于 interArrivalTime = exponential(0.0001)
./run -c Dcn2 -r 1 -u Cmdenv
- 对于 interArrivalTime = exponential(0.0002)
./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"
我还没有测试最终的方法。所以你可能会在路径上遇到一些错误。
如何运行 模拟不同的配置?我正在使用 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 并导航到你的示例目录并执行:
./run -c Dcn2 -r 0 -u Cmdenv
- 对于 interArrivalTime = exponential(0.0001)./run -c Dcn2 -r 1 -u Cmdenv
- 对于 interArrivalTime = exponential(0.0002)./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"
我还没有测试最终的方法。所以你可能会在路径上遇到一些错误。