Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
MIT 6.172 Performance Engineering of Software Systems, Fall 2018 — 1. Введение и умножение матриц
1. Введение и умножение матриц
В этом видео на YouTube под названием «1. Введение и матричное умножение» лектор обсуждает важность разработки производительности и то, как она развивалась с течением времени. На примере умножения матриц докладчик показывает, как методы кодирования и технические характеристики машин могут сильно повлиять на производительность. Обсуждение охватывает такие темы, как порядок циклов, использование кэша и параллельное программирование. Спикер также исследует способы оптимизации кода под разные процессоры и арифметические вычисления. В целом, видео дает ценную информацию о мире инженерии производительности и ее практическом применении в современных вычислительных системах.
Лекция 2. Правила Bentley по оптимизации работы
2. Правила Bentley по оптимизации работы
В этом видео на YouTube обсуждаются различные методы оптимизации компьютерных программ. Вводятся правила Bentley для оптимизации работы, а оптимизации сгруппированы по структурам данных, циклам, логике и функциям. Обсуждаются различные методы, такие как кодирование значений, расширение структуры данных, предварительное вычисление, кэширование и использование разреженных матриц. Докладчик также коснулся преимуществ использования разреженного матричного представления для графиков, оптимизации логики и оптимизации обнаружения коллизий в графических программах. Реализация этих методов оптимизации помогает сократить время работы программ, делая их более эффективными.
Вторая часть видео охватывает несколько категорий методов оптимизации, включая подъем циклов, использование часовых в циклах, развертывание и слияние циклов, а также встраивание функций. Спикер не советует преждевременную оптимизацию и подчеркивает важность соблюдения корректности и использования регрессионного тестирования. В видео также рассказывается о правилах оптимизации работы Bentley — шестиэтапном руководстве по повышению производительности и эффективному достижению целей. Эти правила включают установление четких целей, разбивку задач, планирование и организацию, определение приоритетов задач, минимизацию отвлекающих факторов, а также регулярный пересмотр и корректировку своего подхода.
Лекция 3. Битовые хаки
3. Бит-хаки
В этом видео на YouTube рассматриваются различные темы, связанные с манипулированием битами, включая двоичное представление, дополнение до двух, побитовые операторы, замену переменных без временной переменной и оптимизацию кода. Видео демонстрирует различные трюки с битами, такие как нахождение минимума двух целых чисел без использования операторов if-else и как поменять местами два целых числа без использования временной переменной. Докладчик обсуждает непредсказуемые ветвления и представляет минимальную битовую хитрость без ветвлений, когда предсказуемые ветвления недоступны, и показывает, как битовые хаки могут оптимизировать код, заменяя дорогостоящие операции, такие как деление, простыми побитовыми операциями. В видео также обсуждается последовательность де Брейна и ее применение для решения таких задач, как задача N ферзей.
Во второй части обсуждается решение проблемы N ферзей с использованием битовых векторов и эффективного подсчета количества единичных битов в двоичном слове. Возврат используется для решения проблемы N ферзей, а битовые векторы используются для эффективного представления доски. Описаны три проверки для безопасного размещения ферзя в задаче о N ферзях, а также представлен метод подсчета количества единичных битов в слове путем рекурсивного исключения младшего значащего 1 бита. Кроме того, обсуждается использование поиска в таблице и манипуляции с регистрами для подсчета количества битов 1. Видео заканчивается демонстрацией метода «разделяй и властвуй» для подсчета 1 бит, который имеет производительность, пропорциональную логарифмическому основанию два длины слова. Также предоставляются ресурсы для дальнейшего обучения.
Лекция 4. Язык ассемблера и архитектура компьютера
Лекция 4. Язык ассемблера и архитектура компьютера
В этом видео представлен всесторонний обзор языка ассемблера и компьютерной архитектуры. Язык ассемблера является важным интерфейсом для оптимизации производительности кода, а понимание архитектуры компьютера необходимо для освоения языка ассемблера. Докладчик рассказывает об истории архитектуры x86 64 и ее развитии, ее ключевых регистрах, типах данных, режимах адресации памяти и архитектуре набора инструкций, включая стеки, целочисленную и двоичную логику, логическую логику и подпрограммы. Они также обсуждают такие расширения, как расширение нуля и знака, а также различные режимы адресации на языке ассемблера. Кроме того, в видео обсуждаются типы с плавающей запятой, векторы и векторные единицы, традиционные инструкции и инструкции SSE, а также особенности архитектуры компьютерной архитектуры, такие как суперскалярная обработка, выполнение не по порядку и прогнозирование ветвлений.
Видео также охватывает несколько тем, связанных с языком ассемблера и компьютерной архитектурой. Одной из центральных тем является параллелизм на уровне инструкций (ILP) и остановки конвейера, вызванные такими опасностями, как зависимость данных. Докладчик обсуждает зависимости истинных, анти- и выходных данных, а также то, как суперскалярные процессоры могут использовать больший параллелизм в аппаратном обеспечении для одновременного выполнения нескольких инструкций. Однако, чтобы избежать опасностей, архитекторы реализовали такие стратегии, как переименование и изменение порядка, а также спекулятивное выполнение, чтобы угадать результат ветки и выполнить его заранее. Докладчик призывает аудиторию понять эти методы, чтобы лучше понять оптимизацию программного обеспечения.
Лекция 5. От C к ассемблеру
Лекция 5. От C к ассемблеру
В этой части видео обсуждается важность понимания языка C для языка ассемблера, а также то, как код C реализуется на языке ассемблера с помощью компилятора. Особое внимание уделяется тому, как LLVM IR транслируется в сборку в соглашении о вызовах Linux x86 64. Докладчик объясняет основные компоненты LLVM IR и то, как конструкции языка программирования C транслируются в LLVM IR. В видео также рассматривается структура виртуальной памяти, проблема координации вызовов функций между несколькими функциями и использование соглашения о вызовах Linux x86 64 двух указателей — BP и SP — для управления всеми кадрами стека.
В видео также объясняются стратегии сохранения состояний регистров в программировании C to Assembly, такие как сохранение регистров как вызывающего или вызываемого абонента, а также то, как соглашение о вызовах x86 позволяет избежать напрасной работы. В нем рассказывается, как вызовы функций работают в C и ассемблере, обсуждается процесс сохранения аргументов и локальных переменных в стеке, а также общая оптимизация использования указателя стека вместо базового указателя. В видео также показан процесс компиляции LV miR в ассемблерный код, обсуждение пролога функции, сохранение регистров, обработка условий и преобразование кода C в ассемблерный код с использованием графа потока управления. Наконец, в нем говорится об эпилоге функции, используемой для восстановления регистров перед возвратом результатов.
Лекция 6. Многоядерное программирование
Лекция 6. Многоядерное программирование
В этой видеолекции обсуждается многоядерное программирование и появление многоядерных процессоров благодаря закону Мура и прекращению масштабирования тактовых частот. Докладчик объясняет проблему плотности мощности, с которой сталкиваются процессоры, и то, как это привело к добавлению нескольких ядер в чипы, чтобы соответствовать закону Мура. В лекции также рассматриваются основы протоколов когерентности кэша в оборудовании с общей памятью и параллельных платформах, таких как Pthreads, TBB, OpenMP и Silk, которые предоставляют абстракции для параллельного программирования. Обсуждаются плюсы и минусы каждой платформы и демонстрируются примеры реализации программ Фибоначчи. В видео представлен всесторонний обзор многоядерного программирования, а также проблем и решений, с которыми сталкиваются программисты.
Видео также охватывает различные аспекты Silk, инструмента абстракции для параллельной обработки. Спикер обсуждает такие темы, как вложенные циклы Silk for, генерация ассемблерного кода, редукция с помощью редюсеров, планировщик и оптимизация производительности. Они также предоставляют обзор экосистемы Silk и связанных инструментов, таких как Silk sanitizer и Silk Scale для отладки и анализа масштабируемости соответственно. Главный вывод заключается в том, что написание параллельных программ для многоядерных процессоров может быть сложной задачей, но Silk упрощает процесс, эффективно выполняя сложные задачи, предоставляя программистам больший контроль над выполнением своего кода.
Лекция 7. Гонки и параллелизм
Лекция 7. Гонки и параллелизм
Видео охватывает ряд тем, связанных с гонками, параллелизмом и вычислительными временами в программировании на Silk. Некоторые ключевые понятия включают операторы запуска и синхронизации для одновременного выполнения, важность предотвращения условий гонки и использование детектора гонки Silk для их идентификации. В видео также рассказывается о законе Амдала, законе работы и законе диапазона как о способах количественной оценки степени параллелизма в программе, а также о способах анализа работы и объема вычислений. Также обсуждаются потенциальное ускорение и параллелизм параллельных алгоритмов сортировки и концепция теории планирования с упором на теорему о жадном планировщике. В целом, видео дает ценную информацию для понимания и оптимизации производительности программ в программировании Silk.
Видео объясняет последствия ограничения жадного планировщика, которое, по сути, утверждает, что любой жадный планировщик достигает почти идеального линейного ускорения, пока T1/Tinfinity больше или равно P^2. Шелковый планировщик, который использует планировщик работы, может достичь почти идеального линейного ускорения, если количество процессоров намного меньше, чем у T1/Tinfinity. Система Silk Runtime работает, поддерживая рабочую колоду готовых нитей и манипулируя нижней частью колоды, как стопкой. В видео также обсуждается стек Cactus, который позволяет параллельно просматривать несколько стеков и делает возможным параллельный вызов функций. Верхняя граница пространства стека, необходимого для выполнения процессора P, часто намного слабее, чем фактически необходимый объем, поскольку каждому процессору может не потребоваться проходить весь путь вниз по графу вычислений каждый раз, когда он крадет работу.
Лекция 8. Анализ многопоточных алгоритмов
Лекция 8. Анализ многопоточных алгоритмов
В этом видео обсуждается основной метод анализа повторяющихся операций «разделяй и властвуй» и применяется к многопоточным алгоритмам путем сравнения логарифмической базы B числа n с логарифмической базой B числа A с F числа N, чтобы определить их рост в n и требуемую работу. Видео представляет собой памятку с решениями для основных многопоточных алгоритмов и охватывает такие темы, как анализ работы и диапазона, эффективность работы и преодоление накладных расходов за счет оптимизации размера зерна. Подчеркивается важность эмпатии при обсуждении технических тем, и вводится концепция группы обеспечения доступности баз данных как средства балансировки работы и объема для увеличения параллелизма и сокращения времени выполнения.
В видео также обсуждается анализ многопоточных алгоритмов с акцентом на работу и интервал, а также способы максимизации параллелизма при минимизации интервала для достижения почти идеального линейного ускорения. Докладчик предлагает подход «разделяй и властвуй» к многопоточным алгоритмам, когда количество задач, отдаваемых потокам, достаточно велико, и предостерегает от создания множества мелких задач из-за накладных расходов при планировании. Представленный пример кода включает эффективный и паршивый код. Докладчик также обсуждает, как представлять подматрицы в двумерном кодировании и индексировании, и подчеркивает использование «ограничения» в коде умножения матриц «разделяй и властвуй» для повышения производительности.
Лекция 9. Что могут и чего не могут компиляторы
Лекция 9. Что могут и чего не могут компиляторы
В этом видео на различных примерах обсуждается, как компиляторы могут оптимизировать код. В нем объясняется, как компиляторы могут устранить ненужные ссылки на хранилище и память и как они могут оптимизировать циклы для повышения производительности.
В этом видео также объясняется концепция проходов оптимизации компилятора и то, как их можно использовать для повышения производительности кода. Также обсуждаются ограничения компиляторов, особенно в отношении векторизации. Компиляторы могут векторизовать код только в том случае, если они могут определить, что указатели в коде не будут псевдонимами. Если указатели делают псевдоним, компилятор не сможет векторизовать код. Как программист, вы можете помочь компилятору, аннотировав свои указатели, чтобы предоставить больше информации об их использовании.
Лекция 10. Измерение и хронометраж
Лекция 10. Измерение и хронометраж
В этом видео спикеры обсуждают различные аспекты измерения и синхронизации в вычислениях, в том числе внешние факторы, которые могут повлиять на точность. Они подчеркивают необходимость моделей и четкого понимания данных, уменьшения дисперсии для компенсации ошибок и использования соответствующих вызовов синхронизации для обеспечения надежности. Они также обсуждают проблемы точного измерения производительности программного обеспечения, такие как степенной закон и недетерминированные факторы, а также выделяют такие инструменты, как моделирование производительности, вызовы времени, аппаратные счетчики и симуляторы. Наконец, они предостерегают от использования одного инструмента, рекомендуя триангуляцию и адаптацию в качестве методов, обеспечивающих точные результаты.
Докладчик объясняет важность надежного измерения производительности в разработке программного обеспечения. Он рекомендует использовать статистику для точного измерения производительности и обсуждает различные типы сводной статистики, такие как среднее значение, которое может обеспечить полезные измерения производительности в различных контекстах. Он указывает, что использование среднего арифметического отношения не является допустимым подходом, и предлагает вместо этого использовать среднее геометрическое. Докладчик подчеркивает важность выбора правильного способа агрегирования данных при сравнении программ и предлагает брать статистику низкого порядка, такую как минимум или 10%, из нескольких прогонов для более точного сравнения производительности. Докладчик также обсуждает различные методологии измерения и сравнения производительности, в том числе непосредственное сравнение и подбор модели для получения статистики, но предупреждает о проблеме чрезмерного подбора при моделировании. В целом видео подчеркивает важность надежного измерения производительности для повышения производительности программы.