If you just set the number of physical registers to 160 you will get a deadlock because you're making it possible for the number of instructions in flight to be greater than the number of registers available and you're rename table is filling up.
0: system.cpu.rename: [tid:0]: *Stall: RenameMap has 0 free entries.* I.e., arch regs + ROB > 160. You'd need to decrease the ROB and/or the number of arch regs as well. Anthony Gutierrez http://web.eecs.umich.edu/~atgutier On Wed, Jul 2, 2014 at 11:20 AM, Amin Farmahini via gem5-dev < [email protected]> wrote: > Any comments on this? > > Amin > > > On Mon, Jun 30, 2014 at 6:14 PM, Amin Farmahini <[email protected]> wrote: > > > Thanks Ali for the response. That makes sense. > > > > However, I faced another issue that is weird. If I set *numPhysFloatRegs* > > to 160, I don't get any assertion error, but the simulation does not > > progress. I looked into this and I realized that this is because of lack > of > > free physical registers. Even in the *very first cycle of simulation > > (tick 0)*, there are no free registers left. See the trace below: > > 0: system.cpu.rename: Processing [tid:0] > > 0: system.cpu.rename: [tid:0]: Free IQ: 32, Free ROB: 40, Free LQ: > > 16, Free SQ: 16 > > 0: system.cpu.rename: [tid:0]: 0 instructions not yet in ROB > > 0: system.cpu.rename: calcFreeLQEntries: free lqEntries: 16, > > loadsInProgress: 0, loads dispatchedToLQ: 0 > > 0: system.cpu.rename: [tid:0]: *Stall: RenameMap has 0 free > > entries.* > > 0: system.cpu.rename: [tid:0]: Blocking. > > > > I tried this experiment on a clean up-to-date gem5 with no patches > > applied. The only change I made was setting numPhysFloatRegs to 160. And > I > > faced the same issue. > > build/ARM/gem5.debug --debug-flags=Rename configs/example/se.py -c > > hello_test --caches --l2cache --cpu-clock=2GHz --cpu-type=arm_detailed > > > > To me, this is a potential bug. > > > > Thanks, > > Amin > > > > > > > > On Mon, Jun 30, 2014 at 3:51 PM, Ali Saidi <[email protected]> wrote: > > > >> This is an automatically generated e-mail. To reply, visit: > >> http://reviews.gem5.org/r/2141/ > >> > >> On June 30th, 2014, 8:34 p.m. UTC, *Amin Farmahini* wrote: > >> > >> After applying this patch, the minimum number of float regs should be > 160, even for ARMv7 ISA. If you set the number of numPhysFloatRegs to lower > than 160, you get an assertion error from cpu/o3/cpu.cc: > >> assert(params->numPhysFloatRegs >= numThreads * TheISA::NumFloatRegs); > >> > >> The reason is that this patch sets the number of NumFloatRegs based on > v8 and does not differentiate between v7 and v8 ISAs. See > src/arch/arm/registers.hh: > >> -const int NumFloatArchRegs = 64; > >> -const int NumFloatSpecialRegs = 8; > >> +const int NumFloatV7ArchRegs = 64; > >> +const int NumFloatV8ArchRegs = 128; > >> +const int NumFloatSpecialRegs = 32; > >> > >> -const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs; > >> +const int NumFloatRegs = NumFloatV8ArchRegs + NumFloatSpecialRegs; > >> > >> I think this patch should not change the required number of float regs > for ARMv7. Am I missing something? > >> > >> Unfortunately, we need to have a big enough register file for all the > FP registers and it's not really possible to differentiate. Long term gem5 > will support ARMv8 (32 and 64 bit) only and be backwards compatible for > running 32-bit code (pretty much the state it's in now), but it's pretty > impossible to properly support to architecture versions simultaneously. > >> > >> > >> - Ali > >> > >> On January 8th, 2014, 8:11 p.m. UTC, Ali Saidi wrote: > >> Review request for Default. > >> By Ali Saidi. > >> > >> *Updated Jan. 8, 2014, 8:11 p.m.* > >> *Repository: * gem5 > >> Description > >> > >> Changeset 10032:5ac3782d2665 > >> --------------------------- > >> arm: Add support for ARMv8 (AArch64 & AArch32) > >> > >> Note: AArch64 and AArch32 interworking is not supported. If you use an > AArch64 > >> kernel you are restricted to AArch64 user-mode binaries. This will be > addressed > >> in a later patch. > >> > >> Note: Virtualization is only supported in AArch32 mode. This will also > be fixed > >> in a later patch. > >> > >> Testing > >> > >> Existing regression tests run correctly with expected changes. > >> > >> AArch64 SE binaries run on SimpleAtomic, SimpleTiming, and O3 CPU models > >> AArch64 Linux boots on SimpleAtomic, SimpleTiming and O3 models with > 1-4 cores > >> > >> Diffs > >> > >> - configs/common/FSConfig.py (81d7551dd3be) > >> - configs/common/O3_ARM_v7a.py (81d7551dd3be) > >> - configs/common/Options.py (81d7551dd3be) > >> - configs/common/cpu2000.py (81d7551dd3be) > >> - configs/example/fs.py (81d7551dd3be) > >> - configs/example/se.py (81d7551dd3be) > >> - ext/libelf/elf_common.h (81d7551dd3be) > >> - src/arch/arm/ArmISA.py (81d7551dd3be) > >> - src/arch/arm/ArmSystem.py (81d7551dd3be) > >> - src/arch/arm/ArmTLB.py (81d7551dd3be) > >> - src/arch/arm/SConscript (81d7551dd3be) > >> - src/arch/arm/decoder.hh (81d7551dd3be) > >> - src/arch/arm/decoder.cc (81d7551dd3be) > >> - src/arch/arm/faults.hh (81d7551dd3be) > >> - src/arch/arm/faults.cc (81d7551dd3be) > >> - src/arch/arm/insts/branch64.hh (PRE-CREATION) > >> - src/arch/arm/insts/branch64.cc (PRE-CREATION) > >> - src/arch/arm/insts/data64.hh (PRE-CREATION) > >> - src/arch/arm/insts/data64.cc (PRE-CREATION) > >> - src/arch/arm/insts/fplib.hh (PRE-CREATION) > >> - src/arch/arm/insts/fplib.cc (PRE-CREATION) > >> - src/arch/arm/insts/macromem.hh (81d7551dd3be) > >> - src/arch/arm/insts/macromem.cc (81d7551dd3be) > >> - src/arch/arm/insts/mem.cc (81d7551dd3be) > >> - src/arch/arm/insts/mem64.hh (PRE-CREATION) > >> - src/arch/arm/insts/mem64.cc (PRE-CREATION) > >> - src/arch/arm/insts/misc.hh (81d7551dd3be) > >> - src/arch/arm/insts/misc.cc (81d7551dd3be) > >> - src/arch/arm/insts/misc64.hh (PRE-CREATION) > >> - src/arch/arm/insts/misc64.cc (PRE-CREATION) > >> - src/arch/arm/insts/neon64_mem.hh (PRE-CREATION) > >> - src/arch/arm/insts/pred_inst.hh (81d7551dd3be) > >> - src/arch/arm/insts/static_inst.hh (81d7551dd3be) > >> - src/arch/arm/insts/static_inst.cc (81d7551dd3be) > >> - src/arch/arm/insts/vfp.hh (81d7551dd3be) > >> - src/arch/arm/insts/vfp.cc (81d7551dd3be) > >> - src/arch/arm/interrupts.hh (81d7551dd3be) > >> - src/arch/arm/interrupts.cc (81d7551dd3be) > >> - src/arch/arm/intregs.hh (81d7551dd3be) > >> - src/arch/arm/isa.hh (81d7551dd3be) > >> - src/arch/arm/isa.cc (81d7551dd3be) > >> - src/arch/arm/isa/bitfields.isa (81d7551dd3be) > >> - src/arch/arm/isa/decoder/aarch64.isa (PRE-CREATION) > >> - src/arch/arm/isa/decoder/arm.isa (81d7551dd3be) > >> - src/arch/arm/isa/decoder/decoder.isa (81d7551dd3be) > >> - src/arch/arm/isa/decoder/thumb.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/aarch64.isa (PRE-CREATION) > >> - src/arch/arm/isa/formats/branch.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/formats.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/fp.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/mem.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/misc.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/neon64.isa (PRE-CREATION) > >> - src/arch/arm/isa/formats/uncond.isa (81d7551dd3be) > >> - src/arch/arm/isa/formats/unimp.isa (81d7551dd3be) > >> - src/arch/arm/isa/includes.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/aarch64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/branch.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/branch64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/data.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/data64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/div.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/fp.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/fp64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/insts.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/ldr.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/ldr64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/m5ops.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/macromem.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/mem.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/misc.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/misc64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/neon.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/neon64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/neon64_mem.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/str.isa (81d7551dd3be) > >> - src/arch/arm/isa/insts/str64.isa (PRE-CREATION) > >> - src/arch/arm/isa/insts/swap.isa (81d7551dd3be) > >> - src/arch/arm/isa/operands.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/basic.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/branch64.isa (PRE-CREATION) > >> - src/arch/arm/isa/templates/data64.isa (PRE-CREATION) > >> - src/arch/arm/isa/templates/macromem.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/mem.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/mem64.isa (PRE-CREATION) > >> - src/arch/arm/isa/templates/misc.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/misc64.isa (PRE-CREATION) > >> - src/arch/arm/isa/templates/neon.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/neon64.isa (PRE-CREATION) > >> - src/arch/arm/isa/templates/templates.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/vfp.isa (81d7551dd3be) > >> - src/arch/arm/isa/templates/vfp64.isa (PRE-CREATION) > >> - src/arch/arm/isa_traits.hh (81d7551dd3be) > >> - src/arch/arm/linux/linux.hh (81d7551dd3be) > >> - src/arch/arm/linux/linux.cc (81d7551dd3be) > >> - src/arch/arm/linux/process.hh (81d7551dd3be) > >> - src/arch/arm/linux/process.cc (81d7551dd3be) > >> - src/arch/arm/linux/system.hh (81d7551dd3be) > >> - src/arch/arm/linux/system.cc (81d7551dd3be) > >> - src/arch/arm/locked_mem.hh (81d7551dd3be) > >> - src/arch/arm/miscregs.hh (81d7551dd3be) > >> - src/arch/arm/miscregs.cc (81d7551dd3be) > >> - src/arch/arm/nativetrace.cc (81d7551dd3be) > >> - src/arch/arm/pagetable.hh (81d7551dd3be) > >> - src/arch/arm/process.hh (81d7551dd3be) > >> - src/arch/arm/process.cc (81d7551dd3be) > >> - src/arch/arm/registers.hh (81d7551dd3be) > >> - src/arch/arm/remote_gdb.hh (81d7551dd3be) > >> - src/arch/arm/remote_gdb.cc (81d7551dd3be) > >> - src/arch/arm/stage2_lookup.hh (PRE-CREATION) > >> - src/arch/arm/stage2_lookup.cc (PRE-CREATION) > >> - src/arch/arm/stage2_mmu.hh (PRE-CREATION) > >> - src/arch/arm/stage2_mmu.cc (PRE-CREATION) > >> - src/arch/arm/system.hh (81d7551dd3be) > >> - src/arch/arm/system.cc (81d7551dd3be) > >> - src/arch/arm/table_walker.hh (81d7551dd3be) > >> - src/arch/arm/table_walker.cc (81d7551dd3be) > >> - src/arch/arm/tlb.hh (81d7551dd3be) > >> - src/arch/arm/tlb.cc (81d7551dd3be) > >> - src/arch/arm/types.hh (81d7551dd3be) > >> - src/arch/arm/utility.hh (81d7551dd3be) > >> - src/arch/arm/utility.cc (81d7551dd3be) > >> - src/arch/arm/vtophys.cc (81d7551dd3be) > >> - src/base/loader/elf_object.hh (81d7551dd3be) > >> - src/base/loader/elf_object.cc (81d7551dd3be) > >> - src/base/loader/object_file.hh (81d7551dd3be) > >> - src/base/loader/object_file.cc (81d7551dd3be) > >> - src/cpu/BaseCPU.py (81d7551dd3be) > >> - src/dev/arm/RealView.py (81d7551dd3be) > >> - src/dev/arm/SConscript (81d7551dd3be) > >> - src/dev/arm/generic_timer.hh (PRE-CREATION) > >> - src/dev/arm/generic_timer.cc (PRE-CREATION) > >> - src/dev/arm/gic_pl390.cc (81d7551dd3be) > >> - src/dev/arm/vgic.hh (PRE-CREATION) > >> - src/dev/arm/vgic.cc (PRE-CREATION) > >> - src/sim/System.py (81d7551dd3be) > >> - src/sim/process.cc (81d7551dd3be) > >> - src/sim/serialize.hh (81d7551dd3be) > >> - src/sim/system.hh (81d7551dd3be) > >> - src/sim/system.cc (81d7551dd3be) > >> - system/arm/aarch64_bootloader/LICENSE.txt (PRE-CREATION) > >> - system/arm/aarch64_bootloader/boot.S (PRE-CREATION) > >> - system/arm/aarch64_bootloader/makefile (PRE-CREATION) > >> - util/cpt_upgrader.py (81d7551dd3be) > >> - util/m5/m5op_arm_A64.S (PRE-CREATION) > >> > >> View Diff <http://reviews.gem5.org/r/2141/diff/> > >> > > > > > _______________________________________________ > gem5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/gem5-dev > _______________________________________________ gem5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/gem5-dev
