Difference between revisions of "BSc: HighPerformanceComputing"
I.konyukhov (talk | contribs) |
I.konyukhov (talk | contribs) |
||
(48 intermediate revisions by the same user not shown) | |||
Line 42: | Line 42: | ||
| style="width:60%" | Содержание дисциплины по темам |
| style="width:60%" | Содержание дисциплины по темам |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 1. || Введение в высокопроизводительные вычисления, OpenMP и OpenCL |
+ | | style="text-align:center;" | 1. || Введение в высокопроизводительные вычисления, OpenMP и OpenCL |
+ | ||- Существующие суперкомпьютерные системы<br>- Модель общей памяти<br>- Подходы к программированию MIMD и SIMD<br>- Массивно-параллельные ускорители<br>- Иерархия памяти |
||
|- style="background-color:#F8F9FA; color:#202122;" |
|- style="background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 2. || Параллельные алгоритмы линейной алгебры |
| style="text-align:center;" | 2. || Параллельные алгоритмы линейной алгебры |
||
+ | ||- Матричное умножение: оптимизация производительности различных реализаций на основе различных типов памяти устройства<br>- Прямые методы решения СЛАУ: исключение Гаусса, разложение Холецкого, метод прогонки, параллельная реализация<br>- Итерационные методы решения СЛАУ: метод Якоби, метод Зейделя, релаксационные методы, параллельная реализация |
||
− | |||
− | || -<br> -<br> -<br> -<br> |
||
|- style="background-color:#F8F9FA; color:#202122;" |
|- style="background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 3. || Параллельные методы решения дифференциальных уравнений |
| style="text-align:center;" | 3. || Параллельные методы решения дифференциальных уравнений |
||
+ | ||- Решение систем обыкновенных дифференциальных уравнений<br>- Решение волнового уравнения<br>- Решение задачи теплопроводности<br>- Решение задачи Дирихле для уравнения Пуассона |
||
− | |||
− | || -<br> -<br> -<br> -<br> |
||
|- style="background-color:#F8F9FA; color:#202122;" |
|- style="background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 4. || Физически |
+ | | style="text-align:center;" | 4. || Физически информированные нейронные сети |
+ | ||- Основы нейронных сетей<br>- Основы методов оптимизации<br>- Принципы преобразования задач, записанных в терминах дифференциальных уравнений, в оптимизационные<br>- Повышение эффективности процедуры обучения |
||
− | |||
− | || -<br> -<br> -<br> -<br> |
||
|- style="background-color:#F8F9FA; color:#202122;" |
|- style="background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 5. || Параллельные методы Монте-Карло |
| style="text-align:center;" | 5. || Параллельные методы Монте-Карло |
||
+ | ||- Вычисление определенных интегралов<br>- Способы уменьшения дисперсии<br>- Генераторы псевдослучайных чисел<br>- Подходы к распараллеливанию методов Монте-Карло |
||
− | |||
− | || -<br> -<br> -<br> -<br> |
||
|- style="background-color:#F8F9FA; color:#202122;" |
|- style="background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 6. || Высокопроизводительные вычисления и современные языки программирования |
| style="text-align:center;" | 6. || Высокопроизводительные вычисления и современные языки программирования |
||
+ | ||- Многопоточность в современных языках программирования<br>- Существующие обертки для OpenCL и CUDA<br>- Другие высокоуровневые подходы к параллельному программированию |
||
− | |||
− | || -<br> -<br> -<br> -<br> |
||
|} |
|} |
||
== 4. Методические и оценочные материалы == |
== 4. Методические и оценочные материалы == |
||
− | + | ===Задания для практических занятий:=== |
|
{| class="wikitable" style="width:70%;" |
{| class="wikitable" style="width:70%;" |
||
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
||
| style="width:10%" | №<br>п/п |
| style="width:10%" | №<br>п/п |
||
| style="width:30%" | Наименование раздела<br>дисциплины (модуля) |
| style="width:30%" | Наименование раздела<br>дисциплины (модуля) |
||
− | | style="width:60%" | Перечень рассматриваемых тем (вопросов) |
+ | | style="width:60%" | Перечень рассматриваемых тем (вопросов) |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 1. || Введение в высокопроизводительные вычисления, OpenMP и OpenCL||1) Напишите программу, которая получает ID потока, печатает на консоли "Привет из потока #", печатает общее количество потоков из главного потока. Введите необходимые переменные локально, а затем сделайте их глобальными. Протестируйте программу. Используйте необходимые пункты для решения возникших проблем.<br>2) Напишите программу, которая хранит 3 массива фиксированной длины, инициализирует элементы массивов их индексами, печатает общее количество потоков из главного потока, суммирует элементы двух первых массивов и записывает их в третий, а также печатает результат из текущего потока. Запустите задачу в параллельной секции и с помощью параллельного цикла. Протестируйте программу. Попробуйте использовать параллельный цикл с параллельной секцией и без нее. Попробуйте измерить время вычислений.<br>3) Напишите программу, которая вычисляет определенный интеграл заданной функции на заданном интервале (с использованием метода трапеций). Протестируйте программу. Измерьте время вычисления. |
||
− | | style="text-align:center;" | 1. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 2. || Параллельные алгоритмы линейной алгебры||1) Реализуйте матрично-векторное умножение в OpenMP и OpenCL. Обсудите различные технологии хранения данных.<br>2)Выполните матричное умножение, попробуйте оптимизацию.<br>3) Реализуйте методы развертки и редукции для полосато-матричного СЛАУ. Использование инструментария OpenMP и OpenCL для распараллеливания.<br>4) Решите СЛАУ с помощью итерационного алгоритма. Реализуйте решение с помощью подходов OpenMP и OpenCL. |
||
− | | style="text-align:center;" | 2. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 3. || Параллельные методы решения дифференциальных уравнений||1) Реализуйте решение задачи распространения тепла с ленточной матрицей с помощью прямых методов.<br>2) Реализуйте решение задачи распространения тепла с ленточной матрицей с использованием итерационных методов.<br> 3) Сравните вычислительную производительность реализаций на CPU и GPU.<br>4) Реализуйте визуализацию вычислительных экспериментов.<br> 5) Напишите компьютерную программу, которая решает систему ОДУ, продумайте способы распараллеливания решения. |
||
− | | style="text-align:center;" | 3. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 4. || Физически информированные нейронные сети||1) Напишите компьютерную программу, которая решает обыкновенное дифференциальное уравнение с помощью классических численных алгоритмов.<br>2) Напишите компьютерную программу, реализующую физически информированную нейронную сеть для решения обыкновенного дифференциального уравнения.<br>3) Заранее реализуйте процедуру сравнения. Протестируйте решение на различных уравнениях. Сделайте вывод о сходимости алгоритма и о процедуре обучения.<br>4) Реализуйте параллельную версию алгоритма. Сравните вычислительную производительность. |
||
− | | style="text-align:center;" | 4. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 5. || Параллельные методы Монте-Карло||1) Реализуйте вычисление определенных интегралов с помощью классических квадратурных формул. Сравните погрешность вычислений с помощью метода Монте-Карло. Сравните время работы обоих подходов для достижения одинаковой точности.<br>2) Реализуйте технику уменьшения дисперсии для метода Монте-Карло. Проведите эксперименты, подтверждающие эффективность реализации.<br>3) Реализуйте генератор равномерного распределения. Проведите эксперименты по оценке корректности и производительности генератора.<br> 4) Реализуйте генератор нормального распределения. Проведите эксперименты по оценке корректности и эффективности работы генератора. |
||
− | | style="text-align:center;" | 5. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | |
+ | | style="text-align:center;" | 6. || Высокопроизводительные вычисления и современные языки программирования||Нет. |
|} |
|} |
||
− | '''Текущий контроль успеваемости обучающихся по дисциплине:''' |
||
+ | ===Текущий контроль успеваемости обучающихся по дисциплине:=== |
||
− | <span style="color:red;">(К формам текущего контроля можно отнести собеседование, коллоквиум, тест, контрольную работу, лабораторную работу, эссе, реферат и иные творческие работы.)</span> |
||
{| class="wikitable" style="width:70%;" |
{| class="wikitable" style="width:70%;" |
||
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
||
| style="width:5%" | №<br>п/п |
| style="width:5%" | №<br>п/п |
||
| style="width:20%" | Наименование раздела<br>дисциплины |
| style="width:20%" | Наименование раздела<br>дисциплины |
||
− | | style="width:25%" | Форма текущего контроля<br |
+ | | style="width:25%" | Форма текущего контроля<br> |
− | | style="width:50%" | Материалы текущего контроля<br |
+ | | style="width:50%" | Материалы текущего контроля<br> |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 1. |
| style="text-align:center;" | 1. |
||
+ | | Введение в высокопроизводительные вычисления, OpenMP и OpenCL |
||
− | | |
||
− | | |
+ | | Проверка выполнения домашних заданий;<br>Тестирование (письменное или компьютерное) |
+ | | Тестирование (письменное или компьютерное)<br> |
||
− | | Например: |
||
+ | - Как включить поддержку OpenMP в проекте?<br>- Как определить, поддерживает ли GPU OpenCL или нет?<br>- Как собрать информацию о CPU?<br>- Как собрать информацию о GPU?<br>- Как выполнять код параллельно с использованием OpenMP?<br>- Как выполнять код параллельно на GPU? |
||
− | Устный / письменный опрос:<br>-<br>-<br>-<br>...<br> |
||
+ | |- |
||
− | Тематика групповых проектов:<br>-<br>-<br>-<br>...<br> |
||
− | Темы докладов:<br>-<br>-<br>-<br>...<br> |
||
− | Тематика эссе:<br>-<br>-<br>-<br>...<br> |
||
− | Задания, в том числе, для групповых проектов:<br>-<br>-<br>-<br>...<br> |
||
− | Тестирование (письменное или компьютерное):<br>-<br>-<br>-<br>...<br><br> |
||
− | Проверка разработки отдельных частей кода программного продукта. |
||
− | |||
− | Другие формы текущего контроля, используемые Вами на занятиях<br>-<br>-<br>-<br>...<br> |
||
− | |- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 2. |
| style="text-align:center;" | 2. |
||
+ | | Параллельные алгоритмы линейной алгебры |
||
− | | |
||
− | | |
+ | | Проверка выполнения домашних заданий;<br>Тестирование (письменное или компьютерное);<br>Проверка разработки отдельных частей кода программного продукта |
+ | | Тестирование (письменное или компьютерное):<br> |
||
+ | - Что такое разреженные матрицы?<br>- Опишите особенности умножения разреженных матриц<br>- Объясните прямой и обратный путь разложения Гаусса<br>- Как составить схему решения метода прогонки?<br>- Как организовать итерации для приближенного решения СЛАУ?<br>- Как понять, нужно ли останавливать итерационный процесс или нет?<br>- Как оптимизировать алгоритмы умножения матриц с точки зрения затрат памяти и времени? |
||
| |
| |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 3. |
| style="text-align:center;" | 3. |
||
+ | | Параллельные методы решения дифференциальных уравнений |
||
− | | |
||
− | | |
+ | | Проверка выполнения домашних заданий;<br>Тестирование (письменное или компьютерное);<br>Проверка разработки отдельных частей кода программного продукта |
+ | | Тестирование (письменное или компьютерное):<br> |
||
+ | - Что такое волновое уравнение?<br>- Что такое уравнение теплопроводности?<br>- Как задача теплопроводности связана с задачей диффузии?<br>- Как описать такие задачи с помощью дифференциальных уравнений?<br>- Что такое "преобразование" с точки зрения математики?<br>- Какие типы преобразований вы знаете для решения дифференциальных уравнений?<br>- Как численно решать системы обыкновенных дифференциальных уравнений? |
||
| |
| |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 4. |
| style="text-align:center;" | 4. |
||
+ | | Физически информированные нейронные сети |
||
− | | |
||
− | | |
+ | | Проверка выполнения домашних заданий;<br>Тестирование (письменное или компьютерное);<br>Проверка разработки отдельных частей кода программного продукта |
+ | | Тестирование (письменное или компьютерное):<br> |
||
− | | |
||
+ | - Что такое нейронная сеть?<br>- Какова структура однослойного и многослойного перцептрона?<br>- Как переформулировать задачу Коши с начальным значением в терминах задачи оптимизации?<br>- Как оценить погрешность алгоритма PINN? |
||
+ | <br>- В чем плюсы и минусы подхода PINN по сравнению с классическими численными методами?<br>- Как ускорить процедуру обучения с помощью параллельного программирования? |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
| style="text-align:center;" | 5. |
| style="text-align:center;" | 5. |
||
+ | | Параллельные методы Монте-Карло |
||
− | | |
||
− | | |
+ | | Проверка выполнения домашних заданий;<br>Тестирование (письменное или компьютерное);<br>Проверка разработки отдельных частей кода программного продукта |
+ | | Тестирование (письменное или компьютерное):<br> |
||
− | | |
||
+ | - Что такое определенный интеграл?<br>- Каковы классические формулы квадратур?<br>- Что такое равномерное распределение?<br>- Что такое нормальное распределение?<br>- Как использовать распределения при построении генераторов случайных величин?<br>- Как использовать статистический подход для оценки определенного интеграла?<br>- Как вычислить число Пи с помощью метода Монте-Карло? |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | |
+ | | style="text-align:center;" | 6. || Высокопроизводительные вычисления и современные языки программирования |
+ | || Проверка выполнения домашних заданий;<br>Устный опрос;<br>Доклад |
||
+ | || Темы докладов:<br> |
||
+ | - Обзор Nvidia CUDA<br>- Обзор OpenACC<br>- C# и многопоточное программирование (Task Parallel Library)<br>- C# и программирование графических процессоров Nvidia CUDA (AleaGPU и альтернативы)<br> -C# и программирование на GPU OpenCL (Cudafy.NET, или Cloo.NET и альтернативные варианты)<br>- Java и многопоточное программирование<br>- Программирование на Java и Nvidia CUDA GPU<br>- Программирование на Java и OpenCL GPU<br>- Python и многопоточное программирование<br>- Обзор программирования на Python и GPU<br>- Swift и многопоточное программирование<br>- Swift и программирование на GPU<br>- Go и многопоточное программирование<br>- Go и программирование на GPU<br>- Rust и многопоточное программирование и программирование на GPU<br>- Erlang и многопоточное программирование |
||
|} |
|} |
||
+ | |||
− | '''Контрольные вопросы для подготовки к промежуточной аттестации:''' |
||
+ | ===Контрольные вопросы для подготовки к промежуточной аттестации:=== |
||
{| class="wikitable" style="width:70%;" |
{| class="wikitable" style="width:70%;" |
||
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
||
Line 138: | Line 136: | ||
| style="width:65%" | Вопросы |
| style="width:65%" | Вопросы |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 1. || |
+ | | style="text-align:center;" | 1. ||Введение в высокопроизводительные вычисления, OpenMP и OpenCL |
+ | ||1) OpenMP: подпрограммы библиотеки времени выполнения, переменные окружения<br>2) Директивы компилятора OpenMP: секции parallel<br>3) Директивы компилятора OpenMP: синхронизация<br>4) OpenCL: платформа и модели выполнения<br>5) OpenCL: модель памяти |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 2. ||Параллельные алгоритмы линейной алгебры ||1) Матричная алгебра: разреженные матрицы<br>2) СЛАУ: устранение гаусса<br>3) СЛАУ: разложение Холецкого<br>4) СЛАУ: методы прогонки<br>5) СЛАУ: итерационные методы |
||
− | | style="text-align:center;" | 2. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 3. ||Параллельные методы решения дифференциальных уравнений ||1) Волновые уравнения<br>2) Сеточные методы<br>3) Задача теплопроводности<br>4) Задача Дирихле для уравнения Пуассона<br>5) Системы обыкновенных дифференциальных уравнений и соответствующие решения |
||
− | | style="text-align:center;" | 3. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 4. ||Физически информированные нейронные сети ||1) Физически обоснованные нейронные сети<br>2) PINN для решения обыкновенных дифференциальных уравнений<br>3) PINN и системы обыкновенных дифференциальных уравнений<br>4) PINN и частичные дифференциальные уравнения |
||
− | | style="text-align:center;" | 4. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | style="text-align:center;" | 5. ||Параллельные методы Монте-Карло ||1) Математический анализ: определенные интегралы и методы их вычислений<br>2) Статистика: свойства случайной величины<br>3) Статистика: равномерное распределение<br>4) Статистика: нормальное распределение<br>5) Метод Монте-Карло |
||
− | | style="text-align:center;" | 5. || || |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | |
+ | | style="text-align:center;" | 6. ||Высокопроизводительные вычисления и современные языки программирования |
+ | ||1) Модель программирования Nvidia CUDA<br>2) Модель памяти Nvidia CUDA<br>3) Модель программирования OpenACC |
||
|} |
|} |
||
− | '''Вопросы/Задания к промежуточной аттестации в устной/письменной форме:''' |
||
− | + | ===Вопросы/Задания к промежуточной аттестации в устной/письменной форме:=== |
|
+ | #Что такое закон Амдала? |
||
+ | #Перечислите особенности #pragma parallel |
||
+ | #Какие типы модификаторов доступа к памяти вы знаете? |
||
+ | #Сравните секции parallel и задачи OpenMP |
||
+ | #Как синхронизировать потоки в OpenMP? |
||
+ | #Опишите структуру программы OpenCL |
||
+ | #Какие виды памяти в OpenCL вы знаете? |
||
+ | #Что такое ядра OpenCL? |
||
+ | #Перечислите сервисные операции OpenCL |
||
+ | #Как вычислить определенный интеграл? |
||
+ | #Что такое случайная переменная? |
||
+ | #Что такое генератор случайных величин? |
||
+ | #Как построить генератор случайных величин? |
||
+ | #Как работают методы Монте-Карло? |
||
+ | #Как выполнить умножение разреженных матриц? |
||
+ | #Перечислите прямые методы решения СЛАУ |
||
+ | #В чем разница между устранением Гаусса и разложением Холецкого? |
||
+ | #Объясните итерационный алгоритм решения СЛАУ на графе |
||
+ | #Как ускорить алгоритмы линейной алгебры с помощью многопоточного программирования? |
||
+ | #Как задать граничные условия для дифференциальных уравнений с частными производными? |
||
+ | #Как задать начальные условия для дифференциальных уравнений с частными производными? |
||
+ | #В чем разница между явными и неявными конечно-разностными схемами? |
||
+ | #Перечислите возможные способы решения задачи о распространении тепла в пластине. |
||
+ | #Переформулируйте поставленную задачу Коши в оптимизационную задачу. |
||
+ | #Что такое PINN-подход к дифференциальным уравнениям? |
||
+ | #Перечислите известные оптимизаторы и их особенности. |
||
+ | #Как избежать влияния начального условия на значение, выдаваемое нейронной сетью? |
||
+ | #Что делать с начальным распределением функции в задаче PDE, формулируя задачу оптимизации? |
||
+ | #Что делать с граничными условиями в PDE-задаче при формулировке задачи оптимизации? |
||
+ | #Как решить систему ODE с помощью PINN-подхода? |
||
+ | #Сравните Nvidia CUDA и OpenCL. В чем плюсы и минусы обоих наборов инструментов? |
||
+ | #Сравнение библиотек OpenACC и OpenMP: основные различия и цели другого подхода |
||
+ | #C#: библиотека параллельных задач |
||
+ | #Java: Runnable |
||
+ | #Python: модуль потоков |
||
− | 1.<br>2.<br>3.<br>...<br>48.<br>49.<br>50.<br>... |
||
=== Перечень учебно-методического обеспечения дисциплины === |
=== Перечень учебно-методического обеспечения дисциплины === |
||
Список основной литературы: |
Список основной литературы: |
||
− | |||
− | Список дополнительной литературы: |
||
#Barbara Chapman, Gabriele Jost, Ruud van der Pas. (2008) Using OpenMP: Portable Shared Memory Parallel Programming, The MIT Press, |
#Barbara Chapman, Gabriele Jost, Ruud van der Pas. (2008) Using OpenMP: Portable Shared Memory Parallel Programming, The MIT Press, |
||
#Scarpino, M. (2011) OpenCL in Action: How to Accelerate Graphics and Computations, Manning. |
#Scarpino, M. (2011) OpenCL in Action: How to Accelerate Graphics and Computations, Manning. |
||
#Banger, R., Bhattacharyya, K. (2013) OpenCL Programming by Example, Packt Publishing. |
#Banger, R., Bhattacharyya, K. (2013) OpenCL Programming by Example, Packt Publishing. |
||
#Sanders, J., Kandrot, E. (2010) CUDA by example: an introduction to general-purpose GPU programming, Addison-Weslye |
#Sanders, J., Kandrot, E. (2010) CUDA by example: an introduction to general-purpose GPU programming, Addison-Weslye |
||
+ | |||
+ | Список дополнительной литературы: |
||
+ | #Введение в высокопроизводительные вычисления: [https://hpc.llnl.gov/documentation/tutorials/introduction-parallel-computing-tutorial introduction-high-performance-computing] |
||
+ | #Введение в параллельное программирование: [http://www.hpcc.unn.ru/mskurs/cs338_pp_index.htm introduction-parallel-programming] |
||
+ | #Учебные материалы по OpenMP: [https://www.openmp.org/resources/tutorials-articles/ OpenMP-tutorials] |
||
+ | #Учебные материалы по OpenCL: [https://www.nersc.gov/assets/pubs_presos/MattsonTutorialSC14.pdf OpenCL-tutorials] |
||
+ | |||
+ | Необходимое программное обеспечение: |
||
+ | #Microsoft VS Code / Microsoft Visual Studio / любая другая подходящая среда разработки на языке C++ |
||
+ | #GNU Plot |
||
+ | #OpenMP, OpenCL, CUDA библиотеки |
||
=== Методические указания для обучающихся по освоению дисциплины === |
=== Методические указания для обучающихся по освоению дисциплины === |
||
− | Выберите соответствующие виды учебных занятий, которые используются при изучении Вашей дисциплины) |
||
{| class="wikitable" style="width:80%;" |
{| class="wikitable" style="width:80%;" |
||
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; font-weight:bold;" |
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; font-weight:bold;" |
||
Line 174: | Line 215: | ||
| style="vertical-align:middle; text-align:center;" | Лекция |
| style="vertical-align:middle; text-align:center;" | Лекция |
||
| style="vertical-align:middle; text-align:left;" | Написание конспекта лекций: кратко, схематично, последовательно фиксировать основные положения лекции, выводы, формулировки, обобщения; помечать важные мысли, выделять ключевые слова, термины. Обозначить вопросы, термины или другой материал, который вызывает трудности, пометить и попытаться найти ответ в рекомендуемой литературе. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. |
| style="vertical-align:middle; text-align:left;" | Написание конспекта лекций: кратко, схематично, последовательно фиксировать основные положения лекции, выводы, формулировки, обобщения; помечать важные мысли, выделять ключевые слова, термины. Обозначить вопросы, термины или другой материал, который вызывает трудности, пометить и попытаться найти ответ в рекомендуемой литературе. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. |
||
− | |- |
||
− | | style="vertical-align:middle; text-align:center;" | Подготовка к промежуточной аттестации |
||
− | | style="vertical-align:middle; text-align:left;" | При подготовке к промежуточной аттестации необходимо проработать вопросы по темам, которые рекомендуются для самостоятельной подготовки. При возникновении затруднений с ответами следует ориентироваться на конспекты лекций, семинаров, рекомендуемую литературу, материалы электронных и информационных справочных ресурсов, статей.<br>Если тема вызывает затруднение, четко сформулировать проблемный вопрос и задать его преподавателю. |
||
|- |
|- |
||
| style="vertical-align:middle; text-align:center;" | Практические (лабораторные) занятия |
| style="vertical-align:middle; text-align:center;" | Практические (лабораторные) занятия |
||
Line 189: | Line 227: | ||
| style="vertical-align:middle; text-align:center;" | Дискуссия |
| style="vertical-align:middle; text-align:center;" | Дискуссия |
||
| style="vertical-align:middle; text-align:left;" | Публичное обсуждение спорного вопроса, проблемы. Каждая сторона должна оппонировать мнение собеседника, аргументируя свою позицию. |
| style="vertical-align:middle; text-align:left;" | Публичное обсуждение спорного вопроса, проблемы. Каждая сторона должна оппонировать мнение собеседника, аргументируя свою позицию. |
||
− | |- |
||
− | | style="vertical-align:middle; text-align:center;" | Тестирование (устное/письменное) |
||
− | | style="vertical-align:middle; text-align:left;" | При подготовке к тестированию необходимо проработать материалы лекций, семинаров, основной и дополнительной литературы по заданной теме. Основная цель тестирования – показать уровень сформированности знаний по конкретной теме или ее части. |
||
− | |- |
||
− | | style="vertical-align:middle; text-align:center;" | Индивидуальная работа |
||
− | | style="vertical-align:middle; text-align:left;" | При выполнение индивидуальной работы необходимо взять задание у преподавателя, ознакомиться с требованиями к выполнению работы, изучить поставленную проблему, найти решение проблемы. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. Оформить результаты работы. |
||
|- |
|- |
||
| style="vertical-align:middle; text-align:center;" | Разработка отдельных частей кода |
| style="vertical-align:middle; text-align:center;" | Разработка отдельных частей кода |
||
Line 201: | Line 233: | ||
| style="vertical-align:middle; text-align:center;" | Выполнение домашних заданий и групповых проектов |
| style="vertical-align:middle; text-align:center;" | Выполнение домашних заданий и групповых проектов |
||
| style="vertical-align:middle; text-align:left;" | Для выполнения домашних заданий и групповых проектов необходимо получить формулировку задания от преподавателя и убедиться в понимании задания. При выполнение домашних заданий и групповых проектов необходимо проработать материалы лекций, основной и дополнительной литературы по заданной теме. |
| style="vertical-align:middle; text-align:left;" | Для выполнения домашних заданий и групповых проектов необходимо получить формулировку задания от преподавателя и убедиться в понимании задания. При выполнение домашних заданий и групповых проектов необходимо проработать материалы лекций, основной и дополнительной литературы по заданной теме. |
||
+ | |- |
||
+ | | style="vertical-align:middle; text-align:center;" | Индивидуальная работа |
||
+ | | style="vertical-align:middle; text-align:left;" | При выполнение индивидуальной работы необходимо взять задание у преподавателя, ознакомиться с требованиями к выполнению работы, изучить поставленную проблему, найти решение проблемы. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. Оформить результаты работы. |
||
+ | |- |
||
+ | | style="vertical-align:middle; text-align:center;" | Тестирование (устное/письменное) |
||
+ | | style="vertical-align:middle; text-align:left;" | При подготовке к тестированию необходимо проработать материалы лекций, семинаров, основной и дополнительной литературы по заданной теме. Основная цель тестирования – показать уровень сформированности знаний по конкретной теме или ее части. |
||
|} |
|} |
||
=== Методы и технологии обучения, способствующие формированию компетенции === |
=== Методы и технологии обучения, способствующие формированию компетенции === |
||
− | <span style="color:red;">(Указываются все используемые преподавателем методы и технологии обучения)</span> |
||
{| class="wikitable" |
{| class="wikitable" |
||
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
|- style="vertical-align:middle; text-align:center; background-color:#EAECF0; color:#202122; font-weight:bold;" |
||
| Методы и технологии обучения, способствующие формированию компетенции |
| Методы и технологии обучения, способствующие формированию компетенции |
||
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
|- style="vertical-align:middle; background-color:#F8F9FA; color:#202122;" |
||
+ | | Информационно-коммуникационная технология, проектная технология, технология проблемного обучения, кейс-технология, традиционные технологии, модульные технологии |
||
− | | |
||
− | |} |
||
− | <span style="color:red;">Например:</span> |
||
− | {| class="wikitable" style="width:80%;" |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center; width:5%;" | 1. |
||
− | | style="width:20%;" | Информационно – коммуникационная технология |
||
− | | style="width:75%;" | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 2. |
||
− | | Технология развития критического мышления |
||
− | | Основные методические приемы развития критического мышления |
||
− | # Прием «Кластер» |
||
− | # Таблица |
||
− | #Учебно-мозговой штурм |
||
− | #Интеллектуальная разминка |
||
− | #Зигзаг, зигзаг -2 |
||
− | #Прием «Инсерт» |
||
− | #Эссе |
||
− | #Приём «Корзина идей» |
||
− | #Приём «Составление синквейнов» |
||
− | #Метод контрольных вопросов |
||
− | #Приём «Знаю../Хочу узнать…/Узнал…» |
||
− | #Круги по воде |
||
− | #Ролевой проект |
||
− | #Да – нет |
||
− | #Приём «Чтение с остановками» |
||
− | #Приём «Взаимоопрос» |
||
− | #Приём «Перепутанные логические цепочки» |
||
− | #Приём «Перекрёстная дискуссия» |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 3. |
||
− | | Проектная технология |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 4. |
||
− | | Технология проблемного обучения |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 5. |
||
− | | Кейс – технология |
||
− | | К методам кейс-технологий, активизирующим учебный процесс, относятся: |
||
− | *метод ситуационного анализа (Метод анализа конкретных ситуаций, ситуационные задачи и упражнения; кейс-стадии) |
||
− | *метод инцидента; |
||
− | *метод ситуационно-ролевых игр; |
||
− | *метод разбора деловой корреспонденции; |
||
− | *игровое проектирование; |
||
− | *метод дискуссии. |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 6. |
||
− | | Технология интегрированного обучения |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 7. |
||
− | | Педагогика сотрудничества |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 8. |
||
− | | Технологии уровневой дифференциации |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 9. |
||
− | | Групповая технология |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 10. |
||
− | | Традиционные технологии (классно-урочная система) |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 11. |
||
− | | Здоровьесберегающие технологии |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 12. |
||
− | | Игровая технология |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 13. |
||
− | | Модульная технология |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | style="text-align:center;" | 14. |
||
− | | Технология мастерских |
||
− | | |
||
− | |- style="vertical-align:top; text-align:left; background-color:#F8F9FA; color:#202122;" |
||
− | | |
||
− | | и др. |
||
− | | |
||
|} |
|} |
Latest revision as of 12:21, 26 March 2024
Высокопроизводительные вычисления
- Квалификация выпускника: бакалавр
- Направление подготовки: 09.03.01 - “Информатика и вычислительная техника”
- Направленность (профиль) образовательной программы: Математические основы ИИ
- Программу разработал(а): Конюхов И.В.
1. Краткая характеристика дисциплины
Изучение дисциплины обеспечивает формирование и развитие компетенций обучающихся в области программного обеспечения и его разработки; искусственного интеллекта и его применения для решения различных прикладных задач в рамках профессиональной деятельности. В ходе освоения дисциплины обучающиеся рассматривают некоторые известные численные алгоритмы и особенности их параллельной реализации на центральных и графических процессорах. Рассматриваются прямые методы решения систем линейных алгебраических уравнений с матрицами общего и специального типов (метод Гаусса, разложение Холецкого, прогонка), итерационные методы решения систем линейных уравнений (методы простой итерации и верхней релаксации), вопросы реализации разреженных матриц и алгебры над ними, методы Монте-Карло, численные методы решения систем обыкновенных дифференциальных уравнений и уравнений с частными производными, а также новейшие физически-информированные нейронные сети.
2. Перечень планируемых результатов обучения
- Целью освоения дисциплины является формирование общего понимания высокоэффективной реализации общих вычислительных алгоритмов с использованием процессоров различных типов и архитектур, а также демонстрация современных подходов к вычислительным алгоритмам на базе технологий машинного обучения.
- Задачами дисциплины являются изучение технологий параллельного программирования на центральных, графических и нейропроцессорах, анализ вычислительных алгоритмов с целью выявления точек параллелизма (hotpoints) и узких мест (bottle necks), а также внедрение технологий искусственного интеллекта и нейронных сетей в классические вычислительные задачи.
Общая характеристика результата обучения по дисциплине
- Знания:
- подходов к параллельному программированию,
- архитектур современных процессоров,
- программных моделей с общей памятью,
- архитектуры современных графических процессоров,
- основ выполнения вычислений общего назначения на разных платформах,
- современных подходов к программированию алгоритмов решения задач математики и физики.
- Умения:
- SIMD- и MIMD-программирование для CPU,
- SIMD-программирование для GPU,
- выполнять синхронизацию потоков,
- выполнять оптимизация общей памяти.
- Навыки (владения):
- проведения анализ алгоритмов на предмет возможного параллелизма с выявлением "горячих точек" и "бутылочных горлышек",
- применения современного параллельного программирования к методам статистики,
- решения систем алгебраических уравнений наиболее эффективным способом,
- решения основных типов дифференциальных уравнений, встречающихся в широком спектре реальных задач,
- применения современных вычислительных алгоритмов на основе машинного обучения для решения различных типов дифференциальных уравнений.
3. Структура и содержание дисциплины
№ п/п |
Наименование раздела дисциплины |
Содержание дисциплины по темам |
1. | Введение в высокопроизводительные вычисления, OpenMP и OpenCL | - Существующие суперкомпьютерные системы - Модель общей памяти - Подходы к программированию MIMD и SIMD - Массивно-параллельные ускорители - Иерархия памяти |
2. | Параллельные алгоритмы линейной алгебры | - Матричное умножение: оптимизация производительности различных реализаций на основе различных типов памяти устройства - Прямые методы решения СЛАУ: исключение Гаусса, разложение Холецкого, метод прогонки, параллельная реализация - Итерационные методы решения СЛАУ: метод Якоби, метод Зейделя, релаксационные методы, параллельная реализация |
3. | Параллельные методы решения дифференциальных уравнений | - Решение систем обыкновенных дифференциальных уравнений - Решение волнового уравнения - Решение задачи теплопроводности - Решение задачи Дирихле для уравнения Пуассона |
4. | Физически информированные нейронные сети | - Основы нейронных сетей - Основы методов оптимизации - Принципы преобразования задач, записанных в терминах дифференциальных уравнений, в оптимизационные - Повышение эффективности процедуры обучения |
5. | Параллельные методы Монте-Карло | - Вычисление определенных интегралов - Способы уменьшения дисперсии - Генераторы псевдослучайных чисел - Подходы к распараллеливанию методов Монте-Карло |
6. | Высокопроизводительные вычисления и современные языки программирования | - Многопоточность в современных языках программирования - Существующие обертки для OpenCL и CUDA - Другие высокоуровневые подходы к параллельному программированию |
4. Методические и оценочные материалы
Задания для практических занятий:
№ п/п |
Наименование раздела дисциплины (модуля) |
Перечень рассматриваемых тем (вопросов) |
1. | Введение в высокопроизводительные вычисления, OpenMP и OpenCL | 1) Напишите программу, которая получает ID потока, печатает на консоли "Привет из потока #", печатает общее количество потоков из главного потока. Введите необходимые переменные локально, а затем сделайте их глобальными. Протестируйте программу. Используйте необходимые пункты для решения возникших проблем. 2) Напишите программу, которая хранит 3 массива фиксированной длины, инициализирует элементы массивов их индексами, печатает общее количество потоков из главного потока, суммирует элементы двух первых массивов и записывает их в третий, а также печатает результат из текущего потока. Запустите задачу в параллельной секции и с помощью параллельного цикла. Протестируйте программу. Попробуйте использовать параллельный цикл с параллельной секцией и без нее. Попробуйте измерить время вычислений. 3) Напишите программу, которая вычисляет определенный интеграл заданной функции на заданном интервале (с использованием метода трапеций). Протестируйте программу. Измерьте время вычисления. |
2. | Параллельные алгоритмы линейной алгебры | 1) Реализуйте матрично-векторное умножение в OpenMP и OpenCL. Обсудите различные технологии хранения данных. 2)Выполните матричное умножение, попробуйте оптимизацию. 3) Реализуйте методы развертки и редукции для полосато-матричного СЛАУ. Использование инструментария OpenMP и OpenCL для распараллеливания. 4) Решите СЛАУ с помощью итерационного алгоритма. Реализуйте решение с помощью подходов OpenMP и OpenCL. |
3. | Параллельные методы решения дифференциальных уравнений | 1) Реализуйте решение задачи распространения тепла с ленточной матрицей с помощью прямых методов. 2) Реализуйте решение задачи распространения тепла с ленточной матрицей с использованием итерационных методов. 3) Сравните вычислительную производительность реализаций на CPU и GPU. 4) Реализуйте визуализацию вычислительных экспериментов. 5) Напишите компьютерную программу, которая решает систему ОДУ, продумайте способы распараллеливания решения. |
4. | Физически информированные нейронные сети | 1) Напишите компьютерную программу, которая решает обыкновенное дифференциальное уравнение с помощью классических численных алгоритмов. 2) Напишите компьютерную программу, реализующую физически информированную нейронную сеть для решения обыкновенного дифференциального уравнения. 3) Заранее реализуйте процедуру сравнения. Протестируйте решение на различных уравнениях. Сделайте вывод о сходимости алгоритма и о процедуре обучения. 4) Реализуйте параллельную версию алгоритма. Сравните вычислительную производительность. |
5. | Параллельные методы Монте-Карло | 1) Реализуйте вычисление определенных интегралов с помощью классических квадратурных формул. Сравните погрешность вычислений с помощью метода Монте-Карло. Сравните время работы обоих подходов для достижения одинаковой точности. 2) Реализуйте технику уменьшения дисперсии для метода Монте-Карло. Проведите эксперименты, подтверждающие эффективность реализации. 3) Реализуйте генератор равномерного распределения. Проведите эксперименты по оценке корректности и производительности генератора. 4) Реализуйте генератор нормального распределения. Проведите эксперименты по оценке корректности и эффективности работы генератора. |
6. | Высокопроизводительные вычисления и современные языки программирования | Нет. |
Текущий контроль успеваемости обучающихся по дисциплине:
№ п/п |
Наименование раздела дисциплины |
Форма текущего контроля |
Материалы текущего контроля | |
1. | Введение в высокопроизводительные вычисления, OpenMP и OpenCL | Проверка выполнения домашних заданий; Тестирование (письменное или компьютерное) |
Тестирование (письменное или компьютерное) - Как включить поддержку OpenMP в проекте? | |
2. | Параллельные алгоритмы линейной алгебры | Проверка выполнения домашних заданий; Тестирование (письменное или компьютерное); Проверка разработки отдельных частей кода программного продукта |
Тестирование (письменное или компьютерное): - Что такое разреженные матрицы? |
|
3. | Параллельные методы решения дифференциальных уравнений | Проверка выполнения домашних заданий; Тестирование (письменное или компьютерное); Проверка разработки отдельных частей кода программного продукта |
Тестирование (письменное или компьютерное): - Что такое волновое уравнение? |
|
4. | Физически информированные нейронные сети | Проверка выполнения домашних заданий; Тестирование (письменное или компьютерное); Проверка разработки отдельных частей кода программного продукта |
Тестирование (письменное или компьютерное): - Что такое нейронная сеть? | |
5. | Параллельные методы Монте-Карло | Проверка выполнения домашних заданий; Тестирование (письменное или компьютерное); Проверка разработки отдельных частей кода программного продукта |
Тестирование (письменное или компьютерное): - Что такое определенный интеграл? | |
6. | Высокопроизводительные вычисления и современные языки программирования | Проверка выполнения домашних заданий; Устный опрос; Доклад |
Темы докладов: - Обзор Nvidia CUDA |
Контрольные вопросы для подготовки к промежуточной аттестации:
№ п/п |
Наименование раздела дисциплины |
Вопросы |
1. | Введение в высокопроизводительные вычисления, OpenMP и OpenCL | 1) OpenMP: подпрограммы библиотеки времени выполнения, переменные окружения 2) Директивы компилятора OpenMP: секции parallel 3) Директивы компилятора OpenMP: синхронизация 4) OpenCL: платформа и модели выполнения 5) OpenCL: модель памяти |
2. | Параллельные алгоритмы линейной алгебры | 1) Матричная алгебра: разреженные матрицы 2) СЛАУ: устранение гаусса 3) СЛАУ: разложение Холецкого 4) СЛАУ: методы прогонки 5) СЛАУ: итерационные методы |
3. | Параллельные методы решения дифференциальных уравнений | 1) Волновые уравнения 2) Сеточные методы 3) Задача теплопроводности 4) Задача Дирихле для уравнения Пуассона 5) Системы обыкновенных дифференциальных уравнений и соответствующие решения |
4. | Физически информированные нейронные сети | 1) Физически обоснованные нейронные сети 2) PINN для решения обыкновенных дифференциальных уравнений 3) PINN и системы обыкновенных дифференциальных уравнений 4) PINN и частичные дифференциальные уравнения |
5. | Параллельные методы Монте-Карло | 1) Математический анализ: определенные интегралы и методы их вычислений 2) Статистика: свойства случайной величины 3) Статистика: равномерное распределение 4) Статистика: нормальное распределение 5) Метод Монте-Карло |
6. | Высокопроизводительные вычисления и современные языки программирования | 1) Модель программирования Nvidia CUDA 2) Модель памяти Nvidia CUDA 3) Модель программирования OpenACC |
Вопросы/Задания к промежуточной аттестации в устной/письменной форме:
- Что такое закон Амдала?
- Перечислите особенности #pragma parallel
- Какие типы модификаторов доступа к памяти вы знаете?
- Сравните секции parallel и задачи OpenMP
- Как синхронизировать потоки в OpenMP?
- Опишите структуру программы OpenCL
- Какие виды памяти в OpenCL вы знаете?
- Что такое ядра OpenCL?
- Перечислите сервисные операции OpenCL
- Как вычислить определенный интеграл?
- Что такое случайная переменная?
- Что такое генератор случайных величин?
- Как построить генератор случайных величин?
- Как работают методы Монте-Карло?
- Как выполнить умножение разреженных матриц?
- Перечислите прямые методы решения СЛАУ
- В чем разница между устранением Гаусса и разложением Холецкого?
- Объясните итерационный алгоритм решения СЛАУ на графе
- Как ускорить алгоритмы линейной алгебры с помощью многопоточного программирования?
- Как задать граничные условия для дифференциальных уравнений с частными производными?
- Как задать начальные условия для дифференциальных уравнений с частными производными?
- В чем разница между явными и неявными конечно-разностными схемами?
- Перечислите возможные способы решения задачи о распространении тепла в пластине.
- Переформулируйте поставленную задачу Коши в оптимизационную задачу.
- Что такое PINN-подход к дифференциальным уравнениям?
- Перечислите известные оптимизаторы и их особенности.
- Как избежать влияния начального условия на значение, выдаваемое нейронной сетью?
- Что делать с начальным распределением функции в задаче PDE, формулируя задачу оптимизации?
- Что делать с граничными условиями в PDE-задаче при формулировке задачи оптимизации?
- Как решить систему ODE с помощью PINN-подхода?
- Сравните Nvidia CUDA и OpenCL. В чем плюсы и минусы обоих наборов инструментов?
- Сравнение библиотек OpenACC и OpenMP: основные различия и цели другого подхода
- C#: библиотека параллельных задач
- Java: Runnable
- Python: модуль потоков
Перечень учебно-методического обеспечения дисциплины
Список основной литературы:
- Barbara Chapman, Gabriele Jost, Ruud van der Pas. (2008) Using OpenMP: Portable Shared Memory Parallel Programming, The MIT Press,
- Scarpino, M. (2011) OpenCL in Action: How to Accelerate Graphics and Computations, Manning.
- Banger, R., Bhattacharyya, K. (2013) OpenCL Programming by Example, Packt Publishing.
- Sanders, J., Kandrot, E. (2010) CUDA by example: an introduction to general-purpose GPU programming, Addison-Weslye
Список дополнительной литературы:
- Введение в высокопроизводительные вычисления: introduction-high-performance-computing
- Введение в параллельное программирование: introduction-parallel-programming
- Учебные материалы по OpenMP: OpenMP-tutorials
- Учебные материалы по OpenCL: OpenCL-tutorials
Необходимое программное обеспечение:
- Microsoft VS Code / Microsoft Visual Studio / любая другая подходящая среда разработки на языке C++
- GNU Plot
- OpenMP, OpenCL, CUDA библиотеки
Методические указания для обучающихся по освоению дисциплины
Вид учебных занятий/деятельности |
Деятельность обучающегося |
Лекция | Написание конспекта лекций: кратко, схематично, последовательно фиксировать основные положения лекции, выводы, формулировки, обобщения; помечать важные мысли, выделять ключевые слова, термины. Обозначить вопросы, термины или другой материал, который вызывает трудности, пометить и попытаться найти ответ в рекомендуемой литературе. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. |
Практические (лабораторные) занятия | Практические занятия предназначены прежде всего для разбора отдельных сложных положений, тренировки аналитических навыков, а также для развития коммуникационных навыков. Поэтому на практических занятиях необходимо участвовать в тех формах обсуждения материала, которые предлагает преподаватель: отвечать на вопросы преподавателя, дополнять ответы других студентов, приводить примеры, задавать вопросы другим выступающим, обсуждать вопросы и выполнять задания в группах. Работа на практических занятиях подразумевает домашнюю подготовку и активную умственную работу на самом занятии. Работа на практических занятиях в форме устного опроса заключается прежде всего в тренировке навыков применять теоретические положения к самому разнообразному материалу. В ходе практических занятий студенты работают в группах для обсуждения предлагаемых вопросов. |
Самостоятельная работа | Самостоятельная работа состоит из следующих частей: 1) чтение учебной, справочной, научной литературы; 2) повторение материала лекций; 3) составление планов устных выступлений; 4) подготовка презентаций. При чтении учебной литературы нужно разграничивать для себя материал на отдельные проблемы, концепции, идеи. Учебную литературу можно найти в электронных библиотечных системах, на которые подписан АНО Университет Иннополис. |
Доклад | Публичное, развернутое сообщение по определенной теме или вопросу, основанное на документальных данных. При подготовке доклада рекомендуется использовать разнообразные источники, позволяющие глубже разобраться в теме. Учебную литературу можно найти в электронных библиотечных системах, на которые подписан АНО Университет Иннополис. |
Дискуссия | Публичное обсуждение спорного вопроса, проблемы. Каждая сторона должна оппонировать мнение собеседника, аргументируя свою позицию. |
Разработка отдельных частей кода | Разработать часть кода, исходя из поставленной задачи и рекомендаций преподавателя. При выполнении работы рекомендуется обращаться к материалам лекций и семинарских (практических) занятий. Если возникают затруднения, необходимо проконсультироваться с преподавателем. |
Выполнение домашних заданий и групповых проектов | Для выполнения домашних заданий и групповых проектов необходимо получить формулировку задания от преподавателя и убедиться в понимании задания. При выполнение домашних заданий и групповых проектов необходимо проработать материалы лекций, основной и дополнительной литературы по заданной теме. |
Индивидуальная работа | При выполнение индивидуальной работы необходимо взять задание у преподавателя, ознакомиться с требованиями к выполнению работы, изучить поставленную проблему, найти решение проблемы. Если самостоятельно не удается разобраться в материале, необходимо сформулировать вопрос и задать преподавателю на консультации, во время семинарского (практического) занятия. Оформить результаты работы. |
Тестирование (устное/письменное) | При подготовке к тестированию необходимо проработать материалы лекций, семинаров, основной и дополнительной литературы по заданной теме. Основная цель тестирования – показать уровень сформированности знаний по конкретной теме или ее части. |
Методы и технологии обучения, способствующие формированию компетенции
Методы и технологии обучения, способствующие формированию компетенции |
Информационно-коммуникационная технология, проектная технология, технология проблемного обучения, кейс-технология, традиционные технологии, модульные технологии |