🗊Презентация Стандарт OpenMP. Информационные ресурсы. Лекция 3

Нажмите для полного просмотра!
Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №1Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №2Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №3Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №4Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №5Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №6Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №7Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №8Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №9Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №10Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №11Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №12Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №13Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №14Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №15Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №16Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №17Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №18Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №19Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №20Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №21Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №22Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №23Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №24Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №25Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №26Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №27Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №28Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №29Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №30Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №31Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №32

Вы можете ознакомиться и скачать презентацию на тему Стандарт OpenMP. Информационные ресурсы. Лекция 3. Доклад-сообщение содержит 32 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №1
Описание слайда:

Слайд 2





www.openmp.org
www.openmp.org
http://parallel.ru/tech/tech_dev/openmp.html
www.llnl.gov/computing/tutorials/workshops/workshop/openMP/MAIN.html
Chandra, R., Menon R., Dagum, L., Kohr, D., Maydan, D., McDonald, J. (2000). Parallel Programming in OpemMP. Morgan Kaufmann Publishers.
Описание слайда:
www.openmp.org www.openmp.org http://parallel.ru/tech/tech_dev/openmp.html www.llnl.gov/computing/tutorials/workshops/workshop/openMP/MAIN.html Chandra, R., Menon R., Dagum, L., Kohr, D., Maydan, D., McDonald, J. (2000). Parallel Programming in OpemMP. Morgan Kaufmann Publishers.

Слайд 3





OpenMP – стандарт параллельного программирования для многопроцессорных систем с общей памятью.
OpenMP – стандарт параллельного программирования для многопроцессорных систем с общей памятью.
Модели параллельного компьютера с произвольным доступом к памяти:
PRAM – parallel 
    random-access 
    machine
Описание слайда:
OpenMP – стандарт параллельного программирования для многопроцессорных систем с общей памятью. OpenMP – стандарт параллельного программирования для многопроцессорных систем с общей памятью. Модели параллельного компьютера с произвольным доступом к памяти: PRAM – parallel random-access machine

Слайд 4





OpenMP Fortran API v1.0 (1997)
OpenMP Fortran API v1.0 (1997)
OpenMP C/C++ API v1.0 (1998)
OpenMP Fortran API v2.0 (2000)
OpenMP C/C++ API v2.0 (2002)
OpenMP C/C++/ Fortran API v2.5 (2005)
OpenMP C/C++/ Fortran API v3.0 (2008)
OpenMP C/C++/ Fortran API v4.0 (2013)
Разработкой занимается OpenMP ARB
Описание слайда:
OpenMP Fortran API v1.0 (1997) OpenMP Fortran API v1.0 (1997) OpenMP C/C++ API v1.0 (1998) OpenMP Fortran API v2.0 (2000) OpenMP C/C++ API v2.0 (2002) OpenMP C/C++/ Fortran API v2.5 (2005) OpenMP C/C++/ Fortran API v3.0 (2008) OpenMP C/C++/ Fortran API v4.0 (2013) Разработкой занимается OpenMP ARB

Слайд 5





OpenMP Fortran API v1.0 (1997)
OpenMP Fortran API v1.0 (1997)
OpenMP C/C++ API v1.0 (1998)
OpenMP Fortran API v2.0 (2000)
OpenMP C/C++ API v2.0 (2002)
OpenMP C/C++/ Fortran API v2.5 (2005)
OpenMP C/C++/ Fortran API v3.0 (2008)
OpenMP C/C++/ Fortran API v4.0 (2013)
Разработкой занимается OpenMP ARB
Описание слайда:
OpenMP Fortran API v1.0 (1997) OpenMP Fortran API v1.0 (1997) OpenMP C/C++ API v1.0 (1998) OpenMP Fortran API v2.0 (2000) OpenMP C/C++ API v2.0 (2002) OpenMP C/C++/ Fortran API v2.5 (2005) OpenMP C/C++/ Fortran API v3.0 (2008) OpenMP C/C++/ Fortran API v4.0 (2013) Разработкой занимается OpenMP ARB

Слайд 6





Поэтапное (инкрементальное) распараллеливание
Поэтапное (инкрементальное) распараллеливание
Единственность разрабатываемого кода
Эффективность
Стандартизированность
Описание слайда:
Поэтапное (инкрементальное) распараллеливание Поэтапное (инкрементальное) распараллеливание Единственность разрабатываемого кода Эффективность Стандартизированность

Слайд 7





Использование потоков
Использование потоков
Пульсирующий («вилочный») параллелизм
Описание слайда:
Использование потоков Использование потоков Пульсирующий («вилочный») параллелизм

Слайд 8





Набор директив
Набор директив
Библиотека функций
Набор переменных окружения
Описание слайда:
Набор директив Набор директив Библиотека функций Набор переменных окружения

Слайд 9





Формат
Формат
     #pragma omp имя_директивы [clause,…]
Пример
    #pragma omp parallel default (shared) \ private (beta, pi)
Описание слайда:
Формат Формат #pragma omp имя_директивы [clause,…] Пример #pragma omp parallel default (shared) \ private (beta, pi)

Слайд 10


Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №10
Описание слайда:

Слайд 11





Определение параллельной области;
Определение параллельной области;
Разделение работы;
Синхронизация.
Описание слайда:
Определение параллельной области; Определение параллельной области; Разделение работы; Синхронизация.

Слайд 12





Директива parallel:
Директива parallel:
    #pragma omp parallel [clause …] structured_block
clause
if 	  (scalar_expression)
private    (list)
shared     (list)
default     (shared | none)
firstprivate     (list)
reduction     (operator:list)
copyin     (list)
Описание слайда:
Директива parallel: Директива parallel: #pragma omp parallel [clause …] structured_block clause if (scalar_expression) private (list) shared (list) default (shared | none) firstprivate (list) reduction (operator:list) copyin (list)

Слайд 13





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  {  
    int nthreads, tid;  
    #pragma omp parallel private (nthreads, tid)      {  
        tid = omp_get_thread_num();  
 	   printf(“Hello World from thread = %d\n", tid);
        if (tid == 0) {  
            nthreads = omp_get_num_threads(); 
	       printf(“Number of threads = %d\n", nthreads);  
		}          }      
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int nthreads, tid; #pragma omp parallel private (nthreads, tid) { tid = omp_get_thread_num(); printf(“Hello World from thread = %d\n", tid); if (tid == 0) { nthreads = omp_get_num_threads(); printf(“Number of threads = %d\n", nthreads); } } }

Слайд 14





DO/for – распараллеливание циклов
DO/for – распараллеливание циклов
sections – распараллеливание раздельных фрагментов кода
single – директива последовательного выполнения кода
	Синхронным является только завершение выполнения директив
Описание слайда:
DO/for – распараллеливание циклов DO/for – распараллеливание циклов sections – распараллеливание раздельных фрагментов кода single – директива последовательного выполнения кода Синхронным является только завершение выполнения директив

Слайд 15





Директива DO/for:
Директива DO/for:
#pragma omp for [clause …]
		for_loop
clause
scheldule (type [,chunk])
ordered
private     (list)
firstprivate     (list)
lastprivate     (list)
shared    (list)
reduction (operator: list)
nowait
Описание слайда:
Директива DO/for: Директива DO/for: #pragma omp for [clause …] for_loop clause scheldule (type [,chunk]) ordered private (list) firstprivate (list) lastprivate (list) shared (list) reduction (operator: list) nowait

Слайд 16





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  {  
    int A[10], B[10], C[10], i, n;  
// Заполним исходные массивы  
    for (i = 0; i < 10; i++)  {   
        A[i] = i;  
        B[i] = 2 * i;  
        C[i] = 0;      }  
    #pragma omp parallel shared(A, B, C) private(i, n)  
    {  // Получим номер текущей нити  
        n = omp_get_thread_num();  
        #pragma omp for  
        for (i = 0; i < 10; i++)  {  
            C[i] = A[i] + B[i];  
            printf("Нить \%d сложила элементы с номером %d\n", n, i);  
        }      }  }
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int A[10], B[10], C[10], i, n; // Заполним исходные массивы for (i = 0; i < 10; i++) { A[i] = i; B[i] = 2 * i; C[i] = 0; } #pragma omp parallel shared(A, B, C) private(i, n) { // Получим номер текущей нити n = omp_get_thread_num(); #pragma omp for for (i = 0; i < 10; i++) { C[i] = A[i] + B[i]; printf("Нить \%d сложила элементы с номером %d\n", n, i); } } }

Слайд 17





Директива section:
Директива section:
#pragma omp sections [clause …]
{
  #pragma omp section
		structured_block…
}
clause
private     (list)
firstprivate     (list)
lastprivate     (list)
reduction (operator: list)
nowait
Описание слайда:
Директива section: Директива section: #pragma omp sections [clause …] { #pragma omp section structured_block… } clause private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait

Слайд 18





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  {  
    int n = 0;  
    #pragma omp parallel      {  
        #pragma omp sections lastprivate(n)  {  
            #pragma omp section  {  
                n = 1;         }  
            #pragma omp section  {  
                n = 2;        }  
            #pragma omp section  {  
                n = 3;       }  
        }  
        printf("Значение n на нити %d: %d\n",  omp_get_thread_num(), n);  
    }  
    printf("Значение n в последовательной области: %d\n", n);  
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int n = 0; #pragma omp parallel { #pragma omp sections lastprivate(n) { #pragma omp section { n = 1; } #pragma omp section { n = 2; } #pragma omp section { n = 3; } } printf("Значение n на нити %d: %d\n", omp_get_thread_num(), n); } printf("Значение n в последовательной области: %d\n", n); }

Слайд 19





Директива single:
Директива single:
#pragma omp single [clause …]
{
  #pragma omp section
		structured_block…
}
clause
private     (list)
firstprivate     (list)
nowait
Описание слайда:
Директива single: Директива single: #pragma omp single [clause …] { #pragma omp section structured_block… } clause private (list) firstprivate (list) nowait

Слайд 20





#include <stdio.h>  
#include <stdio.h>  
int main(int argc, char *argv[])  {  
    int n;  
    #pragma omp parallel private(n)      {  
        n = 1;  
        #pragma omp master          {  
            n = 2;  
        }  
        printf("Первое значение n: %d\n", n);  
        #pragma omp barrier  
        #pragma omp master          {  
            n = 3;  
        }  
        printf("Второе значение n: %d\n", n);  
    }  }
Описание слайда:
#include <stdio.h> #include <stdio.h> int main(int argc, char *argv[]) { int n; #pragma omp parallel private(n) { n = 1; #pragma omp master { n = 2; } printf("Первое значение n: %d\n", n); #pragma omp barrier #pragma omp master { n = 3; } printf("Второе значение n: %d\n", n); } }

Слайд 21





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  
{  
    int n;  
    #pragma omp parallel  
    {  
        #pragma omp critical  
        {  
            n = omp_get_thread_num();  
            printf("Нить %d\n", n);  
        }  
    }  
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int n; #pragma omp parallel { #pragma omp critical { n = omp_get_thread_num(); printf("Нить %d\n", n); } } }

Слайд 22





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  
{  
    #pragma omp parallel  
    {  
        printf("Сообщение 1\n");  
        printf("Сообщение 2\n");  
        #pragma omp barrier  
        printf("Сообщение 3\n");  
    }  
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { #pragma omp parallel { printf("Сообщение 1\n"); printf("Сообщение 2\n"); #pragma omp barrier printf("Сообщение 3\n"); } }

Слайд 23





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  
{  
    int count = 0;  
    #pragma omp parallel  
    {  
        #pragma omp atomic  
        count++;  
    }  
    printf("Число нитей: %d\n", count);  
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int count = 0; #pragma omp parallel { #pragma omp atomic count++; } printf("Число нитей: %d\n", count); }

Слайд 24





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  
{  
    int count = 0;  
    #pragma omp parallel  
    {  
        #pragma omp atomic  
        count++;  
    }  
    printf("Число нитей: %d\n", count);  
}
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int count = 0; #pragma omp parallel { #pragma omp atomic count++; } printf("Число нитей: %d\n", count); }

Слайд 25





#include <stdio.h>  
#include <stdio.h>  
#include <omp.h>  
int main(int argc, char *argv[])  {  
    int i, n;  
    #pragma omp parallel private (i, n)      {  
        n = omp_get_thread_num();  
        #pragma omp for ordered  
        for (i = 0; i < 5; i++)          {  
            printf("Нить %d, итерация %d\n", n, i);  
            #pragma omp ordered              {  
                printf("ordered: Нить %d, итерация %d\n", n, i);  
            }          }      }  }
Описание слайда:
#include <stdio.h> #include <stdio.h> #include <omp.h> int main(int argc, char *argv[]) { int i, n; #pragma omp parallel private (i, n) { n = omp_get_thread_num(); #pragma omp for ordered for (i = 0; i < 5; i++) { printf("Нить %d, итерация %d\n", n, i); #pragma omp ordered { printf("ordered: Нить %d, итерация %d\n", n, i); } } } }

Слайд 26





if 	  (scalar_expression)
if 	  (scalar_expression)
shared     (list)
private     (list)
clause:
firstprivate     (list)
lastprivate     (list)
reduction (operator: list)
default     (shared | none)
Описание слайда:
if (scalar_expression) if (scalar_expression) shared (list) private (list) clause: firstprivate (list) lastprivate (list) reduction (operator: list) default (shared | none)

Слайд 27





Возможный формат записи:
Возможный формат записи:
     x = x op expr
    x = expr op x
    x  binop = expr
    x++, ++x, x--, --x
x – скалярная переменная
expr  не ссылается на x
op не перегружен:  +, -, *, &, ^, |, &&, ||
binop не перегружен: +, -, *, &, ^, |
Описание слайда:
Возможный формат записи: Возможный формат записи: x = x op expr x = expr op x x binop = expr x++, ++x, x--, --x x – скалярная переменная expr не ссылается на x op не перегружен: +, -, *, &, ^, |, &&, || binop не перегружен: +, -, *, &, ^, |

Слайд 28


Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №28
Описание слайда:

Слайд 29





void omp_set_num_threads(int num)
void omp_set_num_threads(int num)
int omp_get_max_threads(void)
int omp_get_num_threads(void)
int omp_get_thread_num (void)
int omp_get_num_procs (void)
int omp_in_parallel (void)
void omp_set_dynamic(int num)
int omp_get_dynamic(void)
void omp_get_nested(void)
void omp_set_nested(int nested)
Описание слайда:
void omp_set_num_threads(int num) void omp_set_num_threads(int num) int omp_get_max_threads(void) int omp_get_num_threads(void) int omp_get_thread_num (void) int omp_get_num_procs (void) int omp_in_parallel (void) void omp_set_dynamic(int num) int omp_get_dynamic(void) void omp_get_nested(void) void omp_set_nested(int nested)

Слайд 30





void omp_init_lock(omp_lock_t *lock)
void omp_init_lock(omp_lock_t *lock)
void omp_nest_init_lock(omp_nest_lock_t *lock)
void omp_destroy_lock(omp_lock_t *lock)
void omp_destroy_nest_lock(omp_nest_lock_t *lock)
void omp_set_lock(omp_lock_t *lock)
void omp_set_nest_lock(omp_nest_lock_t *lock)
void omp_unset_lock(omp_lock_t *lock)
void omp_unset_nest_lock(omp_nest_lock_t *lock)
void omp_test_lock(omp_lock_t *lock)
void omp_test_nest_lock(omp_nest_lock_t *lock)
Описание слайда:
void omp_init_lock(omp_lock_t *lock) void omp_init_lock(omp_lock_t *lock) void omp_nest_init_lock(omp_nest_lock_t *lock) void omp_destroy_lock(omp_lock_t *lock) void omp_destroy_nest_lock(omp_nest_lock_t *lock) void omp_set_lock(omp_lock_t *lock) void omp_set_nest_lock(omp_nest_lock_t *lock) void omp_unset_lock(omp_lock_t *lock) void omp_unset_nest_lock(omp_nest_lock_t *lock) void omp_test_lock(omp_lock_t *lock) void omp_test_nest_lock(omp_nest_lock_t *lock)

Слайд 31





OMP_SCHEDULE
OMP_SCHEDULE
OMP_NUM_THREADS
OMP_DYNAMIC
OMP_NESTED
Описание слайда:
OMP_SCHEDULE OMP_SCHEDULE OMP_NUM_THREADS OMP_DYNAMIC OMP_NESTED

Слайд 32


Стандарт OpenMP. Информационные ресурсы. Лекция 3, слайд №32
Описание слайда:



Похожие презентации
Mypresentation.ru
Загрузить презентацию