Skip to content

Commit 3d214f5

Browse files
committed
Parameterize numLanes at top config
adjust l0d line size to be min(64B, warpLen * wordSize) so that the current assumption of l0d being fragmented into the narrower l1 lines hold.
1 parent 9b99092 commit 3d214f5

4 files changed

Lines changed: 67 additions & 8 deletions

File tree

chipyard/RadianceConfigs.scala

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,45 @@ class RadianceSingleClusterIssueDepth8Config extends RadianceSingleClusterIssueD
264264
class RadianceSingleClusterIssueDepth16Config extends RadianceSingleClusterIssueDepthConfig(16)
265265
class RadianceSingleClusterIssueDepth32Config extends RadianceSingleClusterIssueDepthConfig(32)
266266

267+
object RadianceWarpLenConfig {
268+
private val minL0dLineBytes = 64
269+
private val wordBytes = 32 / 8
270+
private def warpBytes(warpLen: Int): Int = warpLen * wordBytes
271+
private def withBlockBytes(cache: DCacheParams, blockBytes: Int): DCacheParams =
272+
cache.copy(rowBits = blockBytes * 8, blockBytes = blockBytes)
273+
274+
def l0i(warpLen: Int): DCacheParams =
275+
L0iCacheConfig
276+
def l0d(warpLen: Int): DCacheParams =
277+
withBlockBytes(L0dCacheConfig, minL0dLineBytes max warpBytes(warpLen))
278+
def l1(warpLen: Int): DCacheParams =
279+
L1CacheConfig
280+
}
281+
282+
class RadianceSingleClusterWarpLenConfig(warpLen: Int) extends Config(
283+
new WithMuonCores(
284+
2,
285+
location = InCluster(0),
286+
noILP = false,
287+
l0i = Some(RadianceWarpLenConfig.l0i(warpLen)),
288+
l0d = Some(RadianceWarpLenConfig.l0d(warpLen)),
289+
trace = true,
290+
numLanes = Some(warpLen)
291+
) ++
292+
new WithSIMTConfig(numWarps = 8, numLanes = warpLen, numLsuLanes = warpLen, numSMEMInFlights = 8) ++
293+
new WithRadianceCluster(0, smemConfig = TapeoutSmemConfig, l1Config = RadianceWarpLenConfig.l1(warpLen)) ++
294+
new WithExtGPUMem() ++
295+
new WithRadianceRocket ++
296+
new WithGPUResetAggregator(defaultReset = false) ++
297+
new RadianceBaseConfig
298+
)
299+
300+
class RadianceSingleClusterWarpLen4Config extends RadianceSingleClusterWarpLenConfig(4)
301+
class RadianceSingleClusterWarpLen8Config extends RadianceSingleClusterWarpLenConfig(8)
302+
class RadianceSingleClusterWarpLen16Config extends RadianceSingleClusterWarpLenConfig(16)
303+
class RadianceSingleClusterWarpLen32Config extends RadianceSingleClusterWarpLenConfig(32)
304+
class RadianceSingleClusterWarpLen64Config extends RadianceSingleClusterWarpLenConfig(64)
305+
267306
class RadianceSingleClusterLargeICacheConfig extends Config(
268307
new WithRadianceMxGemmini(location = InCluster(0), dim = 16, accSizeInKB = 32, tileSize = (8, 8, 8)) ++
269308
new WithMuonCores(2, location = InCluster(0), noILP = false, l0i = Some(L0iCacheHugeConfig), l0d = Some(L0dCacheConfig), trace = true) ++

src/main/scala/radiance/muon/MuonTile.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ case class MuonTileParams(
4242
if (sourceIds == 0) 0 else 1 << log2Ceil(sourceIds)
4343

4444
def l1ReqTagBits: Int = {
45-
val coalescedReqWidth = core.numLanes * core.archLen / 8
45+
val coalescedReqWidth = dcache.map(_.blockBytes).getOrElse(core.numLanes * core.archLen / 8)
4646
require(coalescedReqWidth >= l1CacheLineBytes)
4747
require(coalescedReqWidth % l1CacheLineBytes == 0)
4848
require(isPow2(coalescedReqWidth / l1CacheLineBytes))
@@ -259,10 +259,12 @@ class MuonTile(
259259
})
260260

261261

262-
val coalescedReqWidth = muonParams.core.numLanes * muonParams.core.archLen / 8
262+
val warpBytes = muonParams.core.numLanes * muonParams.core.archLen / 8
263+
val coalescedReqWidth = muonParams.dcache.map(_.blockBytes).getOrElse(warpBytes)
263264

264265
val (l0dOut, l0dIn, l0dFlushRegNode) = muonParams.dcache.map { l0dParams =>
265-
require(muonParams.dcache.map(_.blockBytes).getOrElse(coalescedReqWidth) == coalescedReqWidth)
266+
require(l0dParams.blockBytes == coalescedReqWidth)
267+
require(l0dParams.blockBytes >= warpBytes)
266268
println(f"l0d flush address is ${muonParams.peripheralAddr}%x")
267269
val l0d = LazyModule(new TLULNBDCache(TLNBDCacheParams(
268270
id = tileId,

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import testchipip.soc.SubsystemInjectorKey
1818
import radiance.cluster._
1919
import radiance.memory._
2020
import radiance.muon._
21+
import radiance.muon.backend.fp.FPPipeParams
22+
import radiance.muon.backend.int.IntPipeParams
2123
import radiance.virgo.{NumVortexCores, VirgoClusterParams, VortexCoreParams, VortexL1Key}
2224
import radiance.muon.LoadStoreUnitParams
2325
import radiance.unittest.CyclotronLinked
@@ -71,6 +73,7 @@ class WithMuonCores(
7173
cyclotron: Boolean,
7274
difftest: Boolean,
7375
disabled: Boolean,
76+
numLanes: Option[Int],
7477
numIssueQueueEntries: Int,
7578
l0i: Option[DCacheParams],
7679
l0d: Option[DCacheParams],
@@ -81,18 +84,32 @@ class WithMuonCores(
8184
assert(up(RadianceSimArgs),
8285
"WithMuonCores: difftest cannot be enabled in non-sim mode!")
8386
}
87+
val simt = up(SIMTCoreKey).get
88+
val resolvedNumLanes = numLanes.getOrElse(simt.numLanes)
89+
val intPipe = numLanes.map { lanes =>
90+
IntPipeParams(numALULanes = lanes, numMulDivLanes = lanes)
91+
}
92+
val fpPipe = numLanes.map { lanes =>
93+
FPPipeParams(
94+
numFP32Lanes = (lanes / 2).max(1),
95+
numFP32DivLanes = (lanes / 8).max(1),
96+
numFP16ExpLanes = (lanes / 4).max(1)
97+
)
98+
}
8499
MuonCoreParams(
85-
numWarps = up(SIMTCoreKey).get.numWarps,
86-
numLanes = up(SIMTCoreKey).get.numLanes,
100+
numWarps = simt.numWarps,
101+
numLanes = resolvedNumLanes,
87102
numCores = n,
88103
numClusters = 2, // TODO: magic number
89104
noILP = noILP,
90105
numIssueQueueEntries = numIssueQueueEntries,
106+
intPipe = intPipe.getOrElse(MuonCoreParams().intPipe),
107+
fpPipe = fpPipe.getOrElse(MuonCoreParams().fpPipe),
91108
// for muon, numSMEMInFlights controlled by lsu parameters, rather than
92109
// from SIMTCoreParams. TODO: use SIMTCoreParams instead?
93110
// logSMEMInFlights = log2Ceil(up(SIMTCoreKey).get.numSMEMInFlights),
94111
lsu = LoadStoreUnitParams(
95-
numLsuLanes = up(SIMTCoreKey).get.numLsuLanes
112+
numLsuLanes = numLanes.getOrElse(simt.numLsuLanes)
96113
),
97114
trace = trace || difftest,
98115
difftest = difftest,
@@ -142,6 +159,7 @@ class WithMuonCores(
142159
standalone: Boolean = false, noILP: Boolean = false,
143160
trace: Boolean = false, cyclotron: Boolean = false,
144161
difftest: Boolean = false, disabled: Boolean = false,
162+
numLanes: Option[Int] = None,
145163
numIssueQueueEntries: Int = 8,
146164
l0i: Option[DCacheParams] = None, l0d: Option[DCacheParams] = None)
147165
= this(n, location, RocketCrossingParams(
@@ -151,7 +169,7 @@ class WithMuonCores(
151169
case InSubsystem => CBUS
152170
case InCluster(clusterId) => CCBUS(clusterId)
153171
},
154-
), standalone, noILP, trace, cyclotron, difftest, disabled, numIssueQueueEntries, l0i, l0d)
172+
), standalone, noILP, trace, cyclotron, difftest, disabled, numLanes, numIssueQueueEntries, l0i, l0d)
155173
}
156174

157175
class WithCyclotronCores(

0 commit comments

Comments
 (0)