⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 benchmark.cpp

📁 UAV 自动驾驶的
💻 CPP
字号:
#include <iostream>#include <cstdlib>#include <mat/Vector.h>#include <mat/Matrix.h>#include <mat/Matrix_Invert.h>#include "timer.h"using namespace std;using namespace libmat;template<	int			n,	int			m,	class			T>const Matrix<n,m,T>noise(	const T &		min,	const T &		max){	Matrix<n,m,T>		M;	for( int i=0 ; i<n ; i++ )		for( int j=0 ; j<m ; j++ )			M[i][j] = drand48() * (max - min) + min;	return M;}template<	int			n,	int			m,	int			p,	int			q,	class			T>voidmatrix_mult3(	int			times){	Matrix<n,m,T>		A( noise<n,m,T>( -10.0, 10.0 ) );	Matrix<m,p,T>		B( noise<m,p,T>( -10.0, 10.0 ) );	Matrix<p,q,T>		C( noise<p,q,T>( -10.0, 10.0 ) );	for( int i=0 ; i<times ; i++ )	{		const Matrix<n,q,T>	D( mult3( A, B, C ) );	}}template<	int			n,	class			T>voidsparse_matrix_mult2(	int			times){	Matrix<n,n,T>		A;	Matrix<n,n,T>		P( noise<n,n,T>( -1, 1 ) );	for( int i=0 ; i<n ; i++ )	{		for( int j=0 ; j<n ; j++ )			A[i][j] = i < n/2 ? drand48() : 0;	}	for( int i=0 ; i<times ; i++ )	{		Matrix<n,n,T>	D( eye<n,T>() );		D += A * P;		D += P * A.transpose();	}}template<	int			n,	class			T>voiddense_matrix_mult2(	int			times){	Matrix<n,n,T>		A( noise<n,n,T>( -1, 1 ) );	Matrix<n,n,T>		P( noise<n,n,T>( -1, 1 ) );	for( int i=0 ; i<times ; i++ )	{		Matrix<n,n,T>	D( A * P );		(void) D.rows();	}}template<	class			T>voidscalar_mult(	const int		iters,	volatile const T &	a,	volatile const T &	b){	volatile T	val;	for( int i=0 ; i<iters ; i++ )	{		if( *(int32_t*) &a == 0		||  *(int32_t*) &b == 0		)			val = 0.0;		else			val = a * b;	}}#define time_this( iters, code )					\	do {								\		int count = (iters);					\		stopwatch_t timer;					\		start( &timer );					\		(void) code;						\		unsigned long diff = stop( &timer );			\		cout							\			<< count					\			<< " iterations of "				\			<< #code					\			<< " = " 					\			<< diff						\			<< " usec = "					\			<< double(diff) / double(iters)			\			<< " usec/iter"					\			<< endl;					\	} while(0)int main( void ){	const int		iters = 1000;	time_this( iters, ( sparse_matrix_mult2<7,double>( iters ) ) );	time_this( iters, ( sparse_matrix_mult2<7,float>( iters ) ) );	time_this( iters, ( dense_matrix_mult2<7,double>( iters ) ) );	time_this( iters, ( dense_matrix_mult2<7,float>( iters ) ) );	time_this( iters, ( matrix_mult3<2,7,7,2,double>( iters ) ) );	time_this( iters, ( matrix_mult3<2,7,7,2,float>( iters ) ) );	time_this( 1<<20, ( scalar_mult<uint16_t>( iters, 0xDEAD, 0x200 ) ) );	time_this( 1<<20, ( scalar_mult<uint32_t>( iters, 0xDEADBEEF, 0x200 ) ) );	time_this( 1<<20, ( scalar_mult<double>( iters, 3.15159, 0.0 ) ) );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -