- •Тема 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.
Ассоциативная память нейронных сетей.
Искусственная нейронная сеть с обратной связью формирует ассоциативную память. Подобно человеческой памяти по заданной части нужной информации вся информация извлекается из «памяти».
Автоассоциативной памятью — называют память, которая может завершить или исправить образ, но не может ассоциировать полученный образ с другим образом. Данный факт является результатом одноуровневой структуры ассоциативной памяти, в которой вектор появляется на выходе тех же нейронов, на которые поступает входной вектор. Такие сети неустойчивы. Для устойчивой сети последовательные итерации приводят к все меньшим изменениям выхода, пока в конце концов выход не становится постоянным. Для многих сетей процесс никогда не заканчивается. Неустойчивые сети обладают интересными свойствами и изучались в качестве примера хаотических систем. В определенном смысле, это может быть достигнуто и без обратных связей, например перцептроном для случаев когда устойчивость важнее изучения хаотических систем.
Гетероассоциативной памятью — называют память, в которой при поступлении стимула на один набор нейронов, реакция по обратной связи появляется на другом наборе нейронов.
Первая модель автоассоциативной памяти была разработана Хопфилдом — Нейронная сеть Хопфилда. Чтобы добиться устойчивости пришлось весовые коэффициенты выбирать так, чтобы образовывать энергетические минимумы в нужных вершинах единичного гиперкуба.
Впоследствии Коско развил идеи Хопфилда и разработал модель гетероассоциативной памяти — двунаправленная ассоциативная память (ДАП).
Но точно такого же результата можно добиться используя широкий класс рекуррентных нейронных сетей, классическим примером которых служит сеть Элмана, при этом проблема устойчивости отпадает, а на весовые коэффициенты не накладываются такие жесткие условия, благодаря чему сеть обладает большей емкостью. Кроме того, рекуррентные нейронные сети могут описывать конечный автомат, при этом не теряя всех преимуществ искусственных нейронных сетей
Тема 5. Параллельные вычисления
Виды параллелизма.
Декомпозиция по пространству (геометрический вид параллелизма).
Вся расчётная область разделяется на участки, каждый из которых закрепляется за своим процессом, границы между участками называются стыками. При обработке стыков вводят дополнительные точки, которые дублируют и по координате и по значению функции точки на соседнем процессе. Количество дополнительных точек определяется спецификой решаемой проблемы. Все процессы проводят вычисления на своих участках одновременно.
Можно обрабатывать большие расчётные области
Получаем ускорение за счёт одновременной работы всех процессов на своих участках.
Наличие стыков, проблема с их обработкой
Бывает необходимо передавать значения на стыках, что приводит к потере времени
Этот вид декомпозиции применяется при решении задач линейной алгебры, численного интегрирования, математической физики
Декомпозиция по задачам (функциональный вид параллелизма)
Решаемая задача разбивается на независимые подзадачи, каждая из которых закрепляется за своим процессом. Все процессы работают одновременно. Отдельные подзадачи неравноценны по затратам машинного времени, что приводит к простою некоторых процессов. При решении некоторых задач бывает необходимо выделить один процесс, который не занимается вычислениями, а только координирует работу других процессов.
Все процессы выполняют свои подзадачи одновременно, что даёт ускорение
Подзадачи неравноценны по затратам машинного времени, что приведёт к простою некоторых процессов
Выделение отдельного процесса для координации работы остальных процессов.
Применяется при решении систем ОДУ, систем нелинейных уравнений, в задачах оптимизации.
Конвейерный вид параллелизма.
Вся расчётная область разбивается на приблизительно одинаковые участки, каждый из которых закрепляется за своим процессом. Работу начинает нулевой процесс. Дойдя до стыка, он передаёт значения первому процессу и переходит к следующей итерации. Первый процесс начинает вычисления и, дойдя до стыка, передаёт значения второму и т.д. Все процессы последовательно включаются в работу и каждый работает на своей итерации. Как только все процессы включены в работу, все они работают одновременно, что даёт ускорение.
Можно обсчитывать большие расчётные области
Есть стыки, но нет проблем с их обработкой
Ускорение при одновременной работе всех процессов
Простои в начале и конце вычислений
Передача значений на стыках
Применяется при решении уравнений математической физики
Типы принятия коллективного решения (укладка паркета)
Вся расчетная область разделяется на приблизительно одинаковые участки по числу процессов, каждый процесс проводит вычисления на своем участке, и находит оптимальное решение – локальный оптимум. Затем некоторый процесс, например нулевой, находит глобальный оптимум среди локальных.
Все процессы независимы
Ускорение кратно числу процессов
В некоторых задачах не нужны передачи, значит не будет потерь времени
Узкая область применения
В некоторых задачах необходимы передачи найденных локальных оптимумов
Метод сдваивания (каскадный вид параллелизма)
Пусть дан большой массив чисел, необходимо найти сумму этих чисел. Разбиваем массив чисел на пары и суммируем каждую пару, далее все полученные суммы также разбиваем на пары и суммируем…
Тогда количество итераций равно log2N. Количество процессов необходимое для реализации равно N/2. При увеличении количества суммируемых значений эффективность уменьшается.
