Hi guys,

I am desperate need of your help. I am trying to solve this problem for
last 2 days but could not solve it. I have two questions.

1) I sucessfully ran the "hello world" program on my simulation script
(with one processor), then I change the workload to run a queens benchmark
for 12x12, and it was also sucessfull. However, when I try to run the
dijkstra benchmark using exactly  same configuration script, I get the
Page Table fault( as given below.)

--------------------------------------
build/ARM/gem5.opt --stats-file=A7Freq1000MHz
configs/MyScripts/Stage0_PN.py --num_cpus=1 --Volts=1mV --Clocks=1000MHz
--I_Cache=32kB --D_Cache=32kB --TLB_Size=512kB
gem5 Simulator System.  http://gem5.org
gem5 is copyrighted software; use the --copyright option for details.

gem5 compiled Oct  1 2014 19:17:30
gem5 started Oct 20 2014 21:40:03
gem5 executing on naveed-desktop
command line: build/ARM/gem5.opt --stats-file=A7Freq1000MHz
configs/MyScripts/Stage0_PN.py --num_cpus=1 --Volts=1mV --Clocks=1000MHz
--I_Cache=32kB --D_Cache=32kB --TLB_Size=512kB
Global frequency set at 1000000000000 ticks per second
      0: system.cpu.isa: ISA system set to: 0 0xb892200
0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000
info: Entering event queue @ 0.  Starting simulation...
info: Increasing stack size by one page.
Usage: dijkstra <filename>
Only supports matrix size is #define'd.
panic: Page table fault when accessing virtual address 0
 @ tick 20109000
[invoke:build/ARM/sim/faults.cc, line 70]
Memory Usage: 199012 KBytes
Program aborted at tick 20109000
Aborted (core dumped)
------------------------------------------------


My second question is that how can I distribute the workload (e.g single
dijkstra exe) on dual core system? Does the following piece of code
distribute the workload (e.g single dijkstra program execution) on 2/more
processors ?

root.workload = LiveProcess(cmd= '-o Mibench/input.dat >
Mibench/output_small.dat', executable ='Mibench/dijkstra_small_obj')

for cpu in mycpu:
        cpu.workload=root.workload



I am pasting here the full content of my script file. Thanks you all in
advance.

------------------------------------------------
import optparse
import sys
import m5
from m5.defines import buildEnv
from m5.objects import *
from m5.util import addToPath, fatal
addToPath('../common')
from FSConfig import *
from SysPaths import *
from Benchmarks import *
import Simulation
import CacheConfig
import MemConfig
from Caches import *
import Options
from O3_ARM_v7a import *


parser = optparse.OptionParser()
parser.add_option("--num_cpus", type="int")#adding a new option for script
parser.add_option("--I_Cache",type="string")
parser.add_option("--D_Cache",type="string")
parser.add_option("--TLB_Size",type="string")
parser.add_option("--Volts",type="string")
parser.add_option("--Clocks",type="string")
Options.addCommonOptions(parser)
Options.addFSOptions(parser)
(options, args) = parser.parse_args()

np = options.num_cpus#reading number of processors input by user
#read Voltage domains
Volts= []
if options.Volts!= "":
       Volts = options.Volts.split(',')
#read clock domains
Clocks=[]
if options.Clocks!= "":
        Clocks= options.Clocks.split(',')
#read I Cache sizes
I_Cache=[]
if options.I_Cache!= "":
        I_Cache= options.I_Cache.split(',')
#read D Cache sizes
D_Cache=[]
if options.D_Cache!= "":
        D_Cache= options.D_Cache.split(',')
#read TLB sizes
TLB_Size=[]
if options.TLB_Size!= "":
        TLB_Size= options.TLB_Size.split(',')

#define voltage domains based on values entered by user
VoltageDomainList= [VoltageDomain(voltage =Volts[i]) for i in xrange(np)]
#define clock domains based on values entered by user
ClockDomainList=
[SrcClockDomain(clock=Clocks[i],voltage_domain=VoltageDomainList[i]) for i
in xrange(np)]

#define L1 Instruction Cache list
L1ICacheList=[O3_ARM_v7a_ICache(size=I_Cache[i]) for i in xrange(np)]
#define L1 Data Cache list
L1DCacheList=[O3_ARM_v7a_DCache(size=D_Cache[i]) for i in xrange(np)]


#define L2 TLB List
ArmTLBList=[O3_ARM_v7aWalkCache(size=TLB_Size[i]) for i in xrange(np)]

#define np number of cores
mycpu = [O3_ARM_v7a_3(cpu_id=i,clk_domain=ClockDomainList[i])  for i in
xrange(np)]

i=0;
for cpu in mycpu:# adding caches to each core
        
cpu.addTwoLevelCacheHierarchy(L1ICacheList[i],L1DCacheList[i],ArmTLBList[i])
        i=i+1
#Craete the system with simple memory
mysystem = System(
        cpu=mycpu,
        cache_line_size = options.cacheline_size,
        physmem = SimpleMemory(),
        membus = CoherentXBar(),
        mem_mode = 'timing'
                )

#connect slave port of membus with system port
mysystem.system_port=mysystem.membus.slave
#connect master port of membus with port of physical memory
mysystem.physmem.port=mysystem.membus.master


# create the interrupt controller
for cpu in mycpu:
        cpu.createInterruptController()
        cpu.connectAllPorts(mysystem.membus)

# Create a top-level voltage domain
mysystem.voltage_domain = VoltageDomain(voltage = options.sys_voltage)
# Create a source clock for the system and set the clock period
mysystem.clk_domain = SrcClockDomain(clock =
options.sys_clock,voltage_domain = mysystem.voltage_domain)


#declare the root
root = Root(full_system=False,system = mysystem)

#assign the work load to the system
#root.workload = LiveProcess(cmd= 'hello', executable
='/home/naveed/Desktop/gem5-dev/tests/test-progs/hello/bin/arm/linux/hello')
#root.workload = LiveProcess(cmd= '', executable
='/home/naveed/Desktop/gem5-dev/queens12_obj')
root.workload = LiveProcess(cmd= '-o Mibench/input.dat >
Mibench/output_small.dat', executable ='Mibench/dijkstra_small_obj')

for cpu in mycpu:
        cpu.workload=root.workload


# instantiate configuration
m5.instantiate()

exit_event = m5.simulate()
print 'Exiting @ tick', m5.curTick(), 'because', exit_event.getCause()
------------------------------------------------


Naveed Ul Mustafa

_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to