Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > ff8e7344076b5fbaa54d805766a057bd > files > 41

libscs-devel-1.4.1-4.fc15.i686.rpm

<!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> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </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 &lt;stdio.h&gt;</font>
00007 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
00008 <font class="preprocessor">#include &lt;stdarg.h&gt;</font>
00009 <font class="preprocessor">#include &lt;math.h&gt;</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 &lt;gmp.h&gt;</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 &lt;mpfr.h&gt;</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&lt; LOOPS-1; i++){ \
00029            name;\
00030            } \
00031          TBX_GET_TICK(t1);\
00032          for(i=0; i&lt; 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&lt; LOOPS-1; i++){ \
00045            d3 = double_table[i]*double_table[i+1];\
00046            } \
00047          TBX_GET_TICK(t1);\
00048          for(i=0; i&lt; 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&lt;LOOPS; i++){ 
00085     scs_rand(scs_table[i], 7);  
00086 <font class="preprocessor">#if 1</font>
00087 <font class="preprocessor"></font>    scs_table[i]-&gt;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>(&amp;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=&gt;doubles "</font>, <a class="code" href="scs2double_8c.html#a0">scs_get_d</a>(&amp;double_table[i], scs_table[i]))
00124   TST_FCT(<font class="stringliteral">"conversion doubles=&gt;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=&gt;double"</font>, double_table[i] = mpf_get_d(mpf_table[i]))
00141   TST_FCT(<font class="stringliteral">"Conversion double=&gt;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=&gt;double"</font>, double_table[i] = mpfr_get_d(mpfr_table[i],GMP_RNDN))
00153   TST_FCT(<font class="stringliteral">"Conversion double=&gt;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>