Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

тема с распеределенной памятьюсборник однотипных вычислительных узлов

Работа добавлена на сайт samzan.net:


*Паралл прогр-исполнение программного кода несколькими вычислителями(код единый).

Разделяется на системы с общей памятью и распределенной памятью(массивно-параллельные системы) также сущ гибрид NUMA неоднородный доступ к памяти.

Система с распеределенной памятью-сборник однотипных вычислительных узлов.(на каждом сетевой кабель,память и др устройства)-кластеры MPI, PVM.Обмен между узлами осуществляется через сеть.Процессоры видят только свою ОП-напрямую к памяти др процессоров обратиться нельзя

Системы с общей памятью-процессоры остаются на узлах,однако память общая и обращение к ней идет через спец шину к общей памяти суперкомьютера  Open MP,treds потоки.Любой процессор может адресовать любое адресное пространство всего кластера.любой процессор имеет доступ к любой ячейке.

Недостатки:немаштабируемость,создание общей памяти намного сложнее,обеспечение конкретностей КЭШей.

Гибридные-на физ уровне-это система с распределенной памятью(кластер),на логическом уровне(интерфейс)-система с общей памятью.Проблемы организации памяти скрыты от программиста.Аппаратура сама осуществляет доступ к памяти

OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках СиСи++ и Фортран. Описывает совокупность директив компилятора, библиотечныхпроцедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.Технология фирмы Intel.

Топологии:

*Директивы:

#pragma omp parallel [раздел[ [,] раздел]...]

структурированный блок

Эта директива сообщает компилятору, что структурированный блок кода должен быть выполнен параллельно, в нескольких потоках. Каждый поток будет выполнять один и тот же поток команд, но не один и тот же набор команд — все зависит от операторов, управляющих логикой программы, таких как if-else.

#pragma omp for опция[[[,] опция] ... ]цикл 
 for

Каждая нить выполнит все итерации цикла

#pragma omp single опция[ [[,] опция]...]структурированный 
 блок

Если в параллельной секции какой нибудь участок кода должен быть выполнен единажды

#pragma omp sections опция[[[,] опция] ...] 

#pragma omp section структурированный 
 блок 
#pragma omp section структурированный 
 блок 
... 
}

Создается группа потоков и распределяется между ними обработка итераций цикла,после выполнения которых потоки начинают обработку оставшихся разделов кода.Если кол-во разделов кода будет больше числа потоков,то обработка нескольких разделов будет отложена до тех пор пока не появятся свободные потоки

#pragma omp master

Выделяется участок кода,который будет выполнен.Все остальные потоки это игнорируют

#pragma omp critical имя[()]структурированный 
 блок

Критическая секция программы.Определяется код,который может выполняться в любой момнт времени только одним потоком

#pragma omp barrier

Дает всем потокам указание ждать друг друга ,перед тем как они продолжат выполнение за барьером.

#pragma omp atomic структурированный 
 блок

Частный случай критической ситуации.Директива относится к идущему непосредственно за ней оператору присваивания.На время выполнения доступ к этой переменной блокируется для всех остальных потоков.

#pragma omp ordered структурированный 
 блок

Определяет блок внутри цикла,который должен выполняться в том порядке,в котором идут итерации в цикле.

#pragma omp task опция[[[,] опция] ...]структурированный 
 блок

Для отдельной,независимой задачи

#pragma omp flash (список переменных)

Синхронизация(установление зн-я)общей переменной

#pragma omp copy m взять из главного потока

#pragma omp copyprivate сделать переменные общими

*Параметры деректив:

SHARED 
Применяется к переменным, которые необходимо сделать общими
. Директивы:parallel

PRIVATE 
Применяется к переменным, которые необходимо сделать приватными. При входе в параллельную область для каждой нити создается отдельный экземпляр переменной, который не имеет никакой связи с оригинальной переменной вне параллельной области.
 Директивы: parallel, for, sections, single

THREADPRIVATE 
Применяется к COMMON-блокам, которые необходимо сделать приватными. Директива должна применяться после каждой декларации COMMON-блока.

FIRSTPRIVATE 
Приватные копии переменной при входе в параллельную область инициализируются значением оригинальной переменной.

LASTPRIVATE 
По окончании параллельно цикла или блока параллельных секций, нить, которая выполнила последнюю итерацию цикла или последнюю секцию блока, обновляет значение оригинальной переменной.

REDUCTION(+:A) 
Обозначает переменную, с которой в цикле производится reduction-операция (например, суммирование). При выходе из цикла, данная операция производится над копиями переменной во всех нитях, и результат присваивается оригинальной переменной
.  Директивы: parallel, for, sections

COPYIN 
Применяется к COMMON-блокам, которые помечены как THREADPRIVATE. При входе в параллельную область приватные копии этих данных инициализируются оригинальными значениями.

DEFAULT Параметр для установки правила по умолчанию на использование переменных в потоках.

IF Параметр для задания условия, только при выполнении которого осуществляется создание параллельного фрагмента. Директивы: parallel

Num_treads Параметр для задания количества создаваемых потоков в параллельной области. Директивы:parallel

Режимы:

OMP-DYNAMIC разрешает среде менять количество потоков

OMP_NESTED способ обрабатывания паралл потокв(вкл-множатся,выкл-нет)

OMP_NUM_THREADS количество потоков по умолчанию

OMP_SHEDULE Переменная для задания способа управления распределением итераций распараллеливаемого цикла между потоками. Значение по умолчанию: static

*Функции:

void omp_set_num_threads (int num_threads);

Установить количество создаваемых потоков

int omp_get_max_threads (void);

Получение максимально возможного количества потоков

int omp_get_num_threads (void);

Получение количества потоков в параллельной области программы

int omp_get_thread_num (void);

Получение номера потока

int omp_get_num_procs (void);

Получение числа вычислительных элементов (процессоров или ядер), доступных приложению

void omp_set_dynamic (int dynamic);

Установить режим динамического создания потоков

int omp_get_dynamic (void);

Получение состояние динамического режима

void omp_set_nested (int nested);

Установить режим поддержки вложенных параллельных фрагментов

int omp_get_nested (void);

Получения состояние режима поддержки вложенных параллельных фрагментов

void omp_init_lock (omp_lock_t *lock);
void omp_init_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);

Освободить замок

int omp_test_lock (omp_lock_t &lock);
int omp_test_nest_lock (omp_nest_lock_t &lock);

Установить замок без блокировки

void omp_destroy_lock (omp_lock_t &lock);
void omp_destroy_nest_lock (omp_nest_lock_t &lock);

Перевод замка в неинициализированное состояние.ожидание потоков

double omp_get_wtime (void);

Получение времени текущего момента выполнения программы

double omp_get_wtick (void);

Получение времени в секундах между двумя последовательными показателями времени аппаратного таймера

int omp_in_parallel (void);

Проверка нахождения программы в параллельном фрагменте

*Причины недостатка производительности || программ

1.недооценка трудоемкости организации || цикла2.неэффективность обработки малых объемов программ3.несбалансированность потоков4.переизбыток общих переменных5.ограниченный объем кэш-памяти

Иерархия памяти (сверху вниз)регистры процессора,кэш 1 уровень,кэш 2 уровень,кэш 3 уровень,своя память,удаленная память(Чем выше в уровне иерархии тем выше скорость доступа).Объем дост на каждом уровне все меньше и меньше

Автоматическое распараллеливание работает только для циклов

Эффективность-ускорение\кол во потоков .Функция от числа потоков и размера задач .Э[0,1]Ускорение-отношение времени работы послед прогр-я ко времени работы параллельного прогр-яМасштабируемость-характер зависимости ускорения или эффективности  от кол-ва потоков




1. 201426012014 Незабываемый день студента Морской круиз на выходные - РигаСтокгольмВиль
2. Мэри Кэй с другими женщинами
3. тема могла бы быть введена прочно и успешно и без таких нововведений которые нашему быту были бы чужды
4. тема тел ~ это совокупность тел которые взаимодействуют только между собой
5. Особенности тактики допроса при расследовании преступлений совершаемых организованными престу
6. подгляд творческого процесса
7. Курсовая работа- Конституционный суд Республики Словакия
8. Мама А Пинегин Четыре буквы в слове мама
9. Реферат- Принципы создания культурных ландшафтов и их рациональное использовани
10. Аэрофлот ~ Российские Международные Авиалинии 2.html
11. Тема 9 статистична Перевірка гіпотез План 9
12. Задание произвести комплексную оценка Ленинского района города Саратов и по полученным результатам распол
13. 01010533566ПЗ Лит докум
14. Особенности и перспективы развития Чехии
15. Ошибки словоупотребления Лексическая сочетаемость ~ это способность слова сочетаться с определённым кр
16. Бюджетное устройство. Вопросы к госэкзамен
17. рефератах много раз
18. Курсовая работа- Государство и гражданское общество
19.  Отобрать табельное имущество для оказания первой медицинской помощи
20. Создайте класс Комплексное Число. В классе должны присутствовать функции ...