changeset a9f0711e7230 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=a9f0711e7230
description:
        gpu-compute: Changing reconvergenceStack type
        std::stack has no iterators, therefore the reconvergence stack can't be
        iterated without poping elements off. We will be using std::list 
instead to be
        able to iterate for saving and restoring purposes.

diffstat:

 src/gpu-compute/wavefront.cc |  14 ++++++------
 src/gpu-compute/wavefront.hh |  51 ++++++++++++++++++-------------------------
 2 files changed, 29 insertions(+), 36 deletions(-)

diffs (134 lines):

diff -r aa846ec8cd8d -r a9f0711e7230 src/gpu-compute/wavefront.cc
--- a/src/gpu-compute/wavefront.cc      Fri Sep 16 12:27:56 2016 -0400
+++ b/src/gpu-compute/wavefront.cc      Fri Sep 16 12:29:01 2016 -0400
@@ -873,7 +873,7 @@
                                     const VectorMask& mask)
 {
     assert(mask.count());
-    reconvergenceStack.emplace(new ReconvergenceStackEntry(pc, rpc, mask));
+    reconvergenceStack.emplace_back(new ReconvergenceStackEntry{pc, rpc, 
mask});
 }
 
 void
@@ -886,7 +886,7 @@
             execMask().to_string<char, std::string::traits_type,
             std::string::allocator_type>().c_str(), pc());
 
-    reconvergenceStack.pop();
+    reconvergenceStack.pop_back();
 
     DPRINTF(WavefrontStack, "%3i %s\n", pc(),
             execMask().to_string<char, std::string::traits_type,
@@ -904,32 +904,32 @@
 uint32_t
 Wavefront::pc() const
 {
-    return reconvergenceStack.top()->pc;
+    return reconvergenceStack.back()->pc;
 }
 
 uint32_t
 Wavefront::rpc() const
 {
-    return reconvergenceStack.top()->rpc;
+    return reconvergenceStack.back()->rpc;
 }
 
 VectorMask
 Wavefront::execMask() const
 {
-    return reconvergenceStack.top()->execMask;
+    return reconvergenceStack.back()->execMask;
 }
 
 bool
 Wavefront::execMask(int lane) const
 {
-    return reconvergenceStack.top()->execMask[lane];
+    return reconvergenceStack.back()->execMask[lane];
 }
 
 
 void
 Wavefront::pc(uint32_t new_pc)
 {
-    reconvergenceStack.top()->pc = new_pc;
+    reconvergenceStack.back()->pc = new_pc;
 }
 
 uint32_t
diff -r aa846ec8cd8d -r a9f0711e7230 src/gpu-compute/wavefront.hh
--- a/src/gpu-compute/wavefront.hh      Fri Sep 16 12:27:56 2016 -0400
+++ b/src/gpu-compute/wavefront.hh      Fri Sep 16 12:29:01 2016 -0400
@@ -52,6 +52,27 @@
 
 static const int MAX_NUM_INSTS_PER_WF = 12;
 
+/**
+ * A reconvergence stack entry conveys the necessary state to implement
+ * control flow divergence.
+ */
+struct ReconvergenceStackEntry {
+    /**
+     * PC of current instruction.
+     */
+    uint32_t pc;
+    /**
+     * PC of the immediate post-dominator instruction, i.e., the value of
+     * @a pc for the first instruction that will be executed by the wavefront
+     * when a reconvergence point is reached.
+     */
+    uint32_t rpc;
+    /**
+     * Execution mask.
+     */
+    VectorMask execMask;
+};
+
 /*
  * Arguments for the hsail opcode call, are user defined and variable length.
  * The hardware/finalizer can support arguments in hardware or use memory to
@@ -120,34 +141,6 @@
     }
 };
 
-/**
- * A reconvergence stack entry conveys the necessary state to implement
- * control flow divergence.
- */
-class ReconvergenceStackEntry {
-
-  public:
-    ReconvergenceStackEntry(uint32_t new_pc, uint32_t new_rpc,
-                            VectorMask new_mask) : pc(new_pc), rpc(new_rpc),
-                            execMask(new_mask) {
-    }
-
-    /**
-     * PC of current instruction.
-     */
-    uint32_t pc;
-    /**
-     * PC of the immediate post-dominator instruction, i.e., the value of
-     * @a pc for the first instruction that will be executed by the wavefront
-     * when a reconvergence point is reached.
-     */
-    uint32_t rpc;
-    /**
-     * Execution mask.
-     */
-    VectorMask execMask;
-};
-
 class Wavefront : public SimObject
 {
   public:
@@ -368,7 +361,7 @@
      * point (branch instruction), and shrinks every time the wavefront
      * reaches a reconvergence point (immediate post-dominator instruction).
      */
-    std::stack<std::unique_ptr<ReconvergenceStackEntry>> reconvergenceStack;
+    std::deque<std::unique_ptr<ReconvergenceStackEntry>> reconvergenceStack;
 };
 
 #endif // __WAVEFRONT_HH__
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to