GEM5 Garnet Standalone 命令行与stats.txt结果分析

简介

展示了不同的命令行与结果,作为初步的了解.

命令行

sim-cycles要大,不然没结果

./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py
–num-cpus=16
–num-dirs=16
–network=garnet
–topology=Mesh_XY
–mesh-rows=4
–sim-cycles=1000000 --inj-vnet=-1
–synthetic=uniform_random
–injectionrate=1
这里我们设为1000000.太小了可能收到的flit太少了.

–inj-vnet = -1 三个网络都传包

=-1时,有三个vnet的统计结果

源代码: src/mem/ruby/network/garnet/GarnetNetwork.cc

  m_flits_received
        .init(m_virtual_networks)
        .name(name() + ".flits_received")
        .flags(statistics::pdf | statistics::total | statistics::nozero |
            statistics::oneline)
        ;

    for (int i = 0; i < m_virtual_networks; i++) {
        m_flits_received.subname(i, csprintf("vnet-%i", i));
        m_flits_injected.subname(i, csprintf("vnet-%i", i));
        m_flit_network_latency.subname(i, csprintf("vnet-%i", i));
        m_flit_queueing_latency.subname(i, csprintf("vnet-%i", i));
    }

统计结果里就有三个包的结果
在这里插入图片描述

=0/1/2 时对应的网络

例如–inj-vnet=0
命令行如下.

./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py   \
        --num-cpus=16 \
        --num-dirs=16 \
        --network=garnet \
        --topology=Mesh_XY \
        --mesh-rows=4  \
        --sim-cycles=1000000  --inj-vnet=0 \
        --synthetic=uniform_random \
        --injectionrate=1

在这里插入图片描述
可以看出, 三列里只有第一列有值15897也是全部的 fltis数了,说明所有的flit都从vnet 0 走,也符合我们的命令行–inj-vnet=0 的设定.

然而, 下面的代码似乎并没有实现,这个分三列更像是 statistics::pdf的结果.

 m_flits_received.subname(i, csprintf("vnet-%i", i));

但是这个latency很大

在这里插入图片描述

stats flags

flags Descriptions
Stats::none Nothing extra to print.
Stats::total Print the total.
Stats::pdf Print the percent of the total that this entry represents.
Stats::cdf Print the cumulative percentage of total upto this entry.
Stats::dist Print the distribution.
Stats::nozero Don’t print if this is zero.
Stats::nonan Don’t print if this is NAN
Stats::oneline Print all values on a single line. Useful only for histograms.

减小注入率

官网给的参考配置 --injectionrate=0.01 太小了,10万个cycles数,发的包很少.

./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py   \
        --num-cpus=16 \
        --num-dirs=16 \
        --network=garnet \
        --topology=Mesh_XY \
        --mesh-rows=4  \
        --sim-cycles=1000000  --inj-vnet=0 \
        --synthetic=uniform_random \
        --injectionrate=0.01

比如我们看统计结果: 一共只有145个flit.

在这里插入图片描述
但是这个平均 delay还是很大:
在这里插入图片描述

原因
发现: clock不是1 tick而是1000,也就是一个cycle不是 1 ps 而是1ns, latency 5000多,意味着 就是5000 ps,也就是 5 ns,相当于5 cycles.

system.clk_domain.clock                          1000                       # Clock period in ticks (Tick)

参考的注入率和cycles

Fuzzy Flow Regulation for Network-on-Chip based
Chip Multiprocessors Systems 使用了 0.02 packet/cycle,注意,他还假设都是 1个packet =5 个flit,也就是 用vn2
在这里插入图片描述
他使用的设置如下:
uniform random
GEM5 Garnet Standalone 命令行与stats.txt结果分析_第1张图片
bit permutation traffic
GEM5 Garnet Standalone 命令行与stats.txt结果分析_第2张图片
总packets数大概是 2万个包.没有表或数字,但是有个图.

GEM5 Garnet Standalone 命令行与stats.txt结果分析_第3张图片

参考设置 小结

运行是10e6 的cycles,注入率从0.012 packet/flit慢慢增加, 2*10e4的packet数, 默认的delay是3个cycle queueing, 79的network delay.

你可能感兴趣的:(片上网络NoC,GEM5,gem5,计算机体系架构)