OpenMP

From HP-SEE Wiki

Jump to: navigation, search

Contents

Information

Authors/Maintainers

Summary

The OpenMP Application Program Interface (API) supports multi-platform shared- memory parallel programming in C/C++ and Fortran on all architectures, including Unix platforms and Windows NT platforms. Jointly defined by a group of major computer hardware and software vendors, OpenMP is a portable, scalable model that gives shared-memory parallel programmers a simple and flexible interface for developing parallel applications for platforms ranging from the desktop to the supercomputer. OpenMP is an implementation of multithreading, a method of parallelization whereby the master "thread" (a series of instructions executed consecutively) "forks" a specified number of slave "threads" and a task is divided among them. The threads then run concurrently, with the runtime environment allocating threads to different processors. The section of code that is meant to run in parallel is marked accordingly, with a preprocessor directive that will cause the threads to form before the section is executed. Each thread has an "id" attached to it which can be obtained using a function (called omp_get_thread_num()). The thread id is an integer, and the master thread has an id of "0". After the execution of the parallelized code, the threads "join" back into the master thread, which continues onward to the end of the program. By default, each thread executes the parallelized section of code independently. "Work- sharing constructs" can be used to divide a task among the threads so that each thread executes its allocated part of the code. Both task parallelism and data parallelism can be achieved using OpenMP in this way. The runtime environment allocates threads to processors depending on usage, machine load and other factors. The number of threads can be assigned by the runtime environment based on environment variables or in code using functions. The OpenMP functions are included in a header file labelled "omp.h" in C/C++.

Features

  • Listed features

Architectural/Functional Overview

  • high level design info, how it works, performance - may be a link, or several links

Usage Overview

Dependacies

  • list of all relevant dependencies on other libraries

HP-SEE Applications

  • EagleEye (Feature Extraction from Satellite Images Using a Hybrid Computing Architecture)
  • HP-SEE (Design of fullerene and metal-diothiolene-based materials for photonic applications)
  • GIM (Geophysical Inversion Modeling)
  • HMLQCD (Hadron Masses from Lattice QCD)
  • NUQG (Numerical study of ultra-cold quantum gases)
  • HC-MD-QM-CS (Hybrid Classical/Quantum Molecular Dynamics Quantum Mechanical Computer Simulation of Condensed Phases)
  • GENETATOMIC (Genetic algorithms in atomic collisions)
  • AMRCM (Parallel algorithm and program for the resolving continuum mechanics equations using Adaptive Mesh Refinement)
  • DNAMA (DNA Multicore Analysis)
  • MDSCS (Molecular Dynamics Study of Complex systems)


Resource Centers

  • BG, BG
  • HPCG, BG
  • IFIN_BC, RO
  • IFIN_Bio, RO
  • InfraGRID, RO
  • ISS_GPU, RO
  • NCIT-Cluster, RO
  • NIIFI SC, HU
  • PARADOX, RS

Usage by other projects and communities

  • If any

Recommendations for Configuration and Usage

Depending on the compiler one is using, a number of different OpenMP 3.0 features are available, and the performance is sometimes significantly different from one OpenMP implementation to another.