Hello everyone, I detected an unexpected behavior in the fetch stage of O3CPU. Every time a memory instruction is fetched, it is detected as a branch, as we can see below.
FullO3CPU: Ticking main, FullO3CPU. 203000: system.cpu.fetch: Running stage. 203000: system.cpu.fetch: Attempting to fetch from [tid:0] 203000: system.cpu.fetch: [tid:0] Adding instructions to queue to decode. 203000: global: Requesting bytes 0x051787aa from address 0x104b4 203000: global: Requesting bytes 0x05130000 from address 0x104b8 203000: global: Decoding instruction 0x00000517 at address 0x104b6 203000: global: DynInst: [sn:16] Instruction created. Instcount for system.cpu = 10 203000: system.cpu.fetch: [tid:0] Instruction PC 0x104b6 (0) created [sn:16]. 203000: system.cpu.fetch: [tid:0] Instruction is: auipc a0, 0 203000: system.cpu.fetch: [tid:0] Fetch queue entry created (1/32). 203000: global: Requesting bytes 0x05130000 from address 0x104b8 203000: global: Requesting bytes 0x6582e965 from address 0x104bc 203000: global: Decoding instruction 0xe9650513 at address 0x104ba 203000: global: DynInst: [sn:17] Instruction created. Instcount for system.cpu = 11 203000: system.cpu.fetch: [tid:0] Instruction PC 0x104ba (0) created [sn:17]. 203000: system.cpu.fetch: [tid:0] Instruction is: addi a0, a0, -362 203000: system.cpu.fetch: [tid:0] Fetch queue entry created (2/32). 203000: global: Requesting bytes 0x6582e965 from address 0x104bc 203000: global: Decoding instruction 0x00006582 at address 0x104be 203000: global: DynInst: [sn:18] Instruction created. Instcount for system.cpu = 12 203000: system.cpu.fetch: [tid:0] Instruction PC 0x104be (0) created [sn:18]. 203000: system.cpu.fetch: [tid:0] Instruction is: c_ldsp a1, 0(sp) 203000: system.cpu.fetch: [tid:0] Fetch queue entry created (3/32). 203000: system.cpu.fetch: Branch detected with PC = (0x104be=>0x104c0).(0=>1) 203000: system.cpu.fetch: [tid:0] Done fetching, predicted branch instruction encountered. The instruction c.ldsp a1,0(sp), which is an instruction that reads data from memory, is detected as a branch (highlighted text). This behavior is negatively affecting the average issue rate from the fetch unit. Is that right? Is there some hardware limitation preventing that more than one memory instruction (load or store) can be fetched at a single cycle by the fetch unit? I don't understand the reason why two memory instructions could not be fetched in the same cycle. I am currently using the gem5 20.1.0.2 Risc-V ISA and se.py as the configuration file. This print that I showed before was obtained using O3CPUAll debug flag. Any help would be appreciated. ---------------------------------------------------------------------------------------------------------------------------------------------- Francisco Carlos Silva Junior Phd Student at University of Brasilia
_______________________________________________ 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