@@ -22,7 +22,9 @@ import tensil.{
22
22
ArchitectureDataTypeWithBase ,
23
23
InstructionLayout ,
24
24
FloatAsIfIntegralWithMAC ,
25
- NumericWithMAC
25
+ NumericWithMAC ,
26
+ TablePrinter ,
27
+ TableLine
26
28
}
27
29
import tensil .tools .ArchitectureDataTypeUtil
28
30
import tensil .tools .model .Model
@@ -51,7 +53,6 @@ object Main extends App {
51
53
.text(" Input (.csv) files" )
52
54
53
55
opt[Seq [File ]]('o' , " outputs" )
54
- .required()
55
56
.valueName(" <file>, ..." )
56
57
.action((x, c) => c.copy(outputFiles = x))
57
58
.text(" Output (.csv) files" )
@@ -137,7 +138,7 @@ object Main extends App {
137
138
traceContext : ExecutiveTraceContext
138
139
): Unit = {
139
140
require(model.inputs.size == inputFiles.size)
140
- require(model.outputs.size == outputFiles.size)
141
+ require(outputFiles.size == 0 || model.outputs.size == outputFiles.size)
141
142
142
143
val emulator = new Emulator (
143
144
dataType = dataType,
@@ -179,10 +180,16 @@ object Main extends App {
179
180
}
180
181
181
182
val outputPreps =
182
- for ((output, file) <- model.outputs.zip(outputFiles)) yield {
183
- val outputPrep = new ByteArrayOutputStream ()
184
- (output, file, outputPrep, new DataOutputStream (outputPrep))
185
- }
183
+ if (outputFiles.size != 0 )
184
+ for ((output, file) <- model.outputs.zip(outputFiles)) yield {
185
+ val outputPrep = new ByteArrayOutputStream ()
186
+ (output, Some (file), outputPrep, new DataOutputStream (outputPrep))
187
+ }
188
+ else
189
+ for (output <- model.outputs) yield {
190
+ val outputPrep = new ByteArrayOutputStream ()
191
+ (output, None , outputPrep, new DataOutputStream (outputPrep))
192
+ }
186
193
187
194
for (_ <- 0 until numberOfRuns) {
188
195
val trace = new ExecutiveTrace (traceContext)
@@ -211,13 +218,46 @@ object Main extends App {
211
218
new ByteArrayInputStream (outputPrep.toByteArray())
212
219
)
213
220
214
- ArchitectureDataTypeUtil .readToCsv(
215
- dataType,
216
- outputStream,
217
- model.arch.arraySize,
218
- output.size * numberOfRuns,
219
- file.getAbsolutePath()
220
- )
221
+ if (file.isDefined)
222
+ ArchitectureDataTypeUtil .readToCsv(
223
+ dataType,
224
+ outputStream,
225
+ model.arch.arraySize,
226
+ output.size * numberOfRuns,
227
+ file.get.getAbsolutePath()
228
+ )
229
+ else {
230
+ val r = ArchitectureDataTypeUtil .readResult(
231
+ dataType,
232
+ outputStream,
233
+ model.arch.arraySize,
234
+ output.size.toInt * numberOfRuns * model.arch.arraySize
235
+ )
236
+
237
+ for (i <- 0 until numberOfRuns) {
238
+ val tb = new TablePrinter (Some (s " OUTPUT ${output.name}, RUN ${i}" ))
239
+
240
+ for (j <- 0 until output.size.toInt) {
241
+ val offset = (i * output.size.toInt + j) * model.arch.arraySize
242
+ val vector = r.slice(offset, offset + model.arch.arraySize)
243
+
244
+ tb.addLine(
245
+ TableLine (
246
+ f " ${j}%08d " ,
247
+ vector
248
+ .grouped(8 )
249
+ .map(_.map(v => {
250
+ val s = f " $v%.4f "
251
+ " " * (12 - s.length()) + s
252
+ }).mkString)
253
+ .toIterable
254
+ )
255
+ )
256
+ }
257
+
258
+ print(tb.toString())
259
+ }
260
+ }
221
261
}
222
262
}
223
263
}
0 commit comments