<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>test_timing.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.15 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center> <hr><h1>test_timing.c</h1><div class="fragment"><pre>00001 <font class="preprocessor">#include "<a class="code" href="scs_8h.html">scs.h</a>"</font> 00002 <font class="preprocessor">#include "<a class="code" href="scs__private_8h.html">scs_private.h</a>"</font> 00003 00004 <font class="comment">/* Compile only if gmp is present */</font> 00005 00006 <font class="preprocessor">#include <stdio.h></font> 00007 <font class="preprocessor">#include <stdlib.h></font> 00008 <font class="preprocessor">#include <stdarg.h></font> 00009 <font class="preprocessor">#include <math.h></font> 00010 <font class="preprocessor">#include "tbx_timing.h"</font> 00011 <font class="preprocessor">#ifdef HAVE_GMP_H</font> 00012 <font class="preprocessor"></font><font class="preprocessor">#include <gmp.h></font> 00013 <font class="preprocessor">#endif</font> 00014 <font class="preprocessor"></font><font class="preprocessor">#ifdef HAVE_MPFR_H</font> 00015 <font class="preprocessor"></font><font class="preprocessor">#include <mpfr.h></font> 00016 <font class="preprocessor">#endif</font> 00017 <font class="preprocessor"></font> 00018 00019 <font class="preprocessor">#define LOOPS 1000</font> 00020 <font class="preprocessor"></font> 00021 00022 00023 <font class="comment">/*</font> 00024 <font class="comment"> * Used to mesure time taken by the instruction "name"</font> 00025 <font class="comment"> */</font> 00026 <font class="preprocessor">#define TST_FCT(char, name)\</font> 00027 <font class="preprocessor"> </font><font class="comment">/* one untimed loop to load cache */</font> \ 00028 for(i=0; i< LOOPS-1; i++){ \ 00029 name;\ 00030 } \ 00031 TBX_GET_TICK(t1);\ 00032 for(i=0; i< LOOPS-1; i++){ \ 00033 name;\ 00034 } \ 00035 TBX_GET_TICK(t2);\ 00036 deltat = TBX_TICK_RAW_DIFF(t1, t2); \ 00037 printf("%28s : %lld ticks,\t ratio to FP +: %f\n", char, deltat, (double) deltat/tadd); 00038 00039 00040 <font class="comment">/* Similar to the previous, computes the time for one FP add so that</font> 00041 <font class="comment"> we have something to normalize against */</font> 00042 <font class="preprocessor">#define COMPUTE_TADD()\</font> 00043 <font class="preprocessor"> </font><font class="comment">/* one untimed loop to load cache */</font> \ 00044 for(i=0; i< LOOPS-1; i++){ \ 00045 d3 = double_table[i]*double_table[i+1];\ 00046 } \ 00047 TBX_GET_TICK(t1);\ 00048 for(i=0; i< LOOPS-1; i++){ \ 00049 d3 = double_table[i]*double_table[i+1];\ 00050 } \ 00051 TBX_GET_TICK(t2);\ 00052 tadd = TBX_TICK_RAW_DIFF(t1, t2); 00053 00054 00055 <font class="comment">/*</font> 00056 <font class="comment"> * Fct de test . </font> 00057 <font class="comment"> */</font> 00058 <font class="keywordtype">int</font> main(){ 00059 <a class="code" href="scs_8h.html#a3">scs_t</a> n1I; 00060 <font class="keyword">volatile</font> <font class="keywordtype">double</font> d3; 00061 <font class="keyword">volatile</font> <font class="keywordtype">int</font> int_r; 00062 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> <font class="keywordtype">long</font> deltat,tadd; 00063 tbx_tick_t t1, t2; 00064 <font class="keywordtype">int</font> i; 00065 00066 <font class="comment">/* table storing random number */</font> 00067 <a class="code" href="scs_8h.html#a3">scs_t</a> scs_table[LOOPS]; 00068 <font class="preprocessor">#ifdef HAVE_GMP_H</font> 00069 <font class="preprocessor"></font> mpf_t mpf_table[LOOPS]; 00070 mpf_t a; 00071 <font class="preprocessor">#endif</font> 00072 <font class="preprocessor"></font><font class="preprocessor">#ifdef HAVE_MPFR_H</font> 00073 <font class="preprocessor"></font> mpfr_t mpfr_table[LOOPS]; 00074 mpfr_t mpfr_a; 00075 <font class="preprocessor">#endif</font> 00076 <font class="preprocessor"></font> 00077 <font class="keywordtype">double</font> double_table[LOOPS]; 00078 <font class="keywordtype">int</font> int_table[LOOPS]; 00079 00080 00081 00082 printf(<font class="stringliteral">"Random generation ... "</font>); 00083 srand(42); 00084 <font class="keywordflow">for</font>(i=0; i<LOOPS; i++){ 00085 scs_rand(scs_table[i], 7); 00086 <font class="preprocessor">#if 1</font> 00087 <font class="preprocessor"></font> scs_table[i]->sign = 1; <font class="comment">/* only positive numbers */</font> 00088 <font class="preprocessor">#endif</font> 00089 <font class="preprocessor"></font> <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&double_table[i], scs_table[i]); 00090 int_table[i] = double_table[i]; 00091 <font class="preprocessor">#ifdef HAVE_GMP_H</font> 00092 <font class="preprocessor"></font> mpf_init2(mpf_table[i], (SCS_NB_BITS*SCS_NB_WORDS) ); 00093 scs_get_mpf(scs_table[i], mpf_table[i]); 00094 <font class="preprocessor">#endif</font> 00095 <font class="preprocessor"></font><font class="preprocessor">#ifdef HAVE_MPFR_H</font> 00096 <font class="preprocessor"></font> mpfr_init2(mpfr_table[i], (SCS_NB_BITS*SCS_NB_WORDS) ); 00097 scs_get_mpfr(scs_table[i], mpfr_table[i]); 00098 <font class="preprocessor">#endif</font> 00099 <font class="preprocessor"></font> } 00100 printf(<font class="stringliteral">" done \n\n"</font>); 00101 00102 00103 <font class="preprocessor">#ifdef HAVE_GMP_H</font> 00104 <font class="preprocessor"></font> mpf_init2(a, (SCS_NB_BITS*SCS_NB_WORDS)); 00105 mpf_set(a, mpf_table[1]); 00106 <font class="preprocessor">#endif</font> 00107 <font class="preprocessor"></font><font class="preprocessor">#ifdef HAVE_MPFR_H</font> 00108 <font class="preprocessor"></font> mpfr_init2(mpfr_a, (SCS_NB_BITS*SCS_NB_WORDS)); 00109 mpfr_set(mpfr_a, mpfr_table[1], GMP_RNDN); 00110 <font class="preprocessor">#endif</font> 00111 <font class="preprocessor"></font> 00112 printf(<font class="stringliteral">"These first timings don't mean much\n"</font>); 00113 COMPUTE_TADD() 00114 TST_FCT(<font class="stringliteral">"int a + b "</font>, int_r = int_table[i]+int_table[i+1]) 00115 TST_FCT(<font class="stringliteral">"int a * b "</font>, d3 = int_table[i]*int_table[i+1]) 00116 TST_FCT(<font class="stringliteral">"double a + b "</font>, d3 = double_table[i]+double_table[i+1]) 00117 TST_FCT(<font class="stringliteral">"double a * b "</font>, d3 = double_table[i]*double_table[i+1]) 00118 TST_FCT(<font class="stringliteral">"double a / b "</font>, d3 = double_table[i]/double_table[i+1]) 00119 printf(<font class="stringliteral">"\n"</font>); 00120 00121 printf(<font class="stringliteral">"Here come the meaningful timings\n"</font>); 00122 <font class="comment">/* scs library test */</font> 00123 TST_FCT(<font class="stringliteral">"conversion scs=>doubles "</font>, <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&double_table[i], scs_table[i])) 00124 TST_FCT(<font class="stringliteral">"conversion doubles=>scs "</font>, <a class="code" href="double2scs_8c.html#a0">scs_set_d</a>(n1I, double_table[i])) 00125 TST_FCT(<font class="stringliteral">"scs_add "</font>, <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(n1I, scs_table[i], scs_table[i+1])) 00126 TST_FCT(<font class="stringliteral">"scs_sub "</font>, <a class="code" href="addition__scs_8c.html#a9">scs_sub</a>(n1I, scs_table[i], scs_table[i+1])) 00127 TST_FCT(<font class="stringliteral">"scs_add_no_renorm "</font>,<a class="code" href="addition__scs_8c.html#a4">scs_add_no_renorm</a>(n1I, scs_table[i], scs_table[i+1])) 00128 TST_FCT(<font class="stringliteral">"scs_mul "</font>, <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(n1I, scs_table[i], scs_table[i+1])) 00129 TST_FCT(<font class="stringliteral">"scs_mul_ui "</font>, <a class="code" href="multiplication__scs_8c.html#a4">scs_mul_ui</a>(scs_table[i], 31242436)) 00130 TST_FCT(<font class="stringliteral">"scs_square "</font>, <a class="code" href="multiplication__scs_8c.html#a3">scs_square</a>(n1I, scs_table[i])) 00131 <font class="comment">// TST_FCT("scs_fma ", scs_fma(n1I, scs_table[i], scs_table[i], scs_table[i+1]))</font> 00132 TST_FCT(<font class="stringliteral">"add + mul scs "</font>, <a class="code" href="multiplication__scs_8c.html#a2">scs_mul</a>(n1I, scs_table[i], scs_table[i+1]); <a class="code" href="addition__scs_8c.html#a8">scs_add</a>(n1I, n1I, scs_table[i])) 00133 00134 TST_FCT(<font class="stringliteral">"renormalization scs "</font>, <a class="code" href="addition__scs_8c.html#a1">scs_renorm</a>(scs_table[i])) 00135 TST_FCT(<font class="stringliteral">"scs_div "</font>, <a class="code" href="division__scs_8c.html#a1">scs_div</a>(n1I, scs_table[i], scs_table[i+1])) 00136 printf(<font class="stringliteral">"\n"</font>); 00137 00138 <font class="preprocessor">#ifdef HAVE_GMP_H</font> 00139 <font class="preprocessor"></font> <font class="comment">/* mpf (gmp) library test */</font> 00140 TST_FCT(<font class="stringliteral">"Conversion mpf=>double"</font>, double_table[i] = mpf_get_d(mpf_table[i])) 00141 TST_FCT(<font class="stringliteral">"Conversion double=>mpf "</font>, mpf_set_d(a, double_table[i])) 00142 TST_FCT(<font class="stringliteral">"Addition mpf "</font>, mpf_add(a, mpf_table[i], mpf_table[i+1])) 00143 TST_FCT(<font class="stringliteral">"Multiplication mpf "</font>, mpf_mul(a, mpf_table[i], mpf_table[i+1])) 00144 TST_FCT(<font class="stringliteral">"Multiplication_with_int mpf "</font>, mpf_mul_ui(a, mpf_table[i], 3254353)) 00145 TST_FCT(<font class="stringliteral">"Division mpf "</font>, mpf_div(a, mpf_table[i], mpf_table[i+1])) 00146 printf(<font class="stringliteral">"\n"</font>); 00147 <font class="preprocessor">#endif</font> 00148 <font class="preprocessor"></font> 00149 00150 <font class="preprocessor">#ifdef HAVE_MPFR_H</font> 00151 <font class="preprocessor"></font> <font class="comment">/* mpf (gmp) library test */</font> 00152 TST_FCT(<font class="stringliteral">"Conversion mpfr=>double"</font>, double_table[i] = mpfr_get_d(mpfr_table[i],GMP_RNDN)) 00153 TST_FCT(<font class="stringliteral">"Conversion double=>mpfr "</font>, mpfr_set_d(mpfr_a, double_table[i],GMP_RNDN)) 00154 TST_FCT(<font class="stringliteral">"Addition mpfr "</font>, mpfr_add(mpfr_a, mpfr_table[i], mpfr_table[i+1],GMP_RNDN)) 00155 TST_FCT(<font class="stringliteral">"Multiplication mpfr "</font>, mpfr_mul(mpfr_a, mpfr_table[i], mpfr_table[i+1],GMP_RNDN)) 00156 TST_FCT(<font class="stringliteral">"Multiplication_with_int mpfr "</font>, mpfr_mul_ui(mpfr_a, mpfr_table[i], 3254353,GMP_RNDN)) 00157 TST_FCT(<font class="stringliteral">"Division mpfr "</font>, mpfr_div(mpfr_a, mpfr_table[i], mpfr_table[i+1],GMP_RNDN)) 00158 printf(<font class="stringliteral">"\n"</font>); 00159 <font class="preprocessor">#endif</font> 00160 <font class="preprocessor"></font> 00161 00162 00163 00164 <font class="keywordflow">return</font> 0; 00165 } 00166 </pre></div><hr><address align="right"><small>Generated on Tue Jun 17 10:15:51 2003 for SCSLib by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address> </body> </html>