Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 49 additions & 1 deletion configs/ruby/GPU_VIPER.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,48 @@ def create(self, options, ruby_system, system):
self.recycle_latency = options.recycle_latency


class ScalarCache(SQCCache):
def create(self, options):
self.size = MemorySize(options.scalar_size)
self.assoc = options.scalar_assoc
if hasattr(options, "scalar_rp"):
self.replacement_policy = ObjectList.rp_list.get(
options.scalar_rp
)()
elif hasattr(options, "sqc_rp"):
self.replacement_policy = ObjectList.rp_list.get(options.sqc_rp)()

class ScalarCntrl(GPU_VIPER_SQC_Controller, CntrlBase):
def create(self, options, ruby_system, system):
# Scalar and SQC controllers share MachineType:SQC, so their
# controller version IDs must come from the same counter.
self.version = SQCCntrl.versionCount()

self.L1cache = ScalarCache()
self.L1cache.create(options)
self.L1cache.resourceStalls = options.no_resource_stalls

self.sequencer = VIPERSequencer()

self.sequencer.version = self.seqCount()
self.sequencer.dcache = self.L1cache
self.sequencer.ruby_system = ruby_system
self.sequencer.support_data_reqs = False
self.sequencer.is_cpu_sequencer = False
if options.sqc_deadlock_threshold:
self.sequencer.deadlock_threshold = options.sqc_deadlock_threshold

self.ruby_system = ruby_system
if hasattr(options, "gpu_clock") and hasattr(options, "gpu_voltage"):
self.clk_domain = SrcClockDomain(
clock=options.gpu_clock,
voltage_domain=VoltageDomain(voltage=options.gpu_voltage),
)

if options.recycle_latency:
self.recycle_latency = options.recycle_latency


class TCC(RubyCache):
size = MemorySize("256KiB")
assoc = 16
Expand Down Expand Up @@ -452,6 +494,12 @@ def define_options(parser):
parser.add_argument(
"--sqc-assoc", type=int, default=8, help="SQC cache assoc"
)
parser.add_argument(
"--scalar-size", type=str, default="32KiB", help="Scalar cache size"
)
parser.add_argument(
"--scalar-assoc", type=int, default=8, help="Scalar cache assoc"
)
parser.add_argument(
"--sqc-deadlock-threshold",
type=int,
Expand Down Expand Up @@ -872,7 +920,7 @@ def construct_scalars(options, system, ruby_system, network):
TCC_bits = int(math.log(options.num_tccs, 2))

for i in range(options.num_scalar_cache):
scalar_cntrl = SQCCntrl(TCC_select_num_bits=TCC_bits)
scalar_cntrl = ScalarCntrl(TCC_select_num_bits=TCC_bits)
scalar_cntrl.create(options, ruby_system, system)

exec("ruby_system.scalar_cntrl%d = scalar_cntrl" % i)
Expand Down