Skip to content

Commit b3cc45a

Browse files
committed
Parameterize LSQ depth to toplevel configs
1 parent 42b173c commit b3cc45a

3 files changed

Lines changed: 80 additions & 6 deletions

File tree

chipyard/RadianceConfigs.scala

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ class RadianceSingleClusterIssueDepthConfig(issueQueueEntries: Int) extends Conf
246246
noILP = false,
247247
l0i = Some(L0iCacheConfig),
248248
l0d = Some(L0dCacheConfig),
249-
profiler = false,
249+
trace = true,
250+
profiler = true,
250251
numIssueQueueEntries = issueQueueEntries
251252
) ++
252253
new WithRadianceCluster(0, smemConfig = TapeoutSmemConfig, l1Config = L1CacheConfig) ++
@@ -263,6 +264,30 @@ class RadianceSingleClusterIssueDepth8Config extends RadianceSingleClusterIssueD
263264
class RadianceSingleClusterIssueDepth16Config extends RadianceSingleClusterIssueDepthConfig(16)
264265
class RadianceSingleClusterIssueDepth32Config extends RadianceSingleClusterIssueDepthConfig(32)
265266

267+
class RadianceSingleClusterLSQDepthConfig(lsqDepth: Int) extends Config(
268+
new WithMuonCores(
269+
2,
270+
location = InCluster(0),
271+
noILP = false,
272+
l0i = Some(L0iCacheConfig),
273+
l0d = Some(L0dCacheConfig),
274+
profiler = false,
275+
lsqDepth = Some(lsqDepth)
276+
) ++
277+
new WithRadianceCluster(0, smemConfig = TapeoutSmemConfig, l1Config = L1CacheConfig) ++
278+
new WithExtGPUMem() ++
279+
new WithRadianceRocket ++
280+
new WithGPUResetAggregator(defaultReset = false) ++
281+
new RadianceBaseConfig
282+
)
283+
284+
class RadianceSingleClusterLSQDepth1Config extends RadianceSingleClusterLSQDepthConfig(1)
285+
class RadianceSingleClusterLSQDepth2Config extends RadianceSingleClusterLSQDepthConfig(2)
286+
class RadianceSingleClusterLSQDepth4Config extends RadianceSingleClusterLSQDepthConfig(4)
287+
class RadianceSingleClusterLSQDepth8Config extends RadianceSingleClusterLSQDepthConfig(8)
288+
class RadianceSingleClusterLSQDepth16Config extends RadianceSingleClusterLSQDepthConfig(16)
289+
class RadianceSingleClusterLSQDepth32Config extends RadianceSingleClusterLSQDepthConfig(32)
290+
266291
object RadianceWarpLenConfig {
267292
private val minL0dLineBytes = 64
268293
private val wordBytes = 32 / 8

src/main/scala/radiance/muon/LSU.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@ case class LoadStoreUnitParams(
3232
val smemDoesntReorder: Boolean = true, // see comment above LSQMemUpdate
3333
val fastHeadUpdate: Boolean = true, // allow logical head to update on same cycle as memUpdate / memResponse
3434
) {
35+
private val depths = Seq(
36+
numGlobalLdqEntries,
37+
numGlobalStqEntries,
38+
numSharedLdqEntries,
39+
numSharedStqEntries,
40+
loadDataEntries,
41+
storeDataEntries,
42+
addressEntries,
43+
)
44+
require(depths.forall(_ > 0), "LSU queue depths must be positive")
45+
require(depths.forall(isPow2(_)), "LSU queue depths must be powers of two")
46+
3547
val globalLdqIndexBits = log2Up(numGlobalLdqEntries)
3648
val globalStqIndexBits = log2Up(numGlobalStqEntries)
3749
val globalLdqCircIndexBits = globalLdqIndexBits + 1
@@ -49,6 +61,38 @@ case class LoadStoreUnitParams(
4961
val addressIdxBits = log2Up(addressEntries)
5062
}
5163

64+
case class LoadStoreUnitDepthOverrides(
65+
numGlobalLdqEntries: Option[Int] = None,
66+
numGlobalStqEntries: Option[Int] = None,
67+
numSharedLdqEntries: Option[Int] = None,
68+
numSharedStqEntries: Option[Int] = None,
69+
loadDataEntries: Option[Int] = None,
70+
storeDataEntries: Option[Int] = None,
71+
addressEntries: Option[Int] = None,
72+
) {
73+
def applyTo(lsu: LoadStoreUnitParams): LoadStoreUnitParams = lsu.copy(
74+
numGlobalLdqEntries = numGlobalLdqEntries.getOrElse(lsu.numGlobalLdqEntries),
75+
numGlobalStqEntries = numGlobalStqEntries.getOrElse(lsu.numGlobalStqEntries),
76+
numSharedLdqEntries = numSharedLdqEntries.getOrElse(lsu.numSharedLdqEntries),
77+
numSharedStqEntries = numSharedStqEntries.getOrElse(lsu.numSharedStqEntries),
78+
loadDataEntries = loadDataEntries.getOrElse(lsu.loadDataEntries),
79+
storeDataEntries = storeDataEntries.getOrElse(lsu.storeDataEntries),
80+
addressEntries = addressEntries.getOrElse(lsu.addressEntries),
81+
)
82+
}
83+
84+
object LoadStoreUnitDepthOverrides {
85+
def all(depth: Int): LoadStoreUnitDepthOverrides = LoadStoreUnitDepthOverrides(
86+
numGlobalLdqEntries = Some(depth),
87+
numGlobalStqEntries = Some(depth),
88+
numSharedLdqEntries = Some(depth),
89+
numSharedStqEntries = Some(depth),
90+
loadDataEntries = Some(depth),
91+
storeDataEntries = Some(depth),
92+
addressEntries = Some(depth),
93+
)
94+
}
95+
5296
case object MuonLoadStoreUnitDebugIdKey extends Field[Option[Int]](None)
5397

5498
class LoadStoreUnitDerivedParams(

src/main/scala/radiance/subsystem/Configs.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import radiance.muon._
2121
import radiance.muon.backend.fp.FPPipeParams
2222
import radiance.muon.backend.int.IntPipeParams
2323
import radiance.virgo.{NumVortexCores, VirgoClusterParams, VortexCoreParams, VortexL1Key}
24-
import radiance.muon.LoadStoreUnitParams
2524
import radiance.unittest.CyclotronLinked
2625

2726
sealed trait RadianceSmemSerialization
@@ -78,6 +77,7 @@ class WithMuonCores(
7877
numLanes: Option[Int],
7978
numPhysRegs: Option[Int],
8079
numIssueQueueEntries: Int,
80+
lsqDepth: Option[Int],
8181
l0i: Option[DCacheParams],
8282
l0d: Option[DCacheParams],
8383
) extends Config((site, here, up) => {
@@ -101,6 +101,12 @@ class WithMuonCores(
101101
numFP16ExpLanes = (lanes / 4).max(1)
102102
)
103103
}
104+
val lsu = MuonCoreParams().lsu.copy(
105+
numLsuLanes = numLanes.getOrElse(simt.numLsuLanes)
106+
)
107+
val resolvedLsu = lsqDepth
108+
.map(depth => LoadStoreUnitDepthOverrides.all(depth).applyTo(lsu))
109+
.getOrElse(lsu)
104110
MuonCoreParams(
105111
numWarps = resolvedNumWarps,
106112
numLanes = resolvedNumLanes,
@@ -115,9 +121,7 @@ class WithMuonCores(
115121
// for muon, numSMEMInFlights controlled by lsu parameters, rather than
116122
// from SIMTCoreParams. TODO: use SIMTCoreParams instead?
117123
// logSMEMInFlights = log2Ceil(up(SIMTCoreKey).get.numSMEMInFlights),
118-
lsu = LoadStoreUnitParams(
119-
numLsuLanes = numLanes.getOrElse(simt.numLsuLanes)
120-
),
124+
lsu = resolvedLsu,
121125
trace = trace || difftest,
122126
profiler = profiler,
123127
difftest = difftest,
@@ -171,6 +175,7 @@ class WithMuonCores(
171175
numLanes: Option[Int] = None,
172176
numPhysRegs: Option[Int] = None,
173177
numIssueQueueEntries: Int = 8,
178+
lsqDepth: Option[Int] = None,
174179
l0i: Option[DCacheParams] = None, l0d: Option[DCacheParams] = None)
175180
= this(n, location, RocketCrossingParams(
176181
master = HierarchicalElementMasterPortParams.locationDefault(location),
@@ -179,7 +184,7 @@ class WithMuonCores(
179184
case InSubsystem => CBUS
180185
case InCluster(clusterId) => CCBUS(clusterId)
181186
},
182-
), standalone, noILP, trace, profiler, cyclotron, difftest, disabled, numWarps, numLanes, numPhysRegs, numIssueQueueEntries, l0i, l0d)
187+
), standalone, noILP, trace, profiler, cyclotron, difftest, disabled, numWarps, numLanes, numPhysRegs, numIssueQueueEntries, lsqDepth, l0i, l0d)
183188
}
184189

185190
class WithCyclotronCores(

0 commit comments

Comments
 (0)