20 research outputs found
LIKWID: Lightweight Performance Tools
Exploiting the performance of today's microprocessors requires intimate
knowledge of the microarchitecture as well as an awareness of the ever-growing
complexity in thread and cache topology. LIKWID is a set of command line
utilities that addresses four key problems: Probing the thread and cache
topology of a shared-memory node, enforcing thread-core affinity on a program,
measuring performance counter metrics, and microbenchmarking for reliable upper
performance bounds. Moreover, it includes a mpirun wrapper allowing for
portable thread-core affinity in MPI and hybrid MPI/threaded applications. To
demonstrate the capabilities of the tool set we show the influence of thread
affinity on performance using the well-known OpenMP STREAM triad benchmark, use
hardware counter tools to study the performance of a stencil code, and finally
show how to detect bandwidth problems on ccNUMA-based compute nodes.Comment: 12 page
Expression Templates Revisited: A Performance Analysis of the Current ET Methodology
In the last decade, Expression Templates (ET) have gained a reputation as an
efficient performance optimization tool for C++ codes. This reputation builds
on several ET-based linear algebra frameworks focused on combining both elegant
and high-performance C++ code. However, on closer examination the assumption
that ETs are a performance optimization technique cannot be maintained. In this
paper we demonstrate and explain the inability of current ET-based frameworks
to deliver high performance for dense and sparse linear algebra operations, and
introduce a new "smart" ET implementation that truly allows the combination of
high performance code with the elegance and maintainability of a
domain-specific language.Comment: 16 pages, 7 figure
Energy aware scheduling model and online heuristics for stencil codes on heterogeneous computing architectures
Verbesserung der Effizienz für iterative numerische Algorithmen auf modernen Architekturen
For many numerical codes the transport of data from main memory to the registers is commonly considered to be the main limiting factor to achieve high performance on present micro architectures. This fact is referred to as the memory wall. A lot of research is targeting this point on different levels. This covers for example code transformations and architecture aware data structures to achieve an optimal usage of the memory hierarchy found in all present micro architectures. This work shows that on modern micro architectures it is necessary to also take the requirements of the Single Instruction Multiple Data (SIMD) programming paradigm and data prefetching into account to reach high efficiencies. In this thesis the chain from high level algorithmic optimizations over the code generation process involving the compiler and the limitations and influences of the instruction set architecture down to the micro architecture of the underlying hardware are analyzed. As a result we present a strategy to achieve a high efficiency for memory bandwidth limited algorithms on modern architectures. The success of this strategy is shown on the algorithmic class of grid based numerical linear equation solvers: A 2D Red-Black Gauss-Seidel smoother implementation for the x86/x86-64 architecture and a 3D multigrid implementation for the IA64 architecture.Für viele numerischen Programme wird der Transport der Daten vom Hauptspeicher in die Register als der wichtigste leistungbegrenzende Einfluss angesehen um hohe Leistung auf derzeitigen Mikroarchitekturen zu erreichen. Diese Tatsache wird oft als memory wall bezeichnet. Umfassende Forschungsprojekte beschäftigen sich mit diesem Punkt auf unterschiedlichen Ebenen. Dies beinhaltet z.B. Programmcodetransformationen und auf die Architektur zugeschnittene Datenstruktur um eine bestmögliche Nutzung der Speicherhierachie auf derzeitigen Mikroarchitekturen zu erreichen. Dies vorliegende Arbeit zeigt, das es auf modernen Mikroarchitekturen notwendig ist auch die Anforderungen von SIMD und Datenvorausladetechniken zu beachten um ein hohe Effizienz zu erreichen. In dieser Dissertation wird die Kette von der Optimierungen auf Hochsprachenebene über den Programmcodegenerierungsprozess und den Beschränkungen und Einflüssen des Instruktionssatzes bis zur Mikroarchitektur der zugrundeliegenden Hardware untersucht. Als Ergebnis wird eine Strategie präsentiert um eine hohe Leistung für initial speicherbandbreitenbegrenzte Algorithmen auf modernen Architekturen zu erreichen. Der Erfolg dieser Herangehensweise wird anhand der algorithmischen Klasse der Gitterbasierten numerischen Gleichungslöser: Einer Implementierung eines 2D Rot-Schwarz Gauss-Seidel Glätters für die x86/x86-64 Architektur und eine 3D Mehrgitter Implementierung für die IA64 Architektur