1 // *************************************************************************
2 // multiply filter bencmark
3 // -------------------------------------------------------------------------
5 // This benchmark tests the software multiply implemenation. The
6 // input data (and reference data) should be generated using the
7 // multiply_gendata.pl perl script and dumped to a file named
8 // dataset1.h You should not change anything except the
9 // HOST_DEBUG and VERIFY macros for your timing run.
13 //--------------------------------------------------------------------------
16 // Set HOST_DEBUG to 1 if you are going to compile this for a host
17 // machine (ie Athena/Linux) for debug purposes and set HOST_DEBUG
18 // to 0 if you are compiling with the smips-gcc toolchain.
24 // Set PREALLOCATE to 1 if you want to preallocate the benchmark
25 // function before starting stats. If you have instruction/data
26 // caches and you don't want to count the overhead of misses, then
27 // you will need to use preallocation.
33 // Set VERIFY to 1 if you want the program to check that the sort
34 // function returns the right answer. When you are doing your
35 // benchmarking you should set this to 0 so that the verification
36 // is not included in your timing.
42 // Set SET_STATS to 1 if you want to carve out the piece that actually
43 // does the computation.
49 //--------------------------------------------------------------------------
50 // Input/Reference Data
54 //--------------------------------------------------------------------------
57 int verify( int n
, int test
[], int correct
[] )
60 for ( i
= 0; i
< n
; i
++ ) {
61 if ( test
[i
] != correct
[i
] ) {
69 void printArray( char name
[], int n
, int arr
[] )
72 printf( " %10s :", name
);
73 for ( i
= 0; i
< n
; i
++ )
74 printf( " %3d ", arr
[i
] );
79 void finishTest( int toHostValue
)
82 if ( toHostValue
== 1 )
83 printf( "*** PASSED ***\n" );
85 printf( "*** FAILED *** (tohost = %d)\n", toHostValue
);
88 asm( "mtpcr %0, cr30" : : "r" (toHostValue
) );
93 void setStats( int enable
)
95 #if ( !HOST_DEBUG && SET_STATS )
96 asm( "mtpcr %0, cr10" : : "r" (enable
) );
100 //--------------------------------------------------------------------------
103 int main( int argc
, char* argv
[] )
106 int results_data
[DATA_SIZE
];
108 // Output the input arrays
111 printArray( "input1", DATA_SIZE
, input_data1
);
112 printArray( "input2", DATA_SIZE
, input_data2
);
113 printArray( "verify", DATA_SIZE
, verify_data
);
116 #if ( !HOST_DEBUG && PREALLOCATE )
117 for (i
= 0; i
< DATA_SIZE
; i
++)
119 results_data
[i
] = multiply( input_data1
[i
], input_data2
[i
] );
124 for (i
= 0; i
< DATA_SIZE
; i
++)
126 results_data
[i
] = multiply( input_data1
[i
], input_data2
[i
] );
130 for (i
= 0; i
< DATA_SIZE
; i
++)
132 results_data
[i
] = multiply( input_data1
[i
], input_data2
[i
] );
137 // Print out the results
140 printArray( "results", DATA_SIZE
, results_data
);
145 finishTest(verify( DATA_SIZE
, results_data
, verify_data
));