Dot product can be auto-vectorized only with
Possible solutions:
So I wrote implementations of dot product for real and complex numbers.
Complex version is similar. The main loop:
There are gdc and ldc implementations, but ldc implementation was not tested. Source code is available at GitHub.
fast-math or similar compiler option. fast-math allows compiler to use associative floating point transformations. Other math functions like exponent can be damaged consequently.
Possible solutions:
- Compile
fast_mathcode from other program separately and then link it. This is easy solution. However this is a step back to C. - To introduce a
@fast_mathattribute. This is hard to realize. But I hope this will be done for future compilers. - Do vectorization yourself. In that case you need to realize SIMD accessory functions like unaligned load.
So I wrote implementations of dot product for real and complex numbers.
Code
Dot product for real numbers:Complex version is similar. The main loop:
There are gdc and ldc implementations, but ldc implementation was not tested. Source code is available at GitHub.
Benchmarks
| Processor | Intel i5-4570, Haswell |
| Instruction set | AVX2 |
| System | Ubuntu 13.10 |
| Compiler | GDC-4.8.1 |
| Compiler flags | -march=native -fno-bounds-check -frename-registers -frelease -O3 |
.png)
.png)
.png)
.png)
apparently for short vectors (like those used in 3D math), the trivial one performs the best in all tests.
ReplyDelete