OpenMP


a
Eigenschaften
a

● OpenMP ist nur für Parallelrechner mit gemeinsamem Speicher geeignet.
● Schnittstellen für Fortran und C/C
● Industriestandard (V1.0 in 1998, V2.0 in 2002, V2.5 in 2005, V3.0 in 2008)
● Erhältlich auf vielen Plattformen (vergleichbar mit MPI)
● erlaubt eine schrittweise Parallelisierung
● kommerziell und als OpenSource (Sun Studio und GCC) verfügbar
● URL: http://www.openmp.org , Text des Standards auf der Webseite verfügbar.

a
Informationsmaterial
a

a
Umsetzung im Code
a

#pragma omp <Direktive> <Klauseln>
{
   <referenzierter Bereich, enthält C/C++ Anweisungen>
}



a
Prinzip
a
  • Aufteilung eines Bereichs auf verschiedene Threads
  • Bearbeitung mit lokalen Variablen in verschiedenen Threads


a
Beispiel
a

#include <omp.h>
int main () {
    int nthreads, tid;
    omp_set_num_threads(3);
    printf("maxthreads=%d\n", omp_get_max_threads());
    /* Fork a team of threads giving them their
    own copies of variables */

    #pragma omp parallel private(nthreads, tid)
    {
        /* Obtain and print thread id */
        tid = omp_get_thread_num();
        printf("Hello World from thread = %d\n", tid);
        /* Only master thread does this */
        if (tid == 0)
        {
            nthreads = omp_get_num_threads();
            printf("Number of threads = %d\n", nthreads);
        }
    }
    /* All threads join master thread and terminate */
    return 0;
}


Another example
    #pragma omp parallel for
    for (mcy=0; mcy<mv_size_y; mcy++)
    {
        y = mcy * size + m_offset_y;
        for (mcx=0; mcx<mv_size_x; mcx++)
        {
                ....
        }
    }


a
Compile
a

use -fopenmp

LIBS="-fopenmp -lraspicam_cv -lraspicam `pkg-config --libs opencv`"
SRC="imageproc.cpp"
g++ -O3 -mcpu=cortex-a7 -mfpu=neon-vfpv4 -ftree-vectorize -mfloat-abi=hard -o imageproc $SRC $LIBS &&  ./imageproc


a
Run programm
a

export OMP_NUM_THREADS=4
./my_prog



a
Implementierung
a

OpenMP anders als der MPI-Standard. Mit Compiler-Anweisungen (pragma) wird Parallelverarbeitung realisiert. Am Anfang leichter, aber nicht ganz Problemfrei.

lib32gomp1
GCC OpenMP (GOMP) support library (32bit)
lib32gomp1-dbg
GCC OpenMP (GOMP) support library (32 bit debug symbols)

GnuCompiler


CategoryStudiumSE
Siehe auch Mpi - Algorithmen
CLinux
Mpi
MpiMpdRing
ParallelRechner
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki