[Dune] Dune on Windows MinGW
Jö Fahlke
jorrit at jorrit.de
Wed May 4 17:57:12 CEST 2011
Am Wed, 4. May 2011, 15:28:57 +0200 schrieb Carsten Gräser:
> You can check the optimization yourself with the attached example.
Thanks Carsten :)
I adapted your example to output timings for each operation. I also added a
fourth example and made the mathematical operation exchangable. The new
programm is attached, the results are below.
The essence is that Carsten is right, with one exception. For g++-4.1 only
exp(1.0) seems to be optimized in this way. So it boils down to how serious
we take our commitment to support g++-4.1.
Bye,
Jö.
Example 1:
static const double e = EXPR(ARG);
for (int i=0; i<n; ++i)
y += e;
Example 2:
template<>
struct MathematicalConstants< double >
{
static double e () { return EXPR(ARG); }
};
for (int i=0; i<n; ++i)
y += MathematicalConstants<double>::e();
Example 3:
x = ARG;
for (int i=0; i<n; ++i)
y += EXPR(x);
Example 4:
const double &local_const() {
static const double e = EXPR(ARG);
return e;
}
for (int i=0; i<n; ++i)
y += local_const();
I used n=500000000 and -O3. Times are in seconds. g++-4.5 is a Debian
prerelease snapshot.
#define EXPR(x) std::exp(x)
#define ARG 1.0
| | Example 1 | Example 2 | Example 3 | Example 4 |
|---------+-----------+-----------+-----------+-----------|
| g++-4.1 | 1.81 | 1.80 | 34.32 | 1.81 |
| g++-4.3 | 0.60 | 0.61 | 34.19 | 0.61 |
| g++-4.4 | 0.60 | 0.60 | 34.39 | 0.60 |
| g++-4.5 | 0.59 | 0.60 | 34.57 | 0.60 |
| clang++ | 1.80 | 1.80 | 35.03 | 1.81 |
#define EXPR(x) std::acos(x)
#define ARG -1.0
| | Example 1 | Example 2 | Example 3 | Example 4 |
|---------+-----------+-----------+-----------+-----------|
| g++-4.1 | 1.81 | 24.38 | 21.42 | 1.81 |
| g++-4.3 | 0.60 | 0.60 | 21.42 | 0.60 |
| g++-4.4 | 0.62 | 0.60 | 21.98 | 0.60 |
| g++-4.5 | 0.60 | 0.61 | 22.55 | 0.60 |
| clang++ | 1.80 | 1.81 | 21.95 | 1.81 |
#define EXPR(x) std::log(x)
#define ARG 2.0
| | Example 1 | Example 2 | Example 3 | Example 4 |
|---------+-----------+-----------+-----------+-----------|
| g++-4.1 | 1.80 | 24.80 | 20.92 | 1.81 |
| g++-4.3 | 0.60 | 0.60 | 20.95 | 0.60 |
| g++-4.4 | 0.60 | 0.60 | 20.54 | 0.60 |
| g++-4.5 | 0.60 | 0.61 | 20.71 | 0.60 |
| clang++ | 1.81 | 1.81 | 20.85 | 1.80 |
--
Kiss a non-smoker; taste the difference.
-- fortune
-------------- next part --------------
A non-text attachment was scrubbed...
Name: compile_time_expressions.cc
Type: text/x-c++src
Size: 1975 bytes
Desc: not available
URL: <https://lists.dune-project.org/pipermail/dune/attachments/20110504/5f462601/attachment.cc>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 828 bytes
Desc: Digital signature
URL: <https://lists.dune-project.org/pipermail/dune/attachments/20110504/5f462601/attachment.sig>
More information about the Dune
mailing list