@@ -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
3637object 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