From b826d96f40e7a5484bbdace4d4b3658bbc3ec91e Mon Sep 17 00:00:00 2001 From: Arnabjyoti Kalita Date: Mon, 12 Feb 2024 12:26:31 -0500 Subject: [PATCH] cpu-o3: add PerThreadUnifiedThreadMap to O3 CPU (#842) Github issue: https://github.com/gem5/gem5/issues/373 Change-Id: I1c8aba9bc5ea4e45faa6c174780904b8bd618604 --- src/cpu/o3/commit.cc | 2 +- src/cpu/o3/commit.hh | 2 +- src/cpu/o3/cpu.hh | 7 +++++-- src/cpu/o3/rename.cc | 2 +- src/cpu/o3/rename.hh | 2 +- src/cpu/o3/rename_map.hh | 2 ++ 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/cpu/o3/commit.cc b/src/cpu/o3/commit.cc index f5e601f679..8f8c5f095d 100644 --- a/src/cpu/o3/commit.cc +++ b/src/cpu/o3/commit.cc @@ -254,7 +254,7 @@ Commit::setActiveThreads(std::list *at_ptr) } void -Commit::setRenameMap(UnifiedRenameMap rm_ptr[MaxThreads]) +Commit::setRenameMap(UnifiedRenameMap::PerThreadUnifiedRenameMap& rm_ptr) { for (ThreadID tid = 0; tid < numThreads; tid++) renameMap[tid] = &rm_ptr[tid]; diff --git a/src/cpu/o3/commit.hh b/src/cpu/o3/commit.hh index eccd023d45..4fff9fe892 100644 --- a/src/cpu/o3/commit.hh +++ b/src/cpu/o3/commit.hh @@ -167,7 +167,7 @@ class Commit void setActiveThreads(std::list *at_ptr); /** Sets pointer to the commited state rename map. */ - void setRenameMap(UnifiedRenameMap rm_ptr[MaxThreads]); + void setRenameMap(UnifiedRenameMap::PerThreadUnifiedRenameMap& rm_ptr); /** Sets pointer to the ROB. */ void setROB(ROB *rob_ptr); diff --git a/src/cpu/o3/cpu.hh b/src/cpu/o3/cpu.hh index 1d100ab330..cc238e532c 100644 --- a/src/cpu/o3/cpu.hh +++ b/src/cpu/o3/cpu.hh @@ -110,6 +110,9 @@ class CPU : public BaseCPU BaseMMU *mmu; using LSQRequest = LSQ::LSQRequest; + using PerThreadUnifiedRenameMap = + UnifiedRenameMap::PerThreadUnifiedRenameMap; + /** Overall CPU status. */ Status _status; @@ -420,10 +423,10 @@ class CPU : public BaseCPU UnifiedFreeList freeList; /** The rename map. */ - UnifiedRenameMap renameMap[MaxThreads]; + PerThreadUnifiedRenameMap renameMap; /** The commit rename map. */ - UnifiedRenameMap commitRenameMap[MaxThreads]; + PerThreadUnifiedRenameMap commitRenameMap; /** The re-order buffer. */ ROB rob; diff --git a/src/cpu/o3/rename.cc b/src/cpu/o3/rename.cc index c20edc2e46..f7f93268eb 100644 --- a/src/cpu/o3/rename.cc +++ b/src/cpu/o3/rename.cc @@ -286,7 +286,7 @@ Rename::setActiveThreads(std::list *at_ptr) void -Rename::setRenameMap(UnifiedRenameMap rm_ptr[MaxThreads]) +Rename::setRenameMap(UnifiedRenameMap::PerThreadUnifiedRenameMap& rm_ptr) { for (ThreadID tid = 0; tid < numThreads; tid++) renameMap[tid] = &rm_ptr[tid]; diff --git a/src/cpu/o3/rename.hh b/src/cpu/o3/rename.hh index 81e63e5019..8daf3c76e5 100644 --- a/src/cpu/o3/rename.hh +++ b/src/cpu/o3/rename.hh @@ -170,7 +170,7 @@ class Rename void setActiveThreads(std::list *at_ptr); /** Sets pointer to rename maps (per-thread structures). */ - void setRenameMap(UnifiedRenameMap rm_ptr[MaxThreads]); + void setRenameMap(UnifiedRenameMap::PerThreadUnifiedRenameMap& rm_ptr); /** Sets pointer to the free list. */ void setFreeList(UnifiedFreeList *fl_ptr); diff --git a/src/cpu/o3/rename_map.hh b/src/cpu/o3/rename_map.hh index 640c2acbba..ab909ed749 100644 --- a/src/cpu/o3/rename_map.hh +++ b/src/cpu/o3/rename_map.hh @@ -182,6 +182,8 @@ class UnifiedRenameMap typedef SimpleRenameMap::RenameInfo RenameInfo; + typedef std::array PerThreadUnifiedRenameMap; + /** Default constructor. init() must be called prior to use. */ UnifiedRenameMap() : regFile(nullptr) {};