OpenMP


1. Eigenschaften


● 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.

2. Informationsmaterial

3. Umsetzung im Code


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



4. Prinzip


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


5. Beispiel


#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++)
        {
                ....
        }
    }


6. Compile


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


7. Run programm


export OMP_NUM_THREADS=4
./my_prog



8. Implementierung


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 - CLinuxMpiMpiMpdRingParallelRechner

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki