- •Тема 1. Введение в архитектуру многопроцессорных вычислительных систем
- •Необходимость введение классификации параллельных вычислительных систем. Требования, которым должна удовлетворять классификации.
- •Классификация м. Флинна. Достоинства и недостатки.
- •Компьютеры с разделенной памятью: mpp-системы. Принципиальная схема. Примеры mpp-систем.
- •Компьютеры с общей памятью: smp-системы. Многоядерные системы. Принципиальная схема. Примеры smp-систем.
- •Системы с неоднородным доступом к памяти: ccNuma-системы. Принципиальная схема.
- •Кластерные системы. Кластер игэу. Схема кластера. Основные характеристики.
- •Тема 2. Система программирования mpi
- •Mpi. Характеристика системы. Основные понятия mpi.
- •Константы. Типы. Сообщения, атрибуты сообщения. Структура mpi_Status.
- •Основные функции mpi: mpi_Init(), mpi_Finalize(), mpi_Wtime().
- •Функции работы с коммуникатором: mpi_Comm_size(), mpi_Comm_rank().
- •Функции коллективного взаимодействия процессов: mpi_Bcast(), mpi_Barrier(), mpi_Reduce(),mpi_Allreduce(),(), mpi_Scan(),. Коллективные операции.
- •Функции обмена с блокировкой: mpi_Send(), mpi_Recv(), mpi_Ssent(),mpi_Bsend(), mpi_Rsend(), mpi_Buffer_attach(), mpi_Buffer_detach().
- •Тема 3. Система программирования OpenMp
- •Система программирования OpenMp. Понятие нити. Структура OpenMp-программы. Схема fork/join. Понятие директивы, клаузы. Классы переменных.
- •Директива OpenMp определения параллельной области. Клаузы.
- •Директива для параллельного выполнения циклов. Клаузы.
- •Директива для однократного выполнения участка кода. Клаузы.
- •Директива для параллельного выполнения независимых фрагментов программы. Клаузы.
- •Директива синхронизации.
- •Директива выполнения блока программы нитью-«мастер».
- •Атомарная директива.
- •Директива создания критической секции. Именованная критическая секция.
- •Директивы flush, ordered, threadprivate.
- •Функции OpenMp.
- •Тема 4. Нейрокомпьютерные системы
- •Обучение простейшего персептрона распознаванию двух образов.
- •Отображение
- •Реакция на образ
- •Блок подготовки
- •Блок обучения
- •Блок проверки
- •Функции активации.
- •Топологии нейронных сетей.
- •Алгоритмы обучения. Методы Хебба.
- •Ассоциативная память нейронных сетей.
- •Тема 5. Параллельные вычисления
- •Виды параллелизма.
- •Ускорение вычислений. Основной закон Амдала. Закон Густавсона-Барсиса.
- •Сетевой закон Амдала. Недостатки закона Амдала.
- •Решение уравнения теплопроводности на мвс. Постановка задачи. Расчетные формулы. Параллельный алгоритм. Распределение точек по процессам. Обработка стыков. Ускорение и точность вычислений.
- •Тема 6 Технология cuda.
- •Основные термины: концепция simd, мультипроцессор, устройство (device), хост (host), ядро (kernel). Организация потоков.
- •Архитектура устройства, виды памяти.
- •Расширения языка с. Спецификаторы функций, спецификаторы переменных, добавленные типы.
- •Функции cuda: функция вызова ядра, функции работы с памятью.
- •Функции определения времени вычислений.
- •Пример программы на cuda: решение системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4.
Директивы flush, ordered, threadprivate.
Директива flush
Поскольку в современных параллельных вычислительных системах может использоваться сложная структура и иерархия памяти, пользователь должен иметь гарантии того, что в необходимые ему моменты времени каждая нить будет видеть единый согласованный образ памяти. Для этих целей и предназначена директива flush.
#pragma omp flush [<список>]
Указывается в параллельной секции. Поток, обратившийся к директиве переписывает в основную память из своего кэша все переменные, либо переменные, указанные в списке.
Все переменные, которые требуют синхронизации, должны быть перечислены в списке директивы. Если в этом списке присутствует указатель, то осуществляется сброс самого указателя, а не числового значения объекта, на который он указывает.
Директива flush без списка синхронизирует все разделяемые переменные (такой способ синхронизации будет иметь значительные накладные расходы по сравнению с директивой flush со списком).
Директиву flush нельзя использовать, если присутствует оператор nowait (т.е. выполнение без синхронизации).
Аналогично barrier, директива flush не является оператором (в формальном синтаксисе), поэтому в некоторых конструкциях он должен оформляться как блок, т.е. {…}.
Директива ordered
Директива ordered должна находиться внутри конструкций for или parallel for. Программный блок, непосредственно следующий за директивой ordered, выполняется в порядке, в котором итерации цикла выполнялись бы в последовательном режиме.
Синтаксис директивы ordered:
#pragma omp ordered
{…}
В параллельном цикле должна быть задана опция ordered. Нить, выполняющая первую итерацию цикла, выполняет операции данного блока. Нить, выполняющая любую следующую итерацию, должна сначала дождаться выполнения всех операций блока всеми нитями, выполняющими предыдущие итерации. Может использоваться, например, для упорядочения вывода от параллельных нитей.
Директива threadprivate
#pragma omp threadprivate (<список переменных>)
Указание класса переменной в последовательной секции.
Указывается в последовательной секции после описания переменных.
При входе в параллельную секцию переменные, указанные в списке становятся локальными.
Директива не влияет на работу с переменными в последовательной секции.
При открытии параллельной секции обязательно должен быть указан параметр copyin с этим же списком переменных
Функции OpenMp.
Int omp_get_num_threads();
Определение общего числа потоков в параллельной секции.
Void omp_set_num_threads(int threads);
Установка числа потоков в параллельной секции.
Int omp_get_thread_num();
Получение номера потока.
Double omp_get_wtime();
Определение времени (в секундах).
Тема 4. Нейрокомпьютерные системы
Обучение простейшего персептрона распознаванию двух образов.
Пусть дан персептрон.
Дана матрица рецепторных клеток nxn, на которую подается образ в виде 0 и 1.
Пусть пепсептрон распознает два образа Х и 0, в общем случае эти образы могут быть представлены по-разному.
Там, где стоит 1, там есть образ, все остальные клетки заполнены 0.
Дан массив ассоциативных клеток nxn. Матрица рецепторных клеток связана с матрицей ассоциативных клеток. Каждая рецепторная клетка связана случайным образом с ассоциативными клетками. Количество связей равно m, где m много больше n (m>>n).
Дана одна эффекторная клетка с которой связаны все ассоциативные клетки через некоторый вес.
На рецепторную клетку подается образ, который отображается на ассоциативной клетке и предается на эффекторную клетку через веса и эффекторная клетка отвечает 1, если X и 0, если подан 0. Если ответ не верен, то сеть будем обучать, изменяя веса ассоциативных клеток.
Допустим, есть следующая модель персептрона:
Алгоритм обучения персептрона следующий:
Присвоить синаптическим весам
некоторые
начальные значения. Например, нулю.
Подать входной образ
и
вычислить
.
Если
правильный,
то переходят к шагу 4. Иначе к шагу 3.Корректируем значения синаптических весов.
Повторить шаги 2-4 данного алгоритма обучения персептрона пока сеть не станет выдавать ожидаемый выход на векторах из обучающей выборки или пока отклонение не станет ниже некоторого порога.
Т.о. образом логика обучения персептрона следующая: если сигнал персептрона при некотором образе верен, то ничего корректировать не надо, если нет – производится корректировка весов.
Корректировка весов
Вычисляем
дельту, т.е. разницу между требуемым
и
реальным
выходом:
Корректируем вес: Wn +=
(греческая
буква «эта») – коэффициент скорости
обучения, позволяет управлять средней
величиной изменения весов;Xn – величина входа соответствующая Wn синаптическому весу.
