File: misc.xhtml

package info (click to toggle)
sleef 3.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,572 kB
  • sloc: ansic: 45,451; sh: 239; java: 151; makefile: 128
file content (228 lines) | stat: -rw-r--r-- 8,738 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=0.4"/>
<meta name="google" content="notranslate" />
<link rel="canonical" href="https://sleef.org/misc.xhtml" />
<link rel="icon" href="favicon.png" />
<link rel="stylesheet" type="text/css" href="texlike.css"/>
<link rel="stylesheet" type="text/css" href="sleef.css"/>
<title>SLEEF - Other tools included in the package</title>
</head>
<body translate="no" class="notranslate">
<h1>SLEEF Documentation - Other tools included in the package</h1>

<h2>Table of contents</h2>

<ul class="none" style="font-family: arial, sansserif; padding-left: 0.5cm;">
  <li><a class="underlined" href="index.xhtml">Introduction</a></li>
  <li><a class="underlined" href="compile.xhtml">Compiling and installing the library</a></li>
  <li><a class="underlined" href="purec.xhtml">Math library reference</a></li>
  <li><a class="underlined" href="dft.xhtml">DFT library reference</a></li>
  <li>&nbsp;</li>
  <li><a class="underlined" href="misc.xhtml">Other tools included in the package</a></li>
    <ul class="disc">
      <li><a href="misc.xhtml#testerlibm">Testers for libm</a></li>
      <li><a href="misc.xhtml#testerdft">Testers for DFT</a></li>
      <li><a href="misc.xhtml#gencoef">Tool for generating coefficients</a></li>
      <li><a href="misc.xhtml#benchmark">Benchmarking tool</a></li>
    </ul>
  <li>&nbsp;</li>
  <li><a class="underlined" href="benchmark.xhtml">Benchmark results</a></li>
  <li><a class="underlined" href="additional.xhtml">Additional notes</a></li>
</ul>

<h2 id="testerlibm">Libm tester</h2>

<p class="noindent">
  SLEEF libm has three kinds of testers, and each kind of testers has
  its own role.
</p>

<p>
  The first kind of testers consists of a tester and an IUT (which
  stands for Implementation Under Test.) The role for this tester is
  to perform a perfunctory set of tests to check if the build is
  correct. It also performs regression tests. The tester and IUT are
  built as separate executables, and communicate with each other using
  a pipe. Since these two are separate, the IUT can be implemented
  with an exotic languages or on an operating system that does not
  support libraries required for testing. It is also possible to
  perform a test over the network.
</p>

<p>
  The second kind of testers are designed to run continuously. It
  repeats randomly generating arguments for each function, and
  comparing the results of each function to the results calculated
  with the corresponding function in the MPFR library. This tester is
  expected to find bugs if it is run for sufficiently long time.
</p>

<p>
  The third kind of testers are for testing if bit-identical results
  are returned from the functions that are supposed to return such
  results. The MD5 hash value of all returned values from each
  function is calculated and checked if it matches the precomputed
  value.
</p>


<h2 id="testerdft">DFT tester</h2>

<p class="noindent">
  SLEEF DFT has three kinds of testers. The first ones, named
  naivetest, compare the results computed by SLEEF DFT with those by a
  naive DFT implementation. These testers cannot be built with MSVC
  since complex data types are not supported. The second testers,
  named fftwtest, compare the results of computation between SLEEF DFT
  and FFTW. This test requires FFTW library. The third testers, named
  roundtriptest, executes a forward transform followed by a backward
  transform. Then, it compares the results with the original data.
  While this test does not require external library and it runs on all
  environment, there could be cases where this test does not find some
  flaw. The roundtrip testers are used only if FFTW is not available.
</p>


<h2 id="gencoef">Gencoef</h2>

<p class="noindent">
  Gencoef is a small tool for generating the coefficients for
  polynomial approximation used in the kernels.
</p>

<p>
  In order to change the configurations, please edit gencoefdp.c. In
  the beginning of the file, specifications of the parameters for
  generating coefficients are listed. Please enable one of them by
  changing #if. Then, run make to compile the source code. Run the
  gencoef, and it will show the generated coefficients in a few
  minutes. It may take longer time depending on the settings.
</p>

<p>
  There are two phases of the program. The first phase is the
  regression for minimizing the maximum relative error. This problem
  can be reduced to a linear programming problem, and the Simplex
  method is used in this implementation. This requires multi-precision
  calculation, and the implementation uses the MPFR library. In this
  phase, it uses only a small number of values (specified by the macro
  S, usually less than 100) within the input domain of the kernel
  function to approximate the function. The function to approximate is
  given by FRFUNC function. Specifying higher values for S does not
  always give better results.
</p>

<p>
  The second phase is to optimize the coefficients so that it gives
  good accuracy with double precision calculation. In this phase, it
  checks 10000 points (specified by the macro Q) within the specified
  argument range to see if the polynomial gives good error bounds. In
  some cases, the last few terms have to be calculated in higher
  precision in order to achieve 1 ULP or better overall accuracy, and
  this implementation can take care of that. The L parameter specifies
  the number of high precision coefficients.
</p>

<p>
  In some cases, it is desirable to fix the last few coefficients to
  values like 1 or 0.5. This can be specified if you define FIXCOEF0
  macro.
</p>

<p>
  Finding a set of good parameters is not a straightforward process.
</p>


<h2 id="benchmark">Benchmarking tool</h2>

<p class="noindent">
  SLEEF has a tool for measuring and plotting execution time of each
  function in the library. It consists of an executable for
  measurements, a makefile for driving measurement and plotting, and a
  couple of scripts.
</p>

<p>
  In order to start a measurement, you need to first build the
  executable for measurement. CMake builds the executable along with
  the library. Please refer to <a class="underlined"
  href="compile.xhtml">compiling and installing the library</a> for
  this.
</p>

<p>
  Then, change directory to sleef-3.X/src/libm-benchmarks/. You also
  need to set the build directory to BUILDDIR environment
  variable. You also need Java runtime environment.
</p>

<pre class="command">$ export BUILDDIR=$PATH:`pwd`/../../build</pre>

<p>
  Type "make measure". After compiling the tools, it will prompt a
  label for measurement. After you input a label, measurement
  begins. After a measurement finishes, you can repeat measurements
  under different configurations. If you want to measure on a
  different computer, please copy the entire directory on to that
  computer and continue measurements. If you have Intel Compiler
  installed on your computer, you can type "make measureSVML" to
  measure the computation time of SVML functions.
</p>

<pre class="command">$ make measure
./measure.sh benchsleef
     ...
Enter label of measurement(e.g. My desktop PC) : Skylake
Measurement in progress. This may take several minutes.
Sleef_sind2_u10
Sleef_cosd2_u10
Sleef_tand2_u10
Sleef_sincosd2_u10
     ...
Sleef_atanf8_u10
Sleef_atan2f8_u10
Sleef_atanf8_u35
Sleef_atan2f8_u35

Now, you can plot the results of measurement by 'make plot'.
You can do another measurement by 'make measure'.
You can start over by 'make restart'.

$ make plot
javac ProcessData.java
java ProcessData *dptrig*.out
gnuplot script.out
mv output.png trigdp.png
java ProcessData *dpnontrig*.out
gnuplot script.out
mv output.png nontrigdp.png
java ProcessData *sptrig*.out
gnuplot script.out
mv output.png trigsp.png
java ProcessData *spnontrig*.out
gnuplot script.out
mv output.png nontrigsp.png
$ &block;</pre>

<p>
  Then type "make plot" to generate graphs. You need to have JDK and
  gnuplot installed on your computer. Four graphs are generated :
  trigdp.png, nontrigdp.png, trigsp.png and nontrigsp.png. Please see our
  <a class="underlined" href="benchmark.xhtml">benchmark results</a>
  for an example of generated graphs by this tool.
</p>

<p class="footer">
  Copyright &copy; <!--YEAR--> SLEEF Project.<br/>
  SLEEF is open-source software and is distributed under the Boost Software License, Version 1.0.
</p>

<!--TEST-->

</body>
</html>