// gsl_test_beta.cxx // Castelier Etienne // 19 jan 2007 // // Test de la fonction Beta de la GSL // #include #include #include #include #include #include #include class IntelTimer { public: IntelTimer( void ):_frequency(1.0) { find_frequency(); } inline void start( void ){ rdtsc(_click_start.n32[0],_click_start.n32[1]); } inline void stop( void ){ rdtsc(_click_stop.n32[0],_click_stop.n32[1]); } unsigned long long get_click( void ){ return (_click_stop.n64-_click_start.n64); } inline void find_frequency( void ){ time_t initial, final; int dummy=2; initial = time(0); start(); do { dummy+=2; } while(time(0)==initial); // On est au debut d'un cycle d'une seconde !!! initial = time(0); start(); do { dummy+=2; } while(time(0)==initial); stop(); final=time(0); // _frequency=get_click()/double(final-initial); _frequency=get_click(); std::cerr << "CPU frequency : "<< _frequency << std::endl; } private: union { unsigned long int n32[2] ; unsigned long long n64 ; } _click_start; union { unsigned long int n32[2] ; unsigned long long n64 ; } _click_stop; double _frequency ; }; using namespace std; // test void test_gsl() { double Ib,Ig; double z,w,mf,mm; IntelTimer timer; long long t1,t2; int n,i; mm=4.9; mf=3.9; w=mf; z=mm+1; n=10; cout << "Beta CPU Gamma CPU\n"; for(i=1; i<= n; ++i) { timer.start(); Ib=gsl_sf_beta(z,w); timer.stop(); t1=timer.get_click(); timer.start(); Ig=gsl_sf_gamma(z)*gsl_sf_gamma(w)/gsl_sf_gamma(w+z); timer.stop(); t2=timer.get_click(); // cout << Ib << ' ' << Ig << endl; cout << "Loop " << i << endl; cout << t1 << ' ' << t2 << endl; } } // Routine principale int main() { test_gsl(); return 0; }