root/library/tests/stresssuite/blas_stress.cpp @ 1409

Revision 1064, 2.1 kB (checked in by mido, 14 years ago)

astyle applied all over the library

Line 
1#include "../mat_checks.h"
2#include <itpp/itbase.h>
3using namespace itpp;
4
5//These lines are needed for use of cout and endl
6using std::cout;
7using std::endl;
8
9//#define NDEBUG
10
11mat matmul ( mat &A, mat &B ) {
12    mat C ( A.rows(), B.cols() );
13    int i, j, k;
14    double sum;
15
16    for ( i = 0; i < A.rows(); i++ ) {
17        for ( j = 0; j < A.cols(); j++ ) {
18            sum = 0.0;
19            for ( k = 0; k < A.cols(); k++ ) {
20                sum += A._elem ( i, k ) * B._elem ( k, j );
21            }
22            C ( i, j ) = sum;
23        }
24    }
25    return C;
26}
27
28void matmul2 ( int n,  double *A, double *B, double *C ) {
29    int i, j, k;
30    double sum;
31
32    for ( i = 0; i < n; i++ ) {
33        for ( j = 0; j < n; j++ ) {
34            sum = 0.0;
35            for ( k = 0; k < n; k++ ) {
36                sum += A [ i*n+k ] * B [ k*n+j ];
37            }
38            C[ i*n+j] = sum;
39        }
40    }
41//      return C;
42}
43
44TEST ( blas_stress ) {
45    Real_Timer tt;
46    vec exec_times ( 4 );
47    vec exec_times_b ( 4 );
48    vec exec_times_c ( 4 );
49
50    mat A;
51    mat B;
52    mat C;
53
54    vec vn = "5 50 200 500";
55    int n;
56
57    for ( int i = 0; i < vn.length(); i++ ) {
58        n = (int) vn ( i );
59        A = randu ( n, n );
60        B = randu ( n, n );
61
62        tt.tic();
63        for ( int ii = 0; ii < 10; ii++ ) {
64            C = matmul ( A, B );
65        }
66        exec_times ( i ) = tt.toc();
67
68        tt.tic();
69        for ( int ii = 0; ii < 10; ii++ ) {
70            C = A * B;
71        }
72        exec_times_b ( i ) = tt.toc();
73
74        C = zeros ( n, n );
75        tt.tic();
76        for ( int ii = 0; ii < 10; ii++ ) {
77            matmul2 ( n, A._data(), B._data(), C._data() );
78        }
79        exec_times_c ( i ) = tt.toc();
80    }
81    cout << exec_times << endl;
82    cout << exec_times_b << endl;
83    cout << exec_times_c << endl;
84
85    it_file itf ( "blas_test.it" );
86    itf << Name ( "exec_times" ) << exec_times;
87    itf << Name ( "exec_times_b" ) << exec_times_b;
88    itf << Name ( "exec_times_c" ) << exec_times_c;
89}
Note: See TracBrowser for help on using the browser.