gem5  v21.1.0.2
local_memory_pipeline.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014-2015 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * For use for simulation and test purposes only
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its
18  * contributors may be used to endorse or promote products derived from this
19  * software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef __LOCAL_MEMORY_PIPELINE_HH__
35 #define __LOCAL_MEMORY_PIPELINE_HH__
36 
37 #include <queue>
38 #include <string>
39 
40 #include "base/statistics.hh"
41 #include "base/stats/group.hh"
42 #include "gpu-compute/misc.hh"
43 #include "params/ComputeUnit.hh"
44 
45 /*
46  * @file local_memory_pipeline.hh
47  *
48  * The local memory pipeline issues newly created local memory packets
49  * from pipeline to the LDS. This stage also retires previously issued
50  * loads and stores that have returned from the LDS.
51  */
52 
53 namespace gem5
54 {
55 
56 class ComputeUnit;
57 class Wavefront;
58 
60 {
61  public:
62  LocalMemPipeline(const ComputeUnitParams &p, ComputeUnit &cu);
63  void exec();
64  std::queue<GPUDynInstPtr> &getLMRespFIFO() { return lmReturnedRequests; }
65 
66  void issueRequest(GPUDynInstPtr gpuDynInst);
67 
68 
69  bool
71  {
72  return lmReturnedRequests.size() < lmQueueSize;
73  }
74 
75  bool
76  isLMReqFIFOWrRdy(uint32_t pendReqs=0) const
77  {
78  return (lmIssuedRequests.size() + pendReqs) < lmQueueSize;
79  }
80 
81  const std::string& name() const { return _name; }
82 
83  void
85  {
86  stats.loadVrfBankConflictCycles += num_cycles;
87  }
88 
89  private:
91  const std::string _name;
93 
94  // Local Memory Request Fifo: all shared memory requests
95  // are issued to this FIFO from the memory pipelines
96  std::queue<GPUDynInstPtr> lmIssuedRequests;
97 
98  // Local Memory Response Fifo: all responses of shared memory
99  // requests are sent to this FIFO from LDS
100  std::queue<GPUDynInstPtr> lmReturnedRequests;
101 
102  protected:
104  {
106 
108  } stats;
109 };
110 
111 } // namespace gem5
112 
113 #endif // __LOCAL_MEMORY_PIPELINE_HH__
gem5::statistics::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1927
gem5::LocalMemPipeline::LocalMemPipelineStats
Definition: local_memory_pipeline.hh:103
group.hh
gem5::LocalMemPipeline::LocalMemPipelineStats::loadVrfBankConflictCycles
statistics::Scalar loadVrfBankConflictCycles
Definition: local_memory_pipeline.hh:107
misc.hh
gem5::LocalMemPipeline::lmQueueSize
int lmQueueSize
Definition: local_memory_pipeline.hh:92
gem5::LocalMemPipeline::incLoadVRFBankConflictCycles
void incLoadVRFBankConflictCycles(int num_cycles)
Definition: local_memory_pipeline.hh:84
gem5::LocalMemPipeline::issueRequest
void issueRequest(GPUDynInstPtr gpuDynInst)
Definition: local_memory_pipeline.cc:129
gem5::LocalMemPipeline::getLMRespFIFO
std::queue< GPUDynInstPtr > & getLMRespFIFO()
Definition: local_memory_pipeline.hh:64
gem5::LocalMemPipeline::LocalMemPipelineStats::LocalMemPipelineStats
LocalMemPipelineStats(statistics::Group *parent)
Definition: local_memory_pipeline.cc:155
gem5::ComputeUnit
Definition: compute_unit.hh:203
gem5::LocalMemPipeline::exec
void exec()
Definition: local_memory_pipeline.cc:54
gem5::LocalMemPipeline::LocalMemPipeline
LocalMemPipeline(const ComputeUnitParams &p, ComputeUnit &cu)
Definition: local_memory_pipeline.cc:47
gem5::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
statistics.hh
gem5::LocalMemPipeline::isLMRespFIFOWrRdy
bool isLMRespFIFOWrRdy() const
Definition: local_memory_pipeline.hh:70
gem5::LocalMemPipeline::lmReturnedRequests
std::queue< GPUDynInstPtr > lmReturnedRequests
Definition: local_memory_pipeline.hh:100
gem5::LocalMemPipeline::isLMReqFIFOWrRdy
bool isLMReqFIFOWrRdy(uint32_t pendReqs=0) const
Definition: local_memory_pipeline.hh:76
gem5::GPUDynInstPtr
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition: misc.hh:51
gem5::LocalMemPipeline::lmIssuedRequests
std::queue< GPUDynInstPtr > lmIssuedRequests
Definition: local_memory_pipeline.hh:96
gem5::LocalMemPipeline::stats
gem5::LocalMemPipeline::LocalMemPipelineStats stats
gem5::statistics::Group
Statistics container.
Definition: group.hh:93
gem5::LocalMemPipeline::computeUnit
ComputeUnit & computeUnit
Definition: local_memory_pipeline.hh:90
gem5::LocalMemPipeline
Definition: local_memory_pipeline.hh:59
gem5::LocalMemPipeline::_name
const std::string _name
Definition: local_memory_pipeline.hh:91
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: decoder.cc:40
gem5::LocalMemPipeline::name
const std::string & name() const
Definition: local_memory_pipeline.hh:81

Generated on Tue Sep 21 2021 12:25:25 for gem5 by doxygen 1.8.17