Текст моей магистерской диссертации и другие бумажки.
Тема: "Применение анализа указателей и синонимов для оптимизации многопоточных программ".
- common - общие для всех документов файлы;
- text - основной текст работы;
- presentation/slides - текст презентации и слайды для различных выступлений;
- pre_annotation - аннотация работы на момент утверждения темы;
- post_annotation - окончательная аннотация (реферат) работы;
- opinion - отзыв научного руководителя;
- review - рецензия;
- issc - тезис на МНСК.
По тегам можно смотреть различные версии документов, например на момент сдачи курсовой работы, перед предзащитой и т.д.:
course_work
- текст и презентация курсовой работы;issc
- презентация к выступлению на МНСК;seminar
- презентация к выступлению на семинаре;pre_defence
- текст и презентация к предзащите;rc1
- сдача текста рецензенту;rc2
- повторная сдача текста рецензенту;rc3
- сдача текста на переплет;defence
- презентация к защите.
Для сборки LaTeX документов используется rubbr (хотя можно собирать и в ручную).
Некоторые документы используют информацию о последнем Git коммите.
Изначально выдаются сообщения no Git info
на месте реальной информации.
Для ее генерации необходимо скопировать хуки и выполнить, например, checkout
:
ln -s ../../common/gitinfo-hook .git/hooks/post-checkout
ln -s ../../common/gitinfo-hook .git/hooks/post-commit
ln -s ../../common/gitinfo-hook .git/hooks/post-merge
git checkout master
Анализ указателей и синонимов является одним из видов статического анализа. Результаты такого анализа могут быть использованы для усиления других видов анализа, проводимых оптимизирующим компилятором. Таким образом может быть усилен достаточно обширный класс анализов и оптимизаций, как классических, так и объектно-ориентированных.
В программах на языке Java семантика любого участка кода программы зависит от многопоточного окружения. Взаимодействие различных потоков исполнения друг с другом и с разделяемой памятью описывается моделью памяти данного языка/среды, которая определяет корректность тех или иных преобразований программы. Корректное и при этом не чрезмерно препятствующее оптимизациям определение зависимостей и связей в программе возможно только при проведении нетривиального анализа указателей и синонимов.
В данной работе для выражения неявных зависимостей по памяти была использована M-переменная, представляющая образ памяти. Семантика всех операций языка Java, взаимодействующих с памятью, выражена в терминах указателей и M-переменной, в соответствии с моделью памяти языка. Сконструировано внутреннее представление для множества целей указателей и M-переменной, позволяющее проводить корректный потоковый анализ программы.
Все это позволило разработать эффективный алгоритм анализа указателей, пригодный для анализа многопоточных программ на языке Java.