ALIs
kommt nochBlitz++: Object oriented Scientific Computing
What is Blitz++?
Blitz++ is a C++ class library for scientific computing which provides high performance matrix operations by use of template techniques. Blitz++ is distributed under an open source license.
How to use Blitz++ on the LRZ HPC systems
Version 0.9 of Blitz++ is available on the Itanium and X86_64 systems. The Intel C++ compiler (icpc) must be used to compile programs using Blitz++.
Access to the Blitz installations is provided via the environment module blitz:
module load blitz
This will suitably set all required environment variables. To compile your application, please type something like
icpc <options> $BLITZ_INC foo.cpp
For linkage, issue the command
icpc -o myprog.exe myprog.o foo.o ... $BLITZ_LIB
A recommended setting of optimization and standard conformance flags for compilation is
-O3 -Zp16 -ip -ansi_alias -ansi
Performance numbers observed on LRZ systems
The performance comparisons provided in the following table were measured with the benchmark programs provided with the Blitz++ distribution and the automatically generated optimization flags settings. Version 9.1.51 of the Intel compilers was used to perform the measurements. All numbers given are in MFlop/s.
| Variant | Acou3d | Acoustic (2d) | ||
|---|---|---|---|---|
| 1.6 GHz/9M Montecito | 3.6GHz/1M EM64T | 1.6 GHz/9M Montecito | 3.6GHz/1M EM64T | |
| Blitz++ best case | 430 | 900 | 710 | 830 |
| Blitz++ raw | 45 | 510 | 440 | 400 |
| F90 tuned | 2290 | 1440 | 2100 | 1350 |
| F90 untuned | 1270 | 750 | 1530 | 670 |
Not quite on par ... my personal (not unbiased) conclusion from this:
- Use Fortran (most especially on Itanium)
- If you are forced (or enticed) to use C++, at least use Blitz++