- •Альтернативы
- •Преимущества и недостатки
- •Numa с когерентностью кеш-памяти
- •Преимущества архитектуры
- •Недостатки архитектуры
- •Преимущества архитектуры
- •Недостатки архитектуры
- •Классификация кластеров Кластеры высокой доступности
- •Кластеры распределения нагрузки
- •Вычислительные кластеры
- •Системы распределенных вычислений (grid)
- •Кластер серверов, организуемых программно
- •Применение
- •Самые производительные кластеры
- •Разделение функций
- •Модель файлового сервера
- •Модель удаленного доступа к данным
- •Модель сервера баз данных
- •Модель сервера приложений
- •Принципы сокетов
- •Стандарты mpi
- •Пример программы
- •Реализации mpi
- •Закон Амдаля
- •Характеристики графа алгоритма и смежные понятия
- •27(См. Тетрадь!) (см. В. 23!)
- •Разработка
- •Введение
- •Ключевые элементы
- •Примеры программ
- •Существующие реализации
- •Пример реализации
- •Инструменты
27(См. Тетрадь!) (см. В. 23!)
28,29
2 типа передачи сообщений:
- 1му получателю (известно кому) Точка-точка. Синх.\асинхр. Синхр - получатель готов получать сообщ – происходит передача. Асинхр – есть буфер, в который пишутся сообщения, и будут потом из него считаны.
- коллективный (массовая рассылка).
30
OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Описывает совокупность директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.
Разработка
Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией, называемой OpenMP Architecture Review Board (ARB) [1].
Первая версия появилась в 1997 году, предназначалась для языка Fortran. Для С/С++ версия разработана в 1998 году. В 2008 году вышла версия OpenMP 3.0.
Введение
OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор подчиненных (slave) потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами (количество процессоров не обязательно должно быть больше или равно количеству потоков).
Задачи, выполняемые потоками параллельно, также как и данные, требуемые для выполнения этих задач, описываются с помощью специальных директив препроцессора соответствующего языка — прагм. Например, участок кода на языке Fortran, который должен исполняться несколькими потоками, каждый из которых имеет свою копию переменной N, предваряется следующей директивой: !$OMP PARALLEL PRIVATE(N)
Количество создаваемых потоков может регулироваться как самой программой при помощи вызова библиотечных процедур, так и извне, при помощи переменных окружения.
Ключевые элементы
Ключевыми элементами OpenMP являются
-
конструкции для создания потоков (директива parallel),
-
конструкции распределения работы между потоками (директивы DO/for и section),
-
конструкции для управления работой с данными (выражения shared и private),
-
конструкции для синхронизации потоков (директивы critical, atomic и barrier),
-
процедуры библиотеки поддержки времени выполнения (например, omp_get_thread_num),
-
переменные окружения (например, OMP_NUM_THREADS).
Примеры программ
В этой программе два массива (a и b) складываются параллельно десятью потоками.
#include <stdio.h>
#include <omp.h>
#define N 100
int main(int argc, char *argv[])
{
float a[N], b[N], c[N];
int i;
omp_set_dynamic(0); // запретить библиотеке openmp менять число потоков во время исполнения
omp_set_num_threads(10); // установить число потоков в 10
// инициализируем массивы
for (i = 0; i < N; i++)
{
a[i] = i * 1.0;
b[i] = i * 2.0;
}
// вычисляем сумму массивов
#pragma omp parallel shared(a, b, c) private(i)
{
#pragma omp for
for (i = 0; i < N; i++)
c[i] = a[i] + b[i];
}
printf ("%f\n", c[10]);
return 0;
}