[m5-users] Using M5 for simulating SMT/CMP hybrid architectures
Hi, As a part of my course project, my group is trying to study the SMT/CMP hybrid architectures and study their performance. As a part of the project we need to vary the parameters like number of cores and number of threads supported for each core and run simulations. As per my understanding, such configurations can be defined using M5, but I am confused as to how to run the simulations and what benchmarks to use. I am new to the M5 simulator and I trying to figure out the best way to work on my project. The spec cpu benchmarks have lincense issues and currently I donot have access to them. So I wanted to try the SPLASH benchmark suite. Can some one help me understand how I can run these simulations using SPLASH benchmarks (if it is possible). It looks like the current binaries for splash benchmarks on the M5 website work only in ALPHA SE mode and they donot work with SMT cores. If I try to work in ALPHA FS mode, will I be able to simulate SMT/CMP architecture workloads. If some one has already done these kind of simulations, your suggestions would be very useful. I am trying to run the simulations on MacOs Leopard, will I be able to use linux-dist to build my libraries properly. Thank you, Sahithi ___ m5-users mailing list m5-users@m5sim.org http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
Re: [m5-users] Using M5 for simulating SMT/CMP hybrid architectures
Hi Steve, I donot know how to associate the same workload object to multiple thread contexts. Can you please tell me how to do this? Thanks, Sahithi On Mon, May 5, 2008 at 12:04 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: I just looked at your script briefly, but it looks like you're only configuring the workload to use a single thread context on the SMT CPU. For multithreaded workloads like SPLASH, you have to associate the same workload object with multiple thread contexts (whether they're SMT CPU contexts or on separate CPUs) so that when the application creates new threads there is somewhere to run them. The error you're getting indicates that the application is creating a new thread but has nowhere to run it. Steve On Mon, May 5, 2008 at 8:57 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi Steve, I modified the run.py to deal with the SMT part and when I run the script it aborts. Here is the error: M5 compiled Apr 26 2008 10:12:48 M5 started Mon May 5 10:51:52 2008 M5 executing on sunshyin.local command line: /Users/Sunshyin/m5/build/ALPHA_SE/m5.debug sahi.py -d -n2 -cFFT:Radix Global frequency set at 1 ticks per second 0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000 0: system.remote_gdb.listener: listening for remote gdb #1 on port 7001 0: system.remote_gdb.listener: listening for remote gdb #2 on port 7002 0: system.remote_gdb.listener: listening for remote gdb #3 on port 7003 warn: Entering event queue @ 0. Starting simulation... warn: Increasing stack size by one page. warn: Increasing stack size by one page. warn: ignoring syscall sigprocmask(3, 18446744073709551615, ...) warn: ignoring syscall sigprocmask(3, 18446744073709551615, ...) warn: ignoring syscall sigprocmask(3, 0, ...) warn: ignoring syscall sigaction(8, 4831387552, ...) warn: ignoring syscall sigaction(11, 4831387552, ...) warn: ignoring syscall sigaction(10, 4831387552, ...) warn: ignoring syscall sigaction(4, 4831387552, ...) warn: ignoring syscall sigaction(7, 4831387552, ...) warn: ignoring syscall sigaction(6, 4831387552, ...) warn: ignoring syscall sigaction(12, 4831387552, ...) warn: ignoring syscall sigaction(5, 4831387552, ...) warn: ignoring syscall sigaction(13, 4831387552, ...) warn: ignoring syscall sigprocmask(3, 0, ...) warn: ignoring syscall sigaction(8, 4831387552, ...) warn: ignoring syscall sigaction(11, 4831387552, ...) warn: ignoring syscall sigaction(10, 4831387552, ...) warn: ignoring syscall sigaction(4, 4831387552, ...) warn: ignoring syscall sigaction(7, 4831387552, ...) warn: ignoring syscall sigaction(6, 4831387552, ...) warn: ignoring syscall sigaction(12, 4831387552, ...) warn: ignoring syscall sigaction(5, 4831387552, ...) warn: ignoring syscall sigaction(13, 4831387552, ...) nxm_thread_create: no idle contexts available. Program aborted at cycle 163629500 Abort trap Do you know why this is happening? I am attaching the config file with this email. Thanks, Sahithi On Sat, May 3, 2008 at 8:59 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: As far as I know, SPLASH benchmarks should work fine with SMT. (Someone speak up if they know otherwise.) You'd have to modify the configs/splash2/run.py script to deal with that though. I haven't done this before, so I can't provide any general directions, but if you have more specific questions we can try and answer those. Steve On Sat, May 3, 2008 at 9:04 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi, As a part of my course project, my group is trying to study the SMT/CMP hybrid architectures and study their performance. As a part of the project we need to vary the parameters like number of cores and number of threads supported for each core and run simulations. As per my understanding, such configurations can be defined using M5, but I am confused as to how to run the simulations and what benchmarks to use. I am new to the M5 simulator and I trying to figure out the best way to work on my project. The spec cpu benchmarks have lincense issues and currently I donot have access to them. So I wanted to try the SPLASH benchmark suite. Can some one help me understand how I can run these simulations using SPLASH benchmarks (if it is possible). It looks like the current binaries for splash benchmarks on the M5 website work only in ALPHA SE mode and they donot work with SMT cores. If I try to work in ALPHA FS mode, will I be able to simulate SMT/CMP architecture workloads. If some one has already done these kind of simulations, your suggestions would be very useful. I am trying to run the simulations on MacOs Leopard, will I be able to use linux-dist to build my libraries properly. Thank you, Sahithi
Re: [m5-users] Using M5 for simulating SMT/CMP hybrid architectures
Hi Steve, I really appreciate you quick response. I want to understand what you explained in you earlier mail clearly...so that I get it right: I think I have done the same thing you explained in my earlier script... I am assigning workload for each thread here. I create a thread for each workload. elif options.detailed: cpus = [DerivO3CPU(cpu_id = i, clock=options.frequency) for i in xrange(options.numcpus)] if options.cmd: #check for SMT workload commands = options.cmd.split(':') process = [] for cmmd in commands: if cmmd == 'Cholesky': smt_process = Cholesky() elif cmmd == 'FFT': smt_process = FFT() elif cmmd == 'LUContig': smt_process = LU_contig() elif cmmd == 'LUNoncontig': smt_process = LU_noncontig() elif cmmd == 'Radix': smt_process = Radix() elif cmmd == 'Barnes': smt_process = Barnes() elif cmmd == 'FMM': smt_process = FMM() elif cmmd == 'OceanContig': smt_process = Ocean_contig() elif cmmd == 'OceanNoncontig': smt_process = Ocean_noncontig() elif cmmd == 'Raytrace': smt_process = Raytrace() elif cmmd == 'WaterNSquared': smt_process = Water_nsquared() elif cmmd == 'WaterSpatial': smt_process = Water_spatial() else: print sys.stderr, The --cmd environment variable was set to something improper. Use Cholesky, FFT, LUContig, LUNoncontig, Radix, Barnes, FMM, OceanContig, OceanNoncontig, Raytrace, WaterNSquared, or WaterSpatial sys.exit(1) process += [smt_process, ] After this I assign the workload to the CPU's root = Root(system = system) root.workload = process for cpu in cpus: cpu.workload = root.workload Say if I want to run two bench marks(FFT,Radix) on 2 two-way SMT CPU's: Command line: m5.debug sahi.py -d -n2 -cFFT:Radix wont my code assign them in the following way: CPU0.thread1 = FFT CPU0.thread2 = Radix CPU1.thread1 = FFT CPU2.thread2 = Radix Why is it giving me an error then? Thanks, Sahithi On Mon, May 5, 2008 at 12:40 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: You just set the workload for each thread to point to the same workload object. Note that in an SMT machine the CPU takes a list of workloads, one for each thread context. So to run a two-thread copy of FFT on a two-way SMT CPU you'd do something like: bm = FFT() cpu.workload = [bm, bm] If you want to rn a four-thread copy of FFT on two two-way SMT CPUs: cpu0.workload = [bm, bm] cpu1.workload = [bm, bm] Note that you have to make sure the workload object is created with the right command-line parameters to use the proper number of threads. Steve On Mon, May 5, 2008 at 10:17 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi Steve, I donot know how to associate the same workload object to multiple thread contexts. Can you please tell me how to do this? Thanks, Sahithi On Mon, May 5, 2008 at 12:04 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: I just looked at your script briefly, but it looks like you're only configuring the workload to use a single thread context on the SMT CPU. For multithreaded workloads like SPLASH, you have to associate the same workload object with multiple thread contexts (whether they're SMT CPU contexts or on separate CPUs) so that when the application creates new threads there is somewhere to run them. The error you're getting indicates that the application is creating a new thread but has nowhere to run it. Steve On Mon, May 5, 2008 at 8:57 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi Steve, I modified the run.py to deal with the SMT part and when I run the script it aborts. Here is the error: M5 compiled Apr 26 2008 10:12:48 M5 started Mon May 5 10:51:52 2008 M5 executing on sunshyin.local command line: /Users/Sunshyin/m5/build/ALPHA_SE/m5.debug sahi.py -d -n2 -cFFT:Radix Global frequency set at 1 ticks per second 0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000 0: system.remote_gdb.listener: listening for remote gdb #1 on port 7001 0: system.remote_gdb.listener: listening for remote gdb #2 on port 7002 0: system.remote_gdb.listener: listening for remote gdb #3 on port 7003 warn: Entering event queue @ 0. Starting simulation... warn: Increasing stack size by one page. warn: Increasing stack size by one
Re: [m5-users] Using M5 for simulating SMT/CMP hybrid architectures
Hi Steve, I am really stuck at this point...I get all sorts of assertion failed mesgs. I changed my script to run with only one benchmark, like you explained in the earlier email. It is not working. Can you please tell me what process parameters are being overwritten? I have a few questions: 1. When i check the config.ini file created, the numThreads and smtNumFetchingThreads is set to 1 for the CPU's. What does this mean? 2. If I want to run splash benchmark FFT 4 way on 2 two way SMT machines, can I set my workload as FFT -p4 input fie and make all threads point to this workload. Thank you, Sahithi On 5/6/08, Steve Reinhardt [EMAIL PROTECTED] wrote: If you're still using the script you sent out before, there's a chunk of code in there that overwrites the process variable that's probably causing you trouble. Steve On Mon, May 5, 2008 at 10:58 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi Steve, I really appreciate you quick response. I want to understand what you explained in you earlier mail clearly...so that I get it right: I think I have done the same thing you explained in my earlier script... I am assigning workload for each thread here. I create a thread for each workload. elif options.detailed: cpus = [DerivO3CPU(cpu_id = i, clock=options.frequency) for i in xrange(options.numcpus)] if options.cmd: #check for SMT workload commands = options.cmd.split(':') process = [] for cmmd in commands: if cmmd == 'Cholesky': smt_process = Cholesky() elif cmmd == 'FFT': smt_process = FFT() elif cmmd == 'LUContig': smt_process = LU_contig() elif cmmd == 'LUNoncontig': smt_process = LU_noncontig() elif cmmd == 'Radix': smt_process = Radix() elif cmmd == 'Barnes': smt_process = Barnes() elif cmmd == 'FMM': smt_process = FMM() elif cmmd == 'OceanContig': smt_process = Ocean_contig() elif cmmd == 'OceanNoncontig': smt_process = Ocean_noncontig() elif cmmd == 'Raytrace': smt_process = Raytrace() elif cmmd == 'WaterNSquared': smt_process = Water_nsquared() elif cmmd == 'WaterSpatial': smt_process = Water_spatial() else: print sys.stderr, The --cmd environment variable was set to something improper. Use Cholesky, FFT, LUContig, LUNoncontig, Radix, Barnes, FMM, OceanContig, OceanNoncontig, Raytrace, WaterNSquared, or WaterSpatial sys.exit(1) process += [smt_process, ] After this I assign the workload to the CPU's root = Root(system = system) root.workload = process for cpu in cpus: cpu.workload = root.workload Say if I want to run two bench marks(FFT,Radix) on 2 two-way SMT CPU's: Command line: m5.debug sahi.py -d -n2 -cFFT:Radix wont my code assign them in the following way: CPU0.thread1 = FFT CPU0.thread2 = Radix CPU1.thread1 = FFT CPU2.thread2 = Radix Why is it giving me an error then? Thanks, Sahithi On Mon, May 5, 2008 at 12:40 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: You just set the workload for each thread to point to the same workload object. Note that in an SMT machine the CPU takes a list of workloads, one for each thread context. So to run a two-thread copy of FFT on a two-way SMT CPU you'd do something like: bm = FFT() cpu.workload = [bm, bm] If you want to rn a four-thread copy of FFT on two two-way SMT CPUs: cpu0.workload = [bm, bm] cpu1.workload = [bm, bm] Note that you have to make sure the workload object is created with the right command-line parameters to use the proper number of threads. Steve On Mon, May 5, 2008 at 10:17 AM, sahithi krishna [EMAIL PROTECTED] wrote: Hi Steve, I donot know how to associate the same workload object to multiple thread contexts. Can you please tell me how to do this? Thanks, Sahithi On Mon, May 5, 2008 at 12:04 PM, Steve Reinhardt [EMAIL PROTECTED] wrote: I just looked at your script briefly, but it looks like you're only configuring the workload to use a single thread context on the SMT CPU. For multithreaded workloads like SPLASH, you have to associate the same workload object with multiple thread contexts (whether they're SMT CPU contexts or on separate CPUs) so that when
[m5-users] Assertion Failed error
Does anyone have an idea why I am getting this error? I am trying to run the FFT splash benchmark on 2 CPU with 2-way SMT. I am attaching my config file with this email. Any suggestions are welcome...I am really desperate now. Thanks, Sahithi Error: M5 Simulator System Copyright (c) 2001-2008 The Regents of The University of Michigan All Rights Reserved M5 compiled May 6 2008 10:06:06 M5 started Tue May 6 14:01:45 2008 M5 executing on sunshyin.local command line: /Users/Sunshyin/m5/build/ALPHA_SE/m5.debug ../smt.py Global frequency set at 1 ticks per second 0: system.remote_gdb.listener: listening for remote gdb #0 on port 7000 0: system.remote_gdb.listener: listening for remote gdb #1 on port 7001 0: system.remote_gdb.listener: listening for remote gdb #2 on port 7002 0: system.remote_gdb.listener: listening for remote gdb #3 on port 7003 warn: Entering event queue @ 0. Starting simulation... Assertion failed: (insts[i].empty()), function sortInsts, file build/ALPHA_SE/cpu/o3/decode_impl.hh, line 452. Program aborted at cycle 1500 Abort trap Thanks, Sahithi smt.py Description: Binary data ___ m5-users mailing list m5-users@m5sim.org http://m5sim.org/cgi-bin/mailman/listinfo/m5-users