ALIs

kommt noch

Blitz++: 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++