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