Skip to content
This repository was archived by the owner on Oct 26, 2025. It is now read-only.

Commit 94aad03

Browse files
committed
Support number of runs
1 parent 02f5bd3 commit 94aad03

File tree

1 file changed

+63
-40
lines changed

1 file changed

+63
-40
lines changed

emulator/src/tensil/tools/emulator/Main.scala

Lines changed: 63 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ case class Args(
3131
modelFile: File = new File("."),
3232
inputFiles: Seq[File] = Nil,
3333
outputFiles: Seq[File] = Nil,
34+
numberOfRuns: Int = 1,
3435
)
3536

3637
object Main extends App {
@@ -54,6 +55,11 @@ object Main extends App {
5455
.valueName("<file>, ...")
5556
.action((x, c) => c.copy(outputFiles = x))
5657
.text("Output (.csv) files")
58+
59+
opt[Int]('r', "number-of-runs")
60+
.valueName("<integer>")
61+
.action((x, c) => c.copy(numberOfRuns = x))
62+
.text("Number of runs")
5763
}
5864

5965
argParser.parse(args, Args()) match {
@@ -73,6 +79,7 @@ object Main extends App {
7379
model,
7480
args.inputFiles,
7581
args.outputFiles,
82+
args.numberOfRuns,
7683
traceContext
7784
)
7885

@@ -82,6 +89,7 @@ object Main extends App {
8289
model,
8390
args.inputFiles,
8491
args.outputFiles,
92+
args.numberOfRuns,
8593
traceContext
8694
)
8795

@@ -91,6 +99,7 @@ object Main extends App {
9199
model,
92100
args.inputFiles,
93101
args.outputFiles,
102+
args.numberOfRuns,
94103
traceContext
95104
)
96105

@@ -100,6 +109,7 @@ object Main extends App {
100109
model,
101110
args.inputFiles,
102111
args.outputFiles,
112+
args.numberOfRuns,
103113
traceContext
104114
)
105115

@@ -109,6 +119,7 @@ object Main extends App {
109119
model,
110120
args.inputFiles,
111121
args.outputFiles,
122+
args.numberOfRuns,
112123
traceContext
113124
)
114125
}
@@ -122,8 +133,12 @@ object Main extends App {
122133
model: Model,
123134
inputFiles: Seq[File],
124135
outputFiles: Seq[File],
136+
numberOfRuns: Int,
125137
traceContext: ExecutiveTraceContext
126138
): Unit = {
139+
require(model.inputs.size == inputFiles.size)
140+
require(model.outputs.size == outputFiles.size)
141+
127142
val emulator = new Emulator(
128143
dataType = dataType,
129144
arch = model.arch
@@ -138,52 +153,60 @@ object Main extends App {
138153

139154
constsStream.close()
140155

141-
require(model.inputs.size == inputFiles.size)
142-
143-
for ((input, file) <- model.inputs.zip(inputFiles)) {
144-
val inputPrep = new ByteArrayOutputStream()
145-
val inputPrepDataStream = new DataOutputStream(inputPrep)
146-
147-
ArchitectureDataTypeUtil.writeFromCsv(
148-
dataType,
149-
inputPrepDataStream,
150-
model.arch.arraySize,
151-
file.getAbsolutePath()
152-
)
153-
154-
require(
155-
inputPrep
156-
.size() == input.size * model.arch.arraySize * dataType.sizeBytes
157-
)
158-
159-
val inputStream = new DataInputStream(
160-
new ByteArrayInputStream(inputPrep.toByteArray())
161-
)
162-
emulator.writeDRAM0(
163-
input.base until input.base + input.size,
164-
inputStream
165-
)
166-
}
156+
val inputStreams =
157+
for ((input, file) <- model.inputs.zip(inputFiles)) yield {
158+
val inputPrep = new ByteArrayOutputStream()
159+
val inputPrepDataStream = new DataOutputStream(inputPrep)
160+
161+
ArchitectureDataTypeUtil.writeFromCsv(
162+
dataType,
163+
inputPrepDataStream,
164+
model.arch.arraySize,
165+
file.getAbsolutePath()
166+
)
167+
168+
require(
169+
inputPrep
170+
.size() == input.size * model.arch.arraySize * dataType.sizeBytes * numberOfRuns
171+
)
172+
173+
(
174+
input,
175+
new DataInputStream(
176+
new ByteArrayInputStream(inputPrep.toByteArray())
177+
)
178+
)
179+
}
167180

168-
val trace = new ExecutiveTrace(traceContext)
169-
val programStream = new FileInputStream(model.program.fileName)
181+
val outputPreps =
182+
for ((output, file) <- model.outputs.zip(outputFiles)) yield {
183+
val outputPrep = new ByteArrayOutputStream()
184+
(output, file, outputPrep, new DataOutputStream(outputPrep))
185+
}
170186

171-
emulator.run(programStream, trace)
187+
for (_ <- 0 until numberOfRuns) {
188+
val trace = new ExecutiveTrace(traceContext)
189+
val programStream = new FileInputStream(model.program.fileName)
172190

173-
programStream.close()
174-
trace.printTrace()
191+
for ((input, inputStream) <- inputStreams)
192+
emulator.writeDRAM0(
193+
input.base until input.base + input.size,
194+
inputStream
195+
)
175196

176-
require(model.outputs.size == outputFiles.size)
197+
emulator.run(programStream, trace)
177198

178-
for ((output, file) <- model.outputs.zip(outputFiles)) {
179-
val outputPrep = new ByteArrayOutputStream()
180-
val outputPrepDataStream = new DataOutputStream(outputPrep)
199+
for ((output, _, _, outputPrepDataStream) <- outputPreps)
200+
emulator.readDRAM0(
201+
output.base until output.base + output.size,
202+
outputPrepDataStream
203+
)
181204

182-
emulator.readDRAM0(
183-
output.base until output.base + output.size,
184-
outputPrepDataStream
185-
)
205+
programStream.close()
206+
trace.printTrace()
207+
}
186208

209+
for ((output, file, outputPrep, _) <- outputPreps) {
187210
val outputStream = new DataInputStream(
188211
new ByteArrayInputStream(outputPrep.toByteArray())
189212
)
@@ -192,7 +215,7 @@ object Main extends App {
192215
dataType,
193216
outputStream,
194217
model.arch.arraySize,
195-
output.size,
218+
output.size * numberOfRuns,
196219
file.getAbsolutePath()
197220
)
198221
}

0 commit comments

Comments
 (0)