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 -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to