gem5  v20.1.0.0
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 "gpu-compute/misc.hh"
41 #include "params/ComputeUnit.hh"
42 #include "sim/stats.hh"
43 
44 /*
45  * @file local_memory_pipeline.hh
46  *
47  * The local memory pipeline issues newly created local memory packets
48  * from pipeline to the LDS. This stage also retires previously issued
49  * loads and stores that have returned from the LDS.
50  */
51 
52 class ComputeUnit;
53 class Wavefront;
54 
56 {
57  public:
58  LocalMemPipeline(const ComputeUnitParams *p, ComputeUnit &cu);
59  void exec();
60  std::queue<GPUDynInstPtr> &getLMRespFIFO() { return lmReturnedRequests; }
61 
62  void issueRequest(GPUDynInstPtr gpuDynInst);
63 
64 
65  bool
67  {
68  return lmReturnedRequests.size() < lmQueueSize;
69  }
70 
71  bool
72  isLMReqFIFOWrRdy(uint32_t pendReqs=0) const
73  {
74  return (lmIssuedRequests.size() + pendReqs) < lmQueueSize;
75  }
76 
77  const std::string& name() const { return _name; }
78  void regStats();
79 
80  void
82  {
83  loadVrfBankConflictCycles += num_cycles;
84  }
85 
86  private:
88  const std::string _name;
91  // Local Memory Request Fifo: all shared memory requests
92  // are issued to this FIFO from the memory pipelines
93  std::queue<GPUDynInstPtr> lmIssuedRequests;
94 
95  // Local Memory Response Fifo: all responses of shared memory
96  // requests are sent to this FIFO from LDS
97  std::queue<GPUDynInstPtr> lmReturnedRequests;
98 };
99 
100 #endif // __LOCAL_MEMORY_PIPELINE_HH__
LocalMemPipeline::name
const std::string & name() const
Definition: local_memory_pipeline.hh:77
LocalMemPipeline::isLMRespFIFOWrRdy
bool isLMRespFIFOWrRdy() const
Definition: local_memory_pipeline.hh:66
LocalMemPipeline::lmQueueSize
int lmQueueSize
Definition: local_memory_pipeline.hh:89
LocalMemPipeline::isLMReqFIFOWrRdy
bool isLMReqFIFOWrRdy(uint32_t pendReqs=0) const
Definition: local_memory_pipeline.hh:72
LocalMemPipeline
Definition: local_memory_pipeline.hh:55
LocalMemPipeline::_name
const std::string _name
Definition: local_memory_pipeline.hh:88
LocalMemPipeline::loadVrfBankConflictCycles
Stats::Scalar loadVrfBankConflictCycles
Definition: local_memory_pipeline.hh:90
misc.hh
LocalMemPipeline::getLMRespFIFO
std::queue< GPUDynInstPtr > & getLMRespFIFO()
Definition: local_memory_pipeline.hh:60
Stats::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2533
ComputeUnit
Definition: compute_unit.hh:198
stats.hh
LocalMemPipeline::exec
void exec()
Definition: local_memory_pipeline.cc:51
LocalMemPipeline::regStats
void regStats()
Definition: local_memory_pipeline.cc:128
LocalMemPipeline::lmIssuedRequests
std::queue< GPUDynInstPtr > lmIssuedRequests
Definition: local_memory_pipeline.hh:93
LocalMemPipeline::incLoadVRFBankConflictCycles
void incLoadVRFBankConflictCycles(int num_cycles)
Definition: local_memory_pipeline.hh:81
LocalMemPipeline::LocalMemPipeline
LocalMemPipeline(const ComputeUnitParams *p, ComputeUnit &cu)
Definition: local_memory_pipeline.cc:44
LocalMemPipeline::lmReturnedRequests
std::queue< GPUDynInstPtr > lmReturnedRequests
Definition: local_memory_pipeline.hh:97
LocalMemPipeline::computeUnit
ComputeUnit & computeUnit
Definition: local_memory_pipeline.hh:87
LocalMemPipeline::issueRequest
void issueRequest(GPUDynInstPtr gpuDynInst)
Definition: local_memory_pipeline.cc:121
Wavefront
Definition: wavefront.hh:57
GPUDynInstPtr
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition: misc.hh:48
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323

Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17