Лучшие магистерские диссертации выпускников «Разработки программного обеспечения»
Как понять, какими направлениями занимаются в магистратуре? Например, посмотреть на темы выпускных квалификационных работ! По традиции рассказываем, какие дипломы получили самые высокие оценки экзаменационной комиссии в этом году.
  • Михаил Сладков
    Инженер в Syntacore
Унификация процесса обнаружения оборудования в вычислительных системах на основе RISC-V ядер
Обнаружение оборудования — критически важный процесс при запуске операционной системы, во время которого ОС должна понять, на каком именно железе она работает. RISC-V — это развивающееся семейство процессорных архитектур, главные черты которого — открытость и расширяемость. Открытость подразумевает, что разрабатывать RISC-V процессоры можно без специальной лицензии, расширяемость — что производитель может почти произвольно комбинировать расширения системы команд, которые поддерживает его процессор, и даже вводить свои. Эти черты делают устоявшиеся в индустрии механизмы обнаружения оборудования плохо подходящими для RISC-V, из-за чего два года назад был предложен новый механизм — RISC-V Unified Discovery. 

В своей работе я добавил поддержку механизма RISC-V Unified Discovery в ПО цепочки загрузки операционной системы. Для этого мне нужно было собрать всю цепочку загрузки из открытых компонентов: от эмулятора процессора до ядра ОС. Я модифицировал популярный эмулятор QEMU, написал собственную утилиту для создания специальных бинарных блоков данных о процессоре, а самую сложную часть работы — их разбор на ранних этапах загрузки, где еще нет операционной системы — реализовал в среде OpenSBI.

Главное преимущество моего решения по сравнению с существующим сегодня подходом Device Tree в том, что оно разделяет описание процессора и остальной системы. Раньше эти данные были перемешаны, и любое изменение в процессорном ядре требовало переписывания конфигурации всей платы. Unified Discovery позволяет процессору «рассказать о себе самому». Это упрощает и ускоряет разработку, а также снижает риск ошибок.

Результат моей ВКР — первый опубликованный прототип, демонстрирующий жизнеспособность технологии. В перспективе, после необходимых доработок, мое решение может быть оформлено как патч в кодовую базу OpenSBI. Это сделает поддержку Unified Discovery доступной для всех разработчиков RISC-V систем. Наличие прототипа также может ускорить стандартизацию и внедрение технологии в реальные продукты.
  • Екатерина Семчук
Разработка алгоритма глобального динамического освещения картографических 3D-данных в реальном времени
В последние годы картографические системы делают упор на визуальное качество: добавляют сезонные события, детализированные модели и фотореалистичные текстуры. Однако еще одной составляющей реалистичной картинки является корректное освещение, которое трудно делать из-за высокой вычислительной сложности. С распространением WebGPU появился потенциал ускорить эти расчеты.

Мой диплом посвящен разработке алгоритма глобального динамического освещения на WebGPU, адаптированного к ограничениям и особенностям картографических данных. За основу я взяла гибридный подход: irradiance-пробы с вокселизацией через карту высот. Это позволяет использовать статичность картографической геометрии и простоту ее описания для быстрой проверки видимости и расчета освещения в реальном времени. Помимо самого алгоритма, я реализовала тестовую сцену с динамическим небосводом по модели All Sky Model и картографическими данными.

Преимущество моего решения в том, что традиционные подходы к глобальному освещению обычно либо делают акцент на физически корректном качестве, сильно проигрывая по производительности и памяти, либо приближают только отдельные аспекты глобального освещения, используя мало вычислительных ресурсов. Я же предлагаю компромисс, ориентированный на картографические данные. Мой алгоритм учитывает ограничения веб-среды и мобильных устройств, но при этом обеспечивает визуальное качество, превосходящее прямое освещение и освещение от irradiance cubemap. Кроме того, параметры алгоритма можно настроить в реальном времени, что позволяет балансировать между качеством и производительностью под конкретную задачу.

Результаты моей работы могут быть использованы при создании новых или модернизации существующих картографических движков, совместимых с WebGPU. Также этот подход можно применить в других веб-системах, работающих с трехмерными сценами в реальном времени, например, в туристических и навигационных приложениях. Полученный алгоритм позволяет добавлять приближенное глобальное освещение на сцены с динамически-изменяющимся освещением и преимущественно статичной геометрией, улучшая их визуальное качество. Также правильно рассчитанные тени и освещение несут дополнительную информацию о геометрии сцены (например, в случае картографии, по теням можно оценить высоту зданий и характер рельефа).

Я думаю, что еще вернусь к этой теме, так как у нее есть потенциал для развития как с визуальной точки зрения, так и с точки зрения оптимизаций по памяти и скорости работы.
  • Александр Кудрявцев
    Разработчик безопасности в автономном транспорте Яндекса
Разработка системы эффектов для языка Cangjie
Во многих языках программирования существуют системы эффектов — способы контролировать побочные эффекты в системе типов. Например, это Checked Exceptions в Java, Result-типы в Rust и Go, а Haskell и вовсе построен на концепции, что по умолчанию функции являются чистыми и все побочные эффекты должны быть указаны. Большинство систем эффектов, которые используются в промышленных языках, довольно сложные в использовании, предполагают инвазивное встраивание в существующие программы, и/или ограничены в области применения (Java Checked Exceptions, пожалуй, самый показательный пример — несмотря на повышение безопасности, их используют крайне редко). 

С 2019 года Huawei занимается разработкой нового промышленного языка Cangjie. Сейчас в нем не существует системы эффектов, а так как язык сравнительно новый, можно надеяться, что first-class реализация будет активно использоваться. Чтобы сделать систему эффектов для Cangjie, я взял Safer Exceptions из Scala и расширил этот подход для более качественного взаимодействия с языком.

Мой подход отличается от Safer Exceptions в Scala тем, что Scala — функциональный язык, и неявные параметры (которые являются ядром технической реализации) используют также и для других целей (например, для классов типов). Из-за этого неявные параметры задизайнены так, что чтение кода с ними очень затруднено, существуют глобальные имплиситы и т. п. Моя реализация системы эффектов в Cangjie проще для понимания, ошибки при рефакторинге возникают реже (что, по сути, является основной проблемой Scala).

Разница с системами эффектов из других языков в том, что моя версия более гибкая (например, можно работать с произвольными эффектами в отличие от типов-ошибок) и более эргономичная в случае императивных языков (например, не требует дубликации стандартной библиотеки в отличие от монад). 

В итоге система, которую я реализовал, поможет улучшить код на Cangjie, а также ее можно внедрить в другие (существующие или новые) промышленные языки, избежав указанных выше недостатков.