Пересмотрена в 2013 году на заседании методической комиссии факультета информационных технологий от 24.06.2013 № 53 Разработчик(и): каф. ПВ, Калгин Константин Викторович, к.ф-м.н., каф. ПВ, Киреев Сергей Евгеньевич, каф. ПВ, Перепелкин Владислав Александрович (кафедра, ФИО, ученая степень, ученое звание) Рабочая программа дисциплины одобрена на заседании Методической комиссии факультета информационных технологий от 03.02.2014 года, протокол № 55 2 Аннотация рабочей программы дисциплины Дисциплина «Эффективное программирование современных микропроцессоров и мультипроцессоров» входит в вариативную часть профессионального цикла образовательной программы бакалавриата по направлению подготовки 230100 «Информатика и вычислительная техника». Дисциплина реализуется на факультете информационных технологий НГУ кафедрой Параллельных вычислений. Содержание дисциплины охватывает круг вопросов, связанных с разработкой программ, позволяющих эффективно использовать ресурсы компьютера. Дисциплина нацелена на формирование общекультурных компетенций ОК1, ОК-2, ОК-6, ОК-11, ОК-12, ОК-13, профессиональных компетенций ПК-2, ПК-5 выпускника. Преподавание дисциплины предусматривает проведение следующих видов учебных занятий: лекционные, практические. Рабочая программа дисциплины предусматривает проведение следующих видов контроля: текущий контроль успеваемости в форме текущий контроль успеваемости в форме защиты практических заданий и промежуточный контроль в форме дифференцированного зачета. Объем дисциплины 4 зачетные единицы, в том числе в академических часах по видам учебных занятий: Сем естр Общий объем 5 144 учебные занятия в том числе контактная работа обучающихся с преподавателем Всего из них Лекции Лабор Практи КСР Конс ные ческие ульта занят занятия ции ия 65 32 – 32 1 – СРС 79 форма промежуточ ной аттестации (зачет, дифференци рованный зачет, экзамен) дифференци рованный зачет 3 1. Цели освоения дисциплины Дисциплина «Эффективное программирование современных микропроцессоров и мультипроцессоров» имеет своей целью: получение студентами знаний по реализации различных численных моделей и алгоритмов для современных процессоров общего назначения и построенных на их основе мультипроцессоров; изучение способов и средств оптимизации программ на современных микропроцессорах и мультипроцессорах; приобретение студентами навыков эффективного программирования и оптимизации программ для современных микропроцессоров и мультипроцессоров. 2. Место дисциплины в структуре образовательной программы Дисциплина входит в вариативную часть профессионального цикла. С другими частями образовательной программы соотносится следующим образом. Дисциплины, предшествующие по учебному плану: «Информатика», «Математическая логика и теория алгоритмов», «Математический анализ», «Программирование», «ЭВМ и периферийные устройства», «Операционные системы», «Основы параллельного программирования». Для успешного освоения данной дисциплины учащийся должен: Знать: принципы организации ЭВМ, основы архитектуры современных микропроцессоров; Уметь: пользоваться операционной системой UNIX/Linux, разрабатывать последовательные и многопоточные программы; Владеть: мышлением, связанным с пониманием работы ЭВМ и её основных компонентов, языками программирования C/C++, базовыми средствами компиляции и отладки программ. Дисциплины, последующие по учебному плану: «Введение в организацию распределенных вычислений» 4 3. Компетенции обучающегося, формируемые в результате освоения дисциплины (перечень планируемых результатов обучения) компетенции Код В результате освоения данной дисциплины обучающийся демонстрирует следующие общекультурные и профессиональные компетенции: Формулировка компетенции из ФГОС Планируемые достижения компетенций) результаты заданного обучения уровня (показатели освоения ОК-1 владеет культурой Знать основные классы современных мышления, способен к микропроцессоров и мультипроцессоров, их обобщению, анализу, достоинства и недостатки. восприятию информации, постановке цели и выбору путей ее достижения ОК-2 умеет логически верно, аргументировано и ясно строить устную и письменную речь ОК-6 стремится саморазвитию, повышению квалификации мастерства ОК11 осознает сущность и Знать способы эффективной организации значение информации вычислений на современных в развитии микропроцессорах и мультипроцессорах. современного общества; владеет основными методами, способами и Уметь оценивать эффективность работы заданной программы на заданном оборудовании, оценивать потенциал ее оптимизации. к Знать особенности различных моделей современных микропроцессоров и своей мультипроцессоров общего назначения, их и потенциальные узкие места. 5 средствами получения, хранения, переработки информации ОК12 имеет навыки работы Уметь оптимизировать программы с учетом с компьютером как архитектуры микропроцессора и средством управления мультипроцессора. информацией ОК13 способен работать с Уметь определять архитектурные информацией в особенности микропроцессоров и глобальных мультипроцессоров. компьютерных сетях ПК-2 осваивать методики использования программных средств для решения практических задач ПК-5 разрабатывать Уметь выполнять оптимизацию компоненты программных комплексов под произвольную программных и под заданную архитектуру. комплексов и баз данных, использовать современные инструментальные средства и технологии программирования Уметь пользоваться средствами оптимизации компилятора, инструментальными средствами анализа производительности и профилирования программ. 6 4. Объем, структура и содержание дисциплины 4 5 6 5 1-2 4 – 4 – – 8 Защита практических заданий (2) 5 3-4 4 – 4 – – 12 Защита практических заданий (4) 5 5-7 6 – 6 – – 16 5 810 6 – 6 – – 12 Оптимизация многопоточных программ. Инструментальны е средства оптимизации программ. Промежуточная аттестация ИТОГО часов: 5 1112 4 – 4 – – 10 5 1316 8 – 8 – – 21 Защита практических заданий (5,7) Защита практических заданий (10) Защита практических заданий (12) Защита практических заданий (16) 5 17 – – – 1 – – 32 – 32 1 – 79 Консультации Введение. Общие принципы оптимизации программ. Оптимизация вычислений и управления потоком команд. Оптимизация работы с данными. Векторизация вычислений. Раздел (тема) дисциплины Практические занятия Лабораторные занятия 3 лекции 2 Неделя семестра 1 Формы текущего контроля успеваемости (по неделям семестра) Семестр № п / п Контроль самостоятельной работы (КСР) Контактная работа обучающихся с преподавателем по видам учебных занятий Самостоятельная работа обучающихся 4.1. Объем дисциплины составляет 4 зачетные единицы, 144 академических часа. 4.2. Структура дисциплины Форма промежуточн ой аттестации (по семестрам, из учебного плана) Дифференцир ованный зачет 7 Раздел (тема), Код компетенции Введение. Общие принципы оптимизации программ (ОК-1, ОК-6, ОК-13, ПК-5) Оптимизация вычислений и управления потоком команд (ОК1, ОК-2, ОК11, ПК-5) № занятия 4.3. Содержание дисциплины, структурированное по темам (разделам) Лекции – 32 часа 1 2 3 4 Оптимизация работы с данными (ОК-2, ОК-11, ОК-12, ПК-5) 5 6 7 Векторизация вычислений (ОК-1, ОК-6, ОК-11, ОК12, ОК-13, ПК-5) 8 9 10 Оптимизация многопоточн ых программ (ОК-12, ПК5) 11 12 Содержание занятий и ссылки на рекомендуемую литературу Основы оптимизации программ: роли человека, программных и аппаратных средств. Правило 90/10, профилирование, измерение времени. Общая и архитектурно-зависимая оптимизация [1,2,11] Модель современного микропроцессора. Конвейер исполнения команд. Подсистема памяти [4,9,11] Принципы исполнения команд в современных микропроцессорах. Конвейерное исполнение команд. Параллелизм на уровне команд. Причины остановки конвейера [4,9,11] Простые способы оптимизации. Использование быстрых операций. Вынос общих подвыражений. Устранение зависимостей по данным. Понижение точности вычислений с плавающей точкой. Преобразование типов данных [2,8] Оптимизация ветвлений. Оптимизация циклов. Устранение зависимостей по данным между итерациями. Уменьшение числа обращений к памяти. Раскрутка цикла. Программная конвейеризация цикла [2] Принцип локальности. Иерархия памяти в современных микропроцессорах. Оптимизация размещения данных. Выравнивание данных [5,10,11] Оптимизация обращений к данным. Порядок обхода данных. Эффект буксования кэш-памяти [5,10,11] Предвыборка данных. Способы повышения эффективности использования кэш-памяти. Выбор размера блока данных [5,10,11] Реализация векторных операций в современных микропроцессорах (x86, PowerPC, Itanium2, Cell) [7,9,11] Векторные типы данных. Векторные операции. Относительное выравнивание векторов [9,11] Способы векторизации. Автоматическая и полуавтоматическая векторизация с помощью компилятора [2, 11] Исполнение многопоточных программ. Выбор числа потоков [1,3,6] Проблемы доступа к общим ресурсам в мультипроцессорах. Ложное разделение кэш-строк. Одновременный доступ к памяти нескольких потоков [1,3,6,11] Кол-во часов В интера всег ктивно о й форме 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 2 0.25 8 Инструмента льные средства оптимизации программ (ОК-12, ПК-2, ПК-5) 13 14 15 16 Обзор инструментальных средств оптимизации программ [2,5,11] Возможности компилятора по оптимизации программ. Использование ключей и директив компилятора [2,5,11] Средства профилирования (gprof, perf, OProfile, VTune, CodeAnalyst). Оптимизация на основе сбора статистики [2,11] Использование оптимизированных библиотек [1,11] Итого: 2 0.25 2 0.25 2 0.25 2 32 0.25 4 Раздел (тема), Код компетенции Введение. Общие принципы оптимизации программ (ОК-1, ОК-6, ОК-13, ПК-5) Оптимизация вычислений и управления потоком команд (ОК-1, ОК-2, ОК-11, ПК-5) Оптимизация работы с данными (ОК-2, ОК-11, ОК12, ПК-5) № занятия Практические занятия – 32 часа Содержание занятий 1-2 Практическое задание 1. Определение параметров микропроцессора и мультипроцессора 3-4 5 6-7 Векторизация вычислений (ОК-1, ОК-6, ОК-11, ОК-12, ОК-13, ПК-5) Оптимизация многопоточных программ (ОК-12, ПК-5) Инструментальные средства оптимизации программ (ОК-12, ПК-2, ПК-5) 8-10 Кол-во часов В интеракти всего вной форме Практическое задание 2. Оценка производительности микропроцессора Практическое задание 3. Оценка производительности операций с данными Практическое задание 4. Блочные алгоритмы работы с данными Практическое задание 5. Векторизация вычислений Практическое задание 6. 11-12 Оптимизация операций с общей памятью 13-16 Практическое задание 7. Профилирование программ Итого 4 2 4 2 2 1 4 2 6 3 4 2 8 4 32 16 9 Самостоятельная работа – 79 часов Самостоятельная работа студентов предусматривает: Раздел (тема), Код компетенции Норма времени на выполнение (в часах) Вид работы Введение. Общие принципы оптимизации программ (ОК-1, ОК-6, ОК-13, ПК-5) Повторение лекционных материалов, более глубокое изучение теоретических материалов по учебной литературе. Выполнение практического задания 1, оформление результатов, подготовка к защите. Оптимизация вычислений и управления потоком команд (ОК1, ОК-2, ОК11, ПК-5) Оптимизация работы с данными (ОК-2, ОК11, ОК-12, ПК-5) Повторение лекционных материалов, более глубокое изучение теоретических материалов по учебной литературе. Выполнение практического задания 2, оформление результатов, подготовка к защите. Векторизаци я вычислений (ОК-1, ОК-6, ОК-11, ОК12, ОК-13, ПК-5) Повторение лекционных материалов, более глубокое изучение теоретических материалов по учебной литературе. Выполнение практического задания 3, оформление результатов, подготовка к защите. Выполнение практического задания 4, оформление результатов, подготовка к защите. Повторение лекционных материалов, более глубокое изучение теоретических материалов по учебной литературе. Выполнение практического задания 5, оформление результатов, подготовка к защите. Оптимизация Повторение лекционных материалов, более многопоточн глубокое изучение теоретических материалов по ых программ учебной литературе. (ОК-12, ПКВыполнение практического задания 6, 5) оформление результатов, подготовка к защите. Инструмента Повторение лекционных материалов, более льные глубокое изучение теоретических материалов по средства учебной литературе. оптимизации программ (ОК-12, ПК2, ПК-5) Выполнение практического задания 7, оформление результатов, подготовка к защите. Подготовка к дифференцированному зачету Итого 4 4 8 4 7 4.5 4.5 6 6 6 4 8 8 5 79 10 5. Образовательные технологии В ходе преподавания дисциплины используются следующие виды организации учебного процесса: лекции, практические занятия и самостоятельная работа студента. При разработке образовательной технологии организации учебного процесса основной упор сделан на соединение активной и интерактивной форм обучения. Интерактивная форма позволяет студентам проявить самостоятельность в освоении теоретического материала и овладении практическими навыками, формирует интерес и позитивную мотивацию к учебе. На лекциях изложению нового материала предшествуют обсуждение предыдущей темы лекции с целью восстановления и закрепления студентами изученного теоретического материала и ответы на вопросы студентов. Затем излагается материал лекции с использованием мультимедийной презентации. В конце лекции выделяется время для ответов на вопросы по текущему материалу и его обсуждению. С дополнительными материалами по дисциплине можно ознакомиться на сайте кафедры Параллельных вычислений (см. ссылку в разделе 9). Каждая тема теоретического материала курса прорабатывается на практических занятиях, где у студента формируется связь теоретических знаний с практикой, а затем полученные знания и навыки закрепляются выполнением практических заданий. Практические занятия проводятся в терминальном классе по следующей схеме. При необходимости в начале аудиторного занятия рассматривается очередное практическое задание, объясняется его суть с привлечением необходимого теоретического материала. В течение занятия студенты выполняют практические задания, по ходу обсуждая с преподавателем возникающие вопросы. По результатам выполнения практического задания оформляется отчет в виде пояснительной записки по каждому заданию и защищается студентом лично. В ходе практического занятия преподаватель индивидуально беседует со студентами и принимает выполненные практические задания, а студент защищает свою работу, устно отвечая на дополнительные вопросы преподавателя. В конце практического занятия проводится разбор решений практических заданий в интерактивной форме. Кроме этого, проводится обсуждение вопросов, возникших у студентов в процессе выполнения предыдущих практических заданий. Самостоятельная работа студента состоит в повторении и усвоении лекционного материала дома по конспектам лекций, в выполнении практических заданий в терминальном классе (по согласованию с преподавателем) или дома (при наличии необходимого программного и аппаратного обеспечения) в свободное от аудиторных занятий время. Кроме того, самостоятельная работа включает подготовку к зачету. По собственному желанию и по согласованию с преподавателем студент может выполнять нестандартное более сложное практическое задание, например, включающее вопросы исследовательского характера, связанное с углубленным изучением материала курса. Такое индивидуальное 11 задание обсуждается с преподавателем и, при успешном выполнении, учитывается при промежуточном контроле успеваемости студента. Усложнённое практическое задание также сопровождается отчётом в форме пояснительной записки. При выполнении практических заданий студенты получают доступ к современным высокопроизводительным системам Сибирского суперкомпьютерного центра (ИВМиМГ СО РАН), оборудованию лаборатории Синтеза параллельных программ ИВМиМГ СО РАН, оборудованию НГУ. 6. Перечень учебно-методического обеспечения для самостоятельной работы обучающихся по дисциплине Методические рекомендации по самостоятельной работе обучающихся приводятся в приложении к рабочей программе дисциплины (Приложение А). 7. Фонд оценочных средств для проведения текущей и промежуточной аттестации обучающихся по дисциплине 7.1. Перечень компетенций с указанием этапов их формирования приведен в описании образовательной программы Компетенция ОК-1 ОК-2 ОК-6 ОК-11 ОК-12 ОК-13 ПК-2 Знания, умения, навыки Знать основные классы современных микропроцессоров и мультипроцессоров, их достоинства и недостатки. Уметь оценивать эффективность работы заданной программы на заданном оборудовании, оценивать потенциал ее оптимизации. Знать особенности различных моделей современных микропроцессоров и мультипроцессоров общего назначения, их потенциальные узкие места. Знать способы эффективной организации вычислений на современных микропроцессорах и мультипроцессорах. Уметь оптимизировать программы с учетом архитектуры микропроцессора и мультипроцессора. Уметь определять архитектурные особенности микропроцессоров и мультипроцессоров. Уметь пользоваться средствами оптимизации компилятора, инструментальными средствами анализа производительности и профилирования Процедура оценивания Защита практических работ 1, 2 и 5, зачет Защита практических работ 2-4 и 7, зачет Защита практических работ 1 и 5, зачет Защита практических работ 2-5, зачет Защита практических работ 3-7, зачет Защита практических работ 1 и 5, зачет Защита практической работы 7, зачет 12 программ. Уметь выполнять оптимизацию Защита практических работ программных комплексов под 1-7, зачет произвольную и под заданную архитектуру. ПК-5 7.2. Описание показателей и критериев оценивания компетенций, описание шкал оценивания Выделяются три показателя уровня сформированности компетенции: ОК-1: владеет культурой мышления, способен к обобщению, анализу, восприятию информации, постановке цели и выбору путей ее достижения базовый Уровен ь Показатели (что обучающийся должен продемонстрировать) удовлетворительно Знать основные Имеет поверхностное классы современных представление о микропроцессоров и классах и их мультипроцессоров, особенностях. их достоинства и недостатки. Оценочная шкала хорошо Знает основные классы, может назвать их сильные и слабые стороны и типичные области применения. отлично Хорошо ориентируется в классах, способен аргументировано оценить их применимость в различных областях. 13 ОК-2: умеет логически верно, аргументировано и ясно строить устную и письменную речь Показатели (что обучающийся должен продемонстрировать) базовый Уровен ь Оценочная шкала удовлетворительно Уметь оценивать Может примерно эффективность оценить работы заданной эффективность программы на работы программы по заданном виду кода, оценить оборудовании, применение базовых оценивать потенциал способов ее оптимизации. оптимизации. хорошо отлично Может Может проанализировать код проанализировать код программы и программы и оценить, оценить, какие какие особенности особенности оборудования были оборудования были учтены, какие учтены, и какие потенциально стандартные возможные улучшения улучшения кода с кода могут быть учетом этого могут сделаны, и какой быть еще сделаны. прирост производительности можно от этого ожидать. базовый Уровень ОК-6: стремится к саморазвитию, повышению своей квалификации и мастерства Показатели (что обучающийся должен продемонстрировать) Знать особенности различных моделей современных микропроцессоров и мультипроцессоров общего назначения, их потенциальные узкие места. Оценочная шкала удовлетворительно Имеет поверхностное представление о моделях и их особенностях. хорошо Знает основные модели, может назвать сильные и слабые стороны, может классифицировать типичные примеры процессоров отлично Хорошо ориентируется в моделях, способен аргументировано оценить их сравнительную применимость в различных областях. базовый Уровень ОК-11: осознает сущность и значение информации в развитии современного общества; владеет основными методами, способами и средствами получения, хранения, переработки информации Показатели (что обучающийся должен продемонстрировать) Оценочная шкала удовлетворительно Знать способы Имеет слабое эффективной представление об организации эффективности вычислений на различных современных программных микропроцессорах и конструкций. мультипроцессорах. хорошо отлично Понимает разницу между различными программными конструкциями с точки зрения эффективности выполнения. Хорошо представляет эффективность выполнения различных программных конструкций, может выбрать наиболее эффективную. базовый Уровень ОК-12: имеет навыки работы с компьютером как средством управления информацией Показатели (что обучающийся должен продемонстрировать) Уметь оптимизировать программы с учетом архитектуры микропроцессора и мультипроцессора. Оценочная шкала удовлетворительно хорошо отлично Может пользоваться только автоматизированным и средствами компилятора для оптимизации под архитектуру. Имеет представления об эффективности реализации различных программных конструкций на данном оборудовании, умеет их выбирать. Умеет творчески выбирать и модифицировать различные программные конструкции в зависимости от особенностей используемого оборудования. ОК-13: способен работать с информацией в глобальных компьютерных сетях базовый Уровен ь Показатели (что обучающийся должен продемонстрировать) удовлетворительно Уметь определять Может определить архитектурные основные параметры особенности с помощью микропроцессоров и стандартного мультипроцессоров. программного обеспечения. Оценочная шкала хорошо Может определить большинство параметров, используя стандартное программное обеспечение и специальные наборы тестов. отлично Может определить большинство параметров, используя стандартное и специализированное программное обеспечение, а также самостоятельно создавать необходимые наборы тестов. ПК-2: осваивать методики использования программных средств для решения практических задач базовый Уровен ь Показатели (что обучающийся должен продемонстрировать) удовлетворительно Уметь пользоваться Имеет начальное средствами представление об оптимизации использовании компилятора, ключей оптимизации инструментальными компилятора и средствами анализа использовании производительности базовых и профилирования средств программ. профилирования. Оценочная шкала хорошо Умеет хорошо пользоваться основными средствами оптимизации компилятора и несколькими средствами профилирования. Может определить горячие точки программы. отлично Умеет хорошо пользоваться всеми средствами оптимизации компилятора, несколькими средствами профилирования. Может определить горячие точки программы и основные причины, ограничивающие производительность. ПК-5: разрабатывать компоненты программных комплексов и баз данных, использовать современные инструментальные средства и технологии программирования базовый Уровен ь Показатели (что обучающийся должен продемонстрировать) удовлетворительно Уметь выполнять Знает общие способы оптимизацию оптимизации и умеет программных их применять. комплексов под произвольную и под заданную архитектуру. Оценочная шкала хорошо Знает и умеет применять общие и базовые архитектурнозависимые способы оптимизации. отлично Знает и умеет применять общие и базовые архитектурнозависимые способы оптимизации. 16 7.3. Типовые контрольные задания Текущая аттестация проводится по результатам выполнения и защиты практических заданий. Примерные вопросы для текущего контроля: 1. Что такое микроархитектура, поколение микроархитектуры, модель микропроцессора? 2. Какие существуют стандартные средства определения модели и параметров микропроцессора? 3. Какие основные показатели используются для оценки производительности микропроцессора? 4. Как определить пиковую производительность микропроцессора? 5. Можно ли в программе достигнуть пиковой производительности процессора? Если нет, то почему? Если да, то каким образом? 6. Какие особенности архитектуры микропроцессоров нацелены на увеличение производительности операций с памятью? 7. Какие основные показатели используются для оценки производительности операций с памятью? 8. Почему при операциях с памятью может не достигаться пиковая производительность? Назовите основные причины. 9. Каковы предпосылки того, что блочные алгоритмы работают быстрее обычных алгоритмов? 10.Какие параметры блочных алгоритмов определяются характеристиками вычислительной системы? Какими характеристиками? 11.Какова типичная зависимость времени работы программы от размера блока? Почему она имеет именно такой вид? 12.Каковы предпосылки уменьшения времени работы программы при ее векторизации? 13.Почему иногда в результате векторизации программа не начинает работать быстрее? 14.Какие векторные расширения архитектуры x86 используются в настоящее время? 15.Какими свойствами должен обладать алгоритм, чтобы быть эффективно векторизуемым? Назовите основные проблемы при векторизации программ. 16.Перечислите основные средства векторизации, их достоинства и недостатки. 17.Каковы основные причины падения производительности при синхронизации потоков? 18.Какие существуют способы преодоления основных причин падения производительности при синхронизации потоков? 19.Назовите цели профилирования программ. 20.Какую полезную для оптимизации информацию может предоставить 17 профилировщик? 21.Что такое граф вызовов? Какую информацию он предоставляет? 22.Как работают счётчики событий процессора? 23.Назовите основные способы работы профилировщиков, преимущества и недостатки. 24.Приведите примеры профилировщиков различных типов. из Промежуточная аттестация проводится в форме дифференцированного зачета. Зачетный билет формируется из двух теоретических вопросов. Примеры билетов для дифференцированного зачета: Билет 1 1. Виды оптимизации: алгоритмическая оптимизация, программная оптимизация, оптимизация времени исполнения. 2. Эффективная работа с данными в памяти. Влияние выравнивания данных, плотности размещения данных. Примеры. Билет 2 1. Причины неэффективной работы исполнительного конвейера и способы их преодоления. 2. Средства профилирования программ. Виды профилировщиков. Принципы работы профилировщиков. Примеры. Билет 3 1. Роли программиста, компилятора и процессора при оптимизации программ. 2. Причины неэффективной работы подсистемы памяти и способы их преодоления. Билет 4 1. Устройство подсистемы памяти современных микропроцессоров. Условия эффективной работы подсистемы памяти. 2. Препятствия для оптимизации программ компилятором. Билет 5 1. Устройство исполнительного конвейера современных микропроцессоров. Условия эффективной работы конвейера. 2. Трансляция программ на языке Си в код ассемблера. Возможности компиляторов по оптимизации программ. Билет 6 1. Виды параллелизма, реализуемые в современных микропроцессорах. Требования к программам для эффективного использования различных видов параллелизма в микропроцессоре. 18 2. Оптимизация многопоточных программ. Выбор числа потоков. Доступ к общей памяти. Билет 7 1. Эффективная работа с данными в памяти. Влияние объема данных, порядка обхода данных. Примеры. 2. Векторизация вычислений. Средства векторизации программ. Билет 8 1. Векторизация вычислений. Векторные расширения процессоров общего назначения. 2. Профилирование программ. Цели профилирования. Способы профилирования. Информация, получаемая в результате профилирования. 7.4. Методические материалы, определяющие процедуры оценивания знаний, умений, навыков и (или) опыта деятельности, характеризующих этапы формирования компетенций Для аттестации студентов по дисциплине «Эффективное программирование современных микропроцессоров и мультипроцессоров» используется модульно-рейтинговая система. Итоговая успеваемость студента за семестр оценивается суммой баллов по следующим показателям: практические задания и зачет. Максимальная сумма баллов за семестр составляет 100 баллов (текущий рейтинг – 80 баллов, итоговая аттестация – 20 баллов). Максимальные количества баллов по каждому показателю приведены далее в таблице. Текущий контроль. В течение семестра проверяются навыки и теоретические знания путем защиты практических заданий. На защите практического задания студенту предлагаются 2-3 вопроса, проясняющих уровень понимания студентом соответствующей темы. Максимальное количество баллов за текущую аттестацию составляет 80. Максимальное количество баллов, которое может получить студент за выполнение конкретного практического задания, приведено далее в таблице. Промежуточный контроль. Для оценки теоретических знаний студентов в конце семестра проводится зачет. Максимальная сумма баллов за зачет составляет 20 баллов. Правила промежуточной аттестации студентов: 1. К зачету не допускаются студенты, работа которых на основании текущего контроля оценивается преподавателем менее чем в 50 баллов. 2. Зачет сдается устно. 19 Вид учебной деятельности Практическое задание 1 Практическое задание 2 Практическое задание 3 Практическое задание 4 Практическое задание 5 Практическое задание 6 Практическое задание 7 Зачет Итого за семестр: Максимальное число баллов 4 8 8 10 10 10 10 20 100 Итоговая оценка за освоение курса выставляется в зависимости от числа баллов, набранных студентом по итогам текущего и промежуточного контроля: 87-100 – «отлично», 74-86 – «хорошо», 50-73 – «удовлетворительно», менее 50 – «неудовлетворительно». 8. Перечень основной и дополнительной учебной литературы, необходимой для освоения дисциплины а) основная литература: 1. В. П. Гергель. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. – М.: Изд-во МГУ, 2010. 2. Agner Fog, Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms (http://www.agner.org/optimize/optimizing_cpp.pdf) б) дополнительная литература: 3. В. П. Гергель. Современные языки и технологии параллельного программирования. – М.: Изд-во МГУ, 2012. 4. Гуров В.В. Архитектура микропроцессоров: Учебное пособие. – М..: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2010. – 272 с. 5. Касперски К. Техника оптимизации программ. Эффективное использование памяти. – СПб.: БХВ-Петербург, 2003. – 464 с. 6. Корняков К.В., Кустикова В.Д., Мееров И.Б. Инструменты параллельного программирования в системах с общей памятью: учебник. – Москва: Изд-во МГУ, 2010. – 272 c. 20 7. А.В. Линев, Д.К. Боголепов, С.И. Бастраков Технологии параллельного программирования для процессоров новых архитектур. – Москва: Издво Московского ун-та, 2010. – 148 с. 8. Магда Ю.С. Аппаратное обеспечение и эффективное программирование. – СПб.: Питер, 2007. – 352 с. 9. Таненбаум Э. Остин Т. Архитектура компьютера. СПб.: Питер, 2013. – 816 с. 10.Ulrich Drepper, What Every Programmer Should Know About Memory, 2007. (http://people.redhat.com/drepper/cpumemory.pdf). в) учебно-методическая литература: 11.В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич, В.А. Перепелкин Эффективное программирование современных микропроцессоров: учеб. пособие. – Новосибирск: Изд-во НГТУ, 2014. – 148 с. 9. Перечень ресурсов информационно-телекоммуникационной сети «Интернет», необходимых для освоения дисциплины 1. http://developer.amd.com/resources/documentation-articles/developerguides-manuals – AMD Developer Guides and Manuals. 2. http://www.intel.com/content/www/us/en/processors/architectures-softwaredeveloper-manuals.html – Intel64 and IA-32 Architectures Software Developer Manuals. 3. http://www.agner.org/optimize – Software optimization resources by Agner Fog. 10. Методические указания для обучающихся по освоению дисциплины Лекции. При прослушивании лекций конспектируйте услышанный материал. После лекции уделите время тому, чтобы повторить пройденный материал. Оцените степень понимания каждого раздела лекции. Выявите разделы, сложные для понимания, изучите эти вопросы по литературе к курсу. Если после этого остаются вопросы – сформулируйте их, чтобы проконсультироваться с преподавателем. Перед каждой лекцией повторите материал предыдущей лекции, чтобы войти в контекст дисциплины. Практические занятия. В первую очередь, уясните цель работы. Затем отметьте шаги, необходимые для её достижения. Убедитесь, что понимаете, как выполнить каждый шаг. При оформлении отчета убедитесь, что он оформлен надлежащим образом и содержит всю ключевую информацию по выполненной работе. Перед защитой практического задания самостоятельно продумайте ответы на контрольные вопросы. Следите за тем, чтобы выполнять все задания в срок. 21 Самостоятельная работа студента. Изучайте литературу по курсу по тем темам, изучению которых посвящены текущие лекции. Отводите время и на повторение лекций по конспектам. Сопоставляйте информацию, услышанную на лекциях и прочитанную в других источниках. В случае возникновения вопросов фиксируйте их и консультируйтесь с преподавателем. Дифференцированный зачет. При подготовке к зачету используйте конспекты лекций и основную литературу. Классифицируйте информацию по важности, уделяйте первостепенное внимание важным и существенным вещам. Контролируйте степень текущего понимания каждой темы. Уделяйте больше внимания сложным для понимания темам. Изучите примерный список билетов. Повторяя каждую тему, продумывайте ответы на соответствующие вопросы в билетах. 11. Перечень информационных технологий, используемых при осуществлении образовательного процесса по дисциплине, включая перечень программного обеспечения и информационных справочных систем (при необходимости) Для проведения практических занятий на рабочей станции (или сервере) должны быть установлены: ОС семейства Linux/UNIX, текстовый редактор (mcedit, vim, nano или аналоги), компилятор C/C++ с поддержкой OpenMP (gcc/g++, icc или аналоги), средства профилирования (обязательно gprof, perf, OProfile, возможно Intel VTune Amplifier, AMD Code Analyst), реализация библиотеки BLAS (ATLAS, MKL, ACML или аналоги), офисное ПО для оформления отчетов (MS Office, LibreOffice или аналоги), веб-браузер для доступа к документации через сеть Интернет. 12. Описание материально-технической базы, необходимой для осуществления образовательного процесса по дисциплине Лекции читаются в специальной лекционной аудитории, обеспеченной средствами отображения презентаций и других лекционных материалов на экран. Практические занятия проводятся в терминальных классах с отдельными рабочими местами для каждого студента. Задания выполняются на вычислительных системах, имеющихся в распоряжении кафедры ПВ ФИТ и ИВМиМГ СО РАН. 22 Самостоятельные работы выполняются либо дома (при наличии у студента соответствующего аппаратного и программного обеспечения), либо в терминальных классах в предусмотренном режиме. 23 Приложение А (обязательное) Методические рекомендации по самостоятельной работе обучающихся по дисциплине «Эффективное программирование современных микропроцессоров и мультипроцессоров» 1. План-график выполнения СРС по дисциплине В процессе изучения дисциплины предусмотрено выполнение следующих видов самостоятельной работы: Номер недели семестра Вид самостоятельной работы Изучение теоретических материалов по учебной литературе Работа над практическим заданием Подготовка к контролю Итого в неделю часов 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 2 4 4 3 2 2 2 2 2 3 3 2 2 2 2 1.5 1.5 1.5 1.5 2.5 2.5 2.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 5.5 4 4 6 6 6 5 5 4 4 4 5 5 4 4 4 9 2. Характеристика и описание заданий на СРС В процессе изучения контрольные точки: Контрольная точка дисциплины предусмотрены следующие Срок сдачи (номер недели семестра) Защита практической работы 1 Защита практической работы 2 Защита практической работы 3 Защита практической работы 4 Защита практической работы 5 Защита практической работы 6 Защита практической работы 7 2 4 5 7 10 12 16 Описание практических заданий Практическое задание 1. Определение параметров микропроцессора и мультипроцессора 24 Цель работы: научиться определять архитектуру и основные параметры микропроцессора и мультипроцессора. Задание: Пользуясь стандартным программным обеспечением и доступной информацией в сети Интернет определить следующие параметры компьютера: название микроархитектуры, поколение микроархитектуры и модель используемого в системе микропроцессора, число процессоров и ядер в системе, распределение ядер по процессорам, тактовую частоту микропроцессора, реализованные в микропроцессоре векторные расширения, основные параметры кэш-памяти (уровни, объемы, степени ассоциативности, размеры кэш-строк, распределение по ядрам), пиковую производительность микропроцессора на целочисленных и вещественных операциях. Контрольные вопросы: 1. Что такое микроархитектура, поколение микроархитектуры, модель микропроцессора? 2. Какие существуют стандартные средства определения модели и параметров микропроцессора? 3. Как определить пиковую производительность микропроцессора? Практическое задание 2. Оценка производительности микропроцессора Цель работы: определить максимальную производительность процессора на заданных операциях. Задание: 1. Написать программу, выполняющую многократно (в цикле) заданную арифметическую операцию. Добиться того, чтобы после компиляции внутри цикла не было обращений в память, и все вычисления проходили на регистрах. Убедиться в этом по ассемблерному листингу. Кроме того, необходимо следить, чтобы компилятор не устранил из кода нужные операции. 2. Замерить время выполнения цикла. По результатам замера получить оценку производительности микропроцессора на заданной операции. Сравнить полученную оценку с теоретической. Для целочисленных операций следует использовать тип int, для вещественных – тип double. Векторные операции реализовать с помощью intrinsics. Для замера времени использовать счётчик тактов процессора. В качестве оценки производительности для каждой операции представить два показателя: 25 пропускную способность (throughput) – число операций в секунду, латентность (latency) – число тактов процессора на одну операцию. Варианты задания: 1. целочисленное умножение, 2. векторное целочисленное умножение, 3. целочисленное деление, 4. векторное целочисленное деление, 5. вещественное сложение, 6. векторное вещественное сложение, 7. вещественное умножение, 8. векторное вещественное умножение, 9. вещественное деление, 10.векторное вещественное деление, 11.вещественное вычисление квадратного корня, 12.векторное вещественное вычисление квадратного корня, 13.преобразование из целочисленного значения в вещественное (плюс вещественное сложение), 14.векторное преобразование из целочисленного значения в вещественное (плюс векторное вещественное сложение). Контрольные вопросы: 1. Какие основные показатели используются для оценки производительности микропроцессора? 2. Можно ли в программе достигнуть пиковой производительности процессора? Если нет, то почему? Если да, то каким образом? 3. Будут ли отличаться результаты теста при использовании цепочки зависимых и независимых инструкций? Почему? Практическое задание 3. Оценка производительности операций с данными Цель работы: оценить производительность различных операций с данными. Задание: Написать программу, выполняющую обработку данных в памяти указанным способом, и исследовать её производительность. Во всех вариантах следует провести тестирование при следующих размерах массива: Половина размера кэша L1, Половина размера кэша L2, Половина размера кэша L3, В 10 раз больше размера кэша L3. Адреса используемых массивов должны быть выровнены по границе, кратной 64B (кроме std::vector). Если в задании не указано, сколько ядер использовать, то следует использовать одно ядро при незагруженных остальных. Если в задании указано, что необходимо использовать различные 26 типы элементов данных, то следует провести тестирование для следующих типов данных: char, short, int, long long, float, double, long double, __m64, __m128. В качестве оценки производительности для каждой операции представить различные имеющие смысл показатели, например: темп обработки данных (байт в секунду, элементов в секунду), время обработки единицы данных (тактов на байт, тактов на элемент). Варианты задания: 1. Создание как можно более быстрой функции копирования блока данных. Использовать векторные типы данных, программную предвыборку, потоковую запись в память. Попробовать различные степени ручной раскрутки цикла, а также раскрутку, предлагаемую компилятором. 2. Поэлементное копирование массива, используя различные типы элементов данных. 3. Поэлементное копирование элементов массива, представленного в виде std::vector, используя различные типы элементов данных. Элементы перебирать элементы с помощью итератора. 4. Копирование массива с помощью процедуры memcpy. Использовать одновременно от одного до всех доступных ядер. 5. Копирование элементов массива, представленного в виде std::vector, с помощью оператора присваивания всего контейнера. Использовать одновременно от одного до всех доступных ядер. 6. Копирование массива структур данных поэлементно. В качестве элементов использовать следующие структуры: a. struct { short int a; char b,c; } b. struct { int a; short int b,c; } c. struct { int a; short int b; char c,d; } d. struct { long long a; int b,c; } e. struct { long long a; int b; short int c,d; } f. struct { long long a; int b; short int c; char d,e; } 7. Вычисление суммы элементов массива, используя различные типы элементов данных. 8. Заполнение массива заданным значением, используя различные типы элементов данных. 9. Переупорядочение данных – копирование данных из нескольких одномерных массивов в массив структур: a. double x[N],y[N],z[N]; struct { double x,y,z; } p[N]; b. double x[N],y[N],z[N],m[N]; struct { double x,y,z,m; } p[N]; 10.Переупорядочение данных - копирование данных из массива структур в нескольких одномерных массивов: a. struct { double x,y,z; } p[N]; double x[N],y[N],z[N]; b. struct { double x,y,z,m; } p[N]; double x[N],y[N],z[N],m[N]; 27 Контрольные вопросы: 4. Какие особенности архитектуры микропроцессоров нацелены на увеличение производительности операций с памятью? 5. Какие основные показатели используются для оценки производительности операций с памятью? 6. Почему при операциях с памятью может не достигаться пиковая производительность? Назовите основные причины. Практическое задание 4. Блочные алгоритмы работы с данными Цель работы: научиться использовать блочные алгоритмы для эффективного использования кэш-памяти. Задание: 1. Реализовать операцию умножения двух матриц размером 2048×2028 элементов типа double с использованием трех циклов. Использовать векторизацию, а также выбрать способ обхода, дающий наименьшее время работы программы. 2. Реализовать аналогичную операцию блочного умножения матриц. Спланировать способ обхода блоков и выбрать размеры блоков так, чтобы получить наименьшее время работы программы на данной вычислительной системе. 3. Сравнить время работы двух программ и операции умножения матриц из какой-либо оптимизированной реализации библиотеки BLAS. Контрольные вопросы: Каковы предпосылки того, что блочные алгоритмы работают быстрее обычных алгоритмов? Какие параметры блочных алгоритмов определяются характеристиками вычислительной системы? Какими характеристиками? Какова типичная зависимость времени работы программы от размера блока? Почему она имеет именно такой вид? Практическое задание 5. Векторизация вычислений Цель работы: научиться использовать различные средства векторизации. Задание: Написать программу, моделирующую движение N гравитирующих тел в трехмерном пространстве. Векторизовать программу тремя способами: вручную, в соответствии с вариантом задания, автоматически с помощью директив компилятора Intel, автоматически с помощью компилятора GCC. Сравнить время работы трех вариантов программ и обосновать результаты. 28 Варианты задания: 1. Использовать Intel intrinsics, 2. Использовать классы векторных типов данных в Intel C++ Compiler, 3. Использовать встроенные атрибуты векторных типов в GCC, 4. Использовать расширение Intel Cilk+ для работы с массивами. Контрольные вопросы: 7. Каковы предпосылки уменьшения времени работы программы при ее векторизации? 8. Почему иногда в результате векторизации программа не начинает работать быстрее? 9. Какие векторные расширения архитектуры x86 используются в настоящее время? 10.Какими свойствами должен обладать алгоритм, чтобы быть эффективно векторизуемым? Назовите основные проблемы при векторизации программ. 11.Перечислите основные средства векторизации, их достоинства и недостатки. Практическое задание 6. Оптимизация операций с общей памятью Цель работы: реализовать примитив синхронизации "барьер" в системе с общей памятью. Задание: Написать многопоточную программу, многократно выполняющую синхронизацию потоков с помощью глобальной операции «барьер». Между синхронизациями каждый поток локально выполняет некоторый расчет. Выполнить тестирование с различным объемом вычислений между синхронизациями, с различным числом операций "пауза" _mm_pause(). Инструкцию "пауза" добавить 0/1/2/4 раза до цикла ожидания и столько же в сам цикл ожидания. Переменные, используемые для синхронизации, располагать в памяти тремя способами: плотная упаковка (int __h[128], обращение h[tid]), каждая переменная в отдельной кэш-строке (int h[128][64], обращение h[tid][0]), каждая переменная на отдельной странице памяти (int h[128][4096], обращение h[tid][0]). В качестве оценки производительности указывать время (минимальное и среднее), затраченное на синхронизацию на одной итерации. Для каждого объема вычислений между синхронизациями определить параметры теста, при которых время синхронизации минимальное. Сравнить полученные результаты с результатами использования директивы OpenMP: #pragma omp barrier 29 Варианты задания: 1. глобальный барьер: volatile переменные + "линейный" барьер, 2. глобальный барьер: volatile переменные + "древовидный" барьер, 3. глобальный барьер: потоковая запись в память + "линейный" барьер, 4. глобальный барьер: потоковая запись в память + "древовидный" барьер, 5. глобальный барьер: атомарные операции + "линейный" барьер, 6. глобальный барьер: атомарные операции + "древовидный" барьер, 7. синхронизация с соседями (1D): volatile переменные, 8. синхронизация с соседями (1D): потоковая запись в память, 9. синхронизация с соседями (1D): атомарные операции, 10.глобальный барьер: атомарные операции + "древовидный" барьер. Контрольные вопросы: 12.Каковы основные причины падения производительности синхронизации потоков? 13.Какие существуют способы их преодоления? при Практическое задание 7. Профилирование программ Цель работы: научиться пользоваться средствами профилирования, выполнять анализ программы с помощью профилирования. Задание: Для программы, выбранной в соответствии с вариантом задания, выполнить следующие действия: 1. Выполнить автоматическую оптимизацию с помощью компилятора, используя информацию от профилировщика. Оценить полученное ускорение. 2. Оценить накладные расходы на профилирование программы. 3. Построить граф вызовов программы (картинку). С помощью графа вызовов определить «горячие точки» программы с точностью до функций. 4. Построить аннотированный листинг программы. Определить «горячие точки» программы с точностью до строк исходного кода и команд ассемблера. Сделать предположение о том, что является основной причиной временных затрат (вычислительные операции, обращения в память, выполнение команд передачи управления, …). 5. Собирая информацию о соответствующих событиях, получить с помощью профилирования следующую информацию о «горячих» функциях и о программе в целом: a. среднее число тактов на микрооперацию, b. процент кэш-промахов от всех обращений для кэшей первого и последнего уровней, 30 c. процент неправильно предсказанных переходов. 6. На основании полученной информации сделать вывод о причинах временных затрат при выполнении программы. Можно собрать информацию и о других событиях, если это требуется для обоснования вывода. Исследование проводить на последовательных вариантах программ из пакета тестов NAS Parallel Benchmarks (http://www.nas.nasa.gov/publications/npb.html). Варианты задания: 1. Тест UA из пакета тестов NPB. 2. Тест MG из пакета тестов NPB. 3. Тест IS из пакета тестов NPB. 4. Тест CG из пакета тестов NPB. 5. Тест LU из пакета тестов NPB. 6. Тест BT из пакета тестов NPB. 7. Тест SP из пакета тестов NPB. 8. Тест EP из пакета тестов NPB. 9. Тест FT из пакета тестов NPB. 10.Тест DC из пакета тестов NPB. Контрольные вопросы: 14.Назовите цели профилирования программ. 15.Какую полезную для оптимизации информацию может предоставить профилировщик? 16.Что такое граф вызовов? Какую информацию он предоставляет? 17.Как работают счётчики событий процессора? 18.Назовите основные способы работы профилировщиков, из преимущества и недостатки. 19.Приведите примеры профилировщиков различных типов. 3. Примерные нормы времени на выполнение заданий контрольных точек Контрольная точка Защита практической работы 1 Защита практической работы 2 Защита практической работы 3 Защита практической работы 4 Защита практической работы 5 Защита практической работы 6 Защита практической работы 7 Норма времени на выполнение (в часах) 3 3 3.5 3 4.5 3 6 4. Рекомендуемая литература (основная и дополнительная) а) основная литература: 31 1. В. П. Гергель. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. – М.: Изд-во МГУ, 2010. 2. Agner Fog, Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms (http://www.agner.org/optimize/optimizing_cpp.pdf) б) дополнительная литература: 3. В. П. Гергель. Современные языки и технологии параллельного программирования. – М.: Изд-во МГУ, 2012. 4. Гуров В.В. Архитектура микропроцессоров: Учебное пособие. – М..: Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2010. – 272 с. 5. Касперски К. Техника оптимизации программ. Эффективное использование памяти. – СПб.: БХВ-Петербург, 2003. – 464 с. 6. Корняков К.В., Кустикова В.Д., Мееров И.Б. Инструменты параллельного программирования в системах с общей памятью: учебник. – Москва: Изд-во МГУ, 2010. – 272 c. 7. А.В. Линев, Д.К. Боголепов, С.И. Бастраков Технологии параллельного программирования для процессоров новых архитектур. – Москва: Издво Московского ун-та, 2010. – 148 с. 8. Магда Ю.С. Аппаратное обеспечение и эффективное программирование. – СПб.: Питер, 2007. – 352 с. 9. Таненбаум Э. Остин Т. Архитектура компьютера. СПб.: Питер, 2013. – 816 с. 10.Ulrich Drepper, What Every Programmer Should Know About Memory, 2007. (http://people.redhat.com/drepper/cpumemory.pdf). в) учебно-методическая литература: 11.В.П.Маркова, С.Е.Киреев, М.Б.Остапкевич, В.А.Перепелкин Эффективное программирование современных микропроцессоров: учеб. пособие. – Новосибирск: Изд-во НГТУ, 2014. – 148 с. 5. Требования к представлению и оформлению результатов СРС По результатам выполнения работы оформляется отчет в виде пояснительной записки. Отчет составляется в произвольной форме и должен включать следующую информацию: Фамилию, имя и отчество студента, номер группы. Номер и название практического задания. Цель работы. Описание и обоснование хода работы. Исходные коды разработанной программы (программ). Полученные результаты и их интерпретация с точки зрения поставленной цели. Вывод. 32 Результаты выполнения практических заданий должны быть защищены преподавателю лично. Студент должен представить преподавателю отчет, продемонстрировать работоспособность разработанной программы (программ) и ответить на его вопросы по заданию. 6. Оценка выполнения СРС На защите результатов практической работы оценивается содержание отчета и устный ответ студента. Критериями оценки отчета являются: наличие всей существенной информации по работе, точность, полнота и непротиворечивость предоставляемых сведений, обоснованность применяемого решения, грамотность (содержательная) используемых формулировок, степень достижения студентом поставленной цели, правильность интерпретаций и наличие самостоятельного вывода по результатам работы. Критериями оценки устного ответа являются: демонстрация студентом понимания или непонимания теоретической основы работы, точность ответов на поставленные вопросы, способность рассуждать для получения ответов на дополнительные вопросы, понимание студентом проделанной работы и ее результатов. Итоговая оценка за защиту практической работы выставляется преподавателем в соответствии с предусмотренной балльно-рейтинговой системой. 33