Hello
I am trying to model a system such as
1) Initially there are two clusters, [big, little]
a. Have studied fs_bigLITTLE.py to see how the different clusters are
generated.
2) Make use of CHI
3) Run the system in SE mode.
The command I am planning to use is the following (using HelloWorld to
pipeflush initially)
./build/ARM/gem5.opt configs/example/se.py -ruby --topology=Pt2Pt
--cpu-type=DerivO3CPU --num-cpus=2 --num-dirs=1 --num-l3caches=1
--cmd=tests/test-progs/hello/bin/arm/linux/hello
So I started making modifications in CHI.py.
High level the plan being
1) Generate RNF_Big for the number of cpus and the type of CPU in the big
cluster.
2) Then add a private L2$ for each RNF in RNF_Big (intent originally being
to have private L2$ for each RNF. Change this late to have shared L2$)
3) Repeat (1) and (2) for the Little cluster (ie Generate RNF_Little)
The code snippet being:
######################################
## Map each BigCluster CPU into an
## RNF
######################################
for i in range(options.num_cpus_bigclust):
ruby_system.rnf_big = [ CHI_RNF([cpu], ruby_system, L1ICache, L1DCache,
system.cache_line_size.value)
for cpu in options.cpu_type_bigclust ]
# Now add a private L2 cache for each RNF in BigCluster
for rnf_big in ruby_system.rnf_big:
rnf_big.addPrivL2Cache(L2Cache)
#########################################
## Map each LittleCluster CPU into an
## RNF
#########################################
for i in range(options.num_cpus_littleclust):
ruby_system.rnf_little = [ CHI_RNF([cpu], ruby_system, L1ICache,
L1DCache,
system.cache_line_size.value)
for cpu in options.cpu_type_littleclust ]
# Now add a private L2 cache for each RNF in LittleCluster
for rnf_little in ruby_system.rnf_little:
rnf_little.addPrivL2Cache(L2Cache)
Next I want to map
1) ruby_system.rnf_big ==> ruby_system.rnf_bigCluster
2) ruby_system.rnf_little ==> ruby_system.rnf_littleCluster.
So from looking in fs_bigLITTLE.py, I have added the following class inside
create_system() of CHI.py for BigCluster:
## Define the class for BigCluster and LittleCluster
## Extracted from fs_bigLITTLE.py
#
# BigCluster class
class BigCluster(devices.CpuCluster):
# This defines the constructor function for the BigCluster class.
def __init__(self, system, num_cpus, cpu_clock, cpu_voltage="1.0V"):
# Dont understand what cpu_config is doing ???
cpu_config = [ ObjectList.cpu_list.get("DerivO3CPU"),
devices.L1I, devices.L1D, devices.WalkCache, devices.L2 ]
# super() allows access to the __init__() (constructor) of the base
class
# namely devices.CpuCluster class.
super(BigCluster, self).__init__(system, num_cpus, cpu_clock,
cpu_voltage, *cpu_config)
And then to instantiate the BigCluster, the tentative code being:
##############################################
## Generate Big Cluster
##############################################
if options.num_cpus_bigclust > 0:
## Call to BigCluster() class
ruby_system.bigCluster = BigCluster(ruby_system,
options.num_cpu_bigclust,
options.big_cpu_clock)
ruby_system.mem_mode = ruby_system.bigCluster.memoryMode()
else:
m5.fatal("Number of CPUs in Big Cluster is Zero.")
Pretty certain this is not going to work. But I don't know how to solve this.
For the class BigCluster(), I would like to pass the following for cpu_config:
cpu_config = [ruby_system.rnf_big, ## this is the actual cpu being used in
the RNF for the big cluster
None, ## L1I$ has
already been define
None, ## L1D$ has
already been defined
devices.WalkCache,
None) ## L2$ has
already been defined.
Any thought/pointers as how to get the above resolved will be much appreciated.
Best regards
JO
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s