Add Daniil_Pravkin_report.tex - #2
Conversation
Add sgemm_graph.png
| Кафедра: \emph{кафедра, на которой планируется защита/сдача работы} | ||
|
|
||
| % Степень/звание и должность научника мы лучше вас знаем, их можно не указывать. | ||
| Научный руководитель: \emph{ФИО научного руководителя} |
| \begin{flushright} | ||
| Группа: \enquote{25.Б73-мм} | ||
|
|
||
| Кафедра: \emph{кафедра, на которой планируется защита/сдача работы} |
There was a problem hiding this comment.
Пучть будет кафедра СП, наверное.
|
|
||
| \section{Постановка задачи} | ||
|
|
||
| % Буквально парой предложений ввести в контекст, обязательно сформулировать цель работы. Если работа делается где-то глубоко внутри проекта, на введение можно потратить больше места, чтобы подвести читателя от сути проекта в целом к тому, что конкретно вам надо было сделать. Только без воды, никакого "в современном мире"! |
| \section{Постановка задачи} | ||
|
|
||
| % Буквально парой предложений ввести в контекст, обязательно сформулировать цель работы. Если работа делается где-то глубоко внутри проекта, на введение можно потратить больше места, чтобы подвести читателя от сути проекта в целом к тому, что конкретно вам надо было сделать. Только без воды, никакого "в современном мире"! | ||
| Vortex - это проект с открытым исходным кодом для поддержки GPGPU на основе расширений RISC-V ISA, с возможностью аппаратной конфигурации. Целью работы является получение навыков работы с FPGA-стеком. |
There was a problem hiding this comment.
Правильно тире --- это три минуса.
There was a problem hiding this comment.
Постарайтесь писать чуть более полноценные и связанные предложения.
| \section{Описание предлагаемого решения} | ||
|
|
||
| % Раздел пишется в свободной форме, с минимумом технических подробностей (можно приводить ссылки на более подробные документы). | ||
| Для получения навыков работы с Vortex, был проведён эксперимент по измерению масштабируемости функции умножения матриц. |
There was a problem hiding this comment.
Пунктуация. Попросие хотя бы нейронку проверить.
| \section{Эксперименты} | ||
|
|
||
| \subsection*{Введение} | ||
| Vortex использует модель исполнения SIMT (Single Instructions Multiple Threads)\footnote{Информация из документации Vortex о микроархитектуре на сайте github.com (\url{https://github.com/vortexgpgpu/vortex/blob/master/docs/microarchitecture.md}) (27.04.2026)}, в которой одна и та же инструкция выполняется над разными данными. Это достигается при помощи потоков (threads) (наименьшие единицы вычисления, которые выполняются параллельно) и варпов (warps) (набор потоков, выполняющих одну и ту же инструкцию). Таким образом достигается распараллеливание выполнения задачи. Одной из задач, выполняемой при помощи такой модели исполнения, является умножение матриц (например, в графических процессорах от компании NVIDIA)\footnote{В архитектуре CUDA, использующей SIMT, также есть функция умножения матриц (\url{https://docs.nvidia.com/cutlass/latest/media/docs/cpp/efficient_gemm.html})}. |
There was a problem hiding this comment.
Зачем в эксериментах вдруг описание Vortex?
| % ниже списком перечисляете то, что выносится как результат практики. | ||
|
|
||
| \begin{itemize} | ||
| \item произведено сравнение затрачиваемого количества тактов различными конфигурациями при выполнении функции умножения матриц Vortex |
| \item проанализирована масштабируемость функции умножения матриц | ||
| \end{itemize} | ||
|
|
||
| Техническая документация: \url{https://github.com/vortexgpgpu/vortex} . |
There was a problem hiding this comment.
А где Ваше репо с оформленными экспериментами и прочим?
There was a problem hiding this comment.
А где Ваше репо с оформленными экспериментами и прочим?
Я не знал, что там должно быть. Подскажите, пожалуйста, что надо добавить туда, кроме результатов эксперимента, и в каком виде их надо приложить?
There was a problem hiding this comment.
Всё, необходимое для воспроизведения. Инструкции, скрипты для автоматизации (запуска, сбора данных, статистического анализа, визуализации, мало ли чего ещё), подробные результаты с из анализом. В 3 страницы ответа может и не влезть, потому развернутый анализ в репозитоии.
| \subsection*{Результаты и анализ} | ||
| В результате поиска аппаратной конфигурации (табл. \ref{tab:optimal_for_8}), наиболее оптимальной при восьми ядрах оказалась следующая: clusters=1, warps=8, threads=64, l2cache, l3cache. | ||
|
|
||
| По результатам тестов по измерению масштабируемости (рис. \ref{figure:sgemm_graph}), при увеличении количества ядер от 1 до 16, количество тактов уменьшается, а при cores=16 достигает наименьшего значения. При дальнейшем увеличении количества ядер (начиная с 32), количество тактов начинает возрастать. Это свидетельствует о накладных расходах, затрачиваемых на корректную работу ядер, в том числе для обеспечения параллельного выполнения, вследствие чего суммарное количество тактов больше, чем при 16-ти ядрах. Таким образом, для умножения матриц 512x512 при clusters=1, warps=8, threads=64, l2cache, l3cache наименьшее количество тактов достигается при использовании 16-ти ядер. |
There was a problem hiding this comment.
Судя по графику, Вы не проверяли значения между 16 и 32. Правда ли, что например, при 18 не лучше, чем пот 16?
Replace and rename some chapters.
|
|
||
| \section{Введение} | ||
|
|
||
| Vortex --- это проект с открытым исходным кодом, предназначенный для поддержки вычислений на графических процессорах (GPGPU). Он реализован на основе расширений системы команд RISC-V ISA и предусматривает возможность аппаратной конфигурации. |
|
|
||
| Целью данной работы является получение навыков работы с FPGA-стеком. | ||
|
|
||
| Для достижения цели требуется решить следующие задачи: |
|
|
||
| Перед проведением экспериментов необходимо было выбрать способ симуляции Vortex: RTL-симуляцию или Cycle-Approximate-симуляцию. | ||
|
|
||
| Первый вариант осуществляется при помощи Verilator --- симулятора, преобразующего код на Verilog HDL, в однопоточный или многопоточный код на C++/SystemC. В таком подходе моделируется каждый отдельный сигнал, триггер и логический элемент. Вследствие чего данный метод довольно точен, но при этом он затрачивает много времени, поэтому он используется для проверки корректности взаимодействия программы и архитектуры Vortex. |
There was a problem hiding this comment.
"HDL, в однопоточный " тут точно запятая нужна?
There was a problem hiding this comment.
Не понял, как из затратности следует примернимость для проверки чего-то там.
| Проанализировать масштабируемость функции умножения матриц при увеличении количества ядер и фиксированном объёме входных данных. | ||
|
|
||
| \subsection*{Входные данные} | ||
| Для эксперимента была выбрана матрица размера 512x512 с целью получения более реалистичной производительности. Для алгоритма требуется память для двух перемножаемых матриц и одной итоговой, следовательно, объём трёх матриц данного размера --- 3~МиБ, что превышает объём общей памяти (Local Memory) (128 КиБ), L1-кэша (16~КиБ), L2-кэша (1~МиБ) и L3-кэша (2~МиБ)\footnote{Объёмы общей памяти и l1/l2/l3-кэшей взяты со страниц Vortex на сайте github.com (объём общей памяти: \url{https://github.com/vortexgpgpu/vortex/blob/master/hw/rtl/mem/VX_local_mem.sv} оъёмы кэшей: \url{https://github.com/vortexgpgpu/vortex/blob/master/docs/simulation.md}) (26.04.2026)}; следовательно, программа будет больше взаимодействовать с основной памятью. |
There was a problem hiding this comment.
Так-то объём зависит от типа данных.
|
|
||
| \subsection*{Проведение эксперимента} | ||
|
|
||
| Порядок выполнения тестов: |
| Далее были выполнены тесты с оптимальной конфигурацией, но изменяемым количеством ядер. Значения количества ядер кратны степеням двойки, чтобы обеспечить более равномерное распределение нагрузки между ядрами, так как размер матрицы тоже кратен степени двойки. | ||
|
|
||
| \subsection*{Результаты и анализ} | ||
| В результате поиска аппаратной конфигурации (табл. \ref{tab:optimal_for_8}) наиболее оптимальной при восьми ядрах оказалась следующая: clusters=1, warps=8, threads=64, l2cache, l3cache. |
|
|
||
| \section{Заключение} | ||
|
|
||
| В ходе выполнения работы получены следующие результаты: |
| \item Проанализирована масштабируемость функции умножения матриц. | ||
| \end{itemize} | ||
|
|
||
| Техническая документация: \url{https://github.com/Prosto-Dan/vortex_practice_1_year} . |
There was a problem hiding this comment.
- Ссылка на анлиз из основного ридми.
- Графики и туда добавьте.
|
|
||
| \begin{figure} | ||
| \centering | ||
| \includegraphics[width=0.8\linewidth]{sgemm_graph.png} |
There was a problem hiding this comment.
Я надеюсь, это matplotlib. выгрузите графики в pdf. А то однажды они развалятся на пиксели.
Change sgemm_graph.png to sgemm_graph.pdf
|
|
||
| Второй вариант осуществляется при помощи SimX~--- симулятора Vortex, написанного на C++. Он является потактовым, то есть воспроизводит поведение микроархитектуры с точностью до такта (содержимое кэша, состояние счётчиков, загрузка конвейера). Поэтому данный метод чуть менее точен, но более быстр по сравнению с RTL-симуляцией. | ||
|
|
||
| Таким образом, было принято решение использовать в экспериментах симулятор SimX. |
There was a problem hiding this comment.
Из сказаного выше не понятно каким таким образом.
| Для экспериментов была выбрана матрица размера $512\times512$ с целью получения более реалистичной производительности. Для алгоритма требуется память для двух перемножаемых матриц и одной итоговой, при этом каждый элемент матрицы имеет тип float~\footnote{Информация из реализации функции sgemm в Vortex, URL: \url{https://github.com/vortexgpgpu/vortex/blob/master/tests/regression/sgemm/common.h} (дата обращения: 12.06.2026).}, следовательно, объём трёх матриц данного размера~--- 3~МиБ, что превышает объём общей памяти (Local Memory) (128 КиБ), L1-кэша (16~КиБ), L2-кэша (1~МиБ) и L3-кэша (2~МиБ)~\footnote{Объёмы общей памяти и l1/l2/l3-кэшей взяты из документации Vortex (объём общей памяти: URL: \url{https://github.com/vortexgpgpu/vortex/blob/master/hw/rtl/mem/VX_local_mem.sv}, оъёмы кэшей: URL: \url{https://github.com/vortexgpgpu/vortex/blob/master/docs/simulation.md}) (дата обращения: 26.04.2026).}; следовательно, программа будет больше взаимодействовать с основной памятью. | ||
|
|
||
| \samepage{ | ||
| Порядок выполнения тестов: |
There was a problem hiding this comment.
Тестов ли. Экспериментов, наверное.
|
|
||
| \section{Заключение} | ||
|
|
||
| В ходе выполнения работы получены следующие результаты. |
There was a problem hiding this comment.
Нет. А вот тут точка не нужна....
|
|
||
| Целью данной работы является получение навыков работы с FPGA-стеком. | ||
|
|
||
| Для достижения цели требуется решить следующие задачи. |
There was a problem hiding this comment.
И тут точка не нужна. Ыыыы... Ну почитайте что ли, как пеерчисления оформляются. Ну не может после точки маленькая буква идти.
There was a problem hiding this comment.
Прошу прощения за глупость. Изначально оставил двоеточия, но в обзоре изменённых файлов остались комментарии про точки, из-за чего посчитал, что это неучтённые замечания.
|
О. Там же вышл новый Вортекс. И разработчики утверждают, что перестали воспроизводиться проблемы со сбросом регистров. А давайте Вы воспроизведёте наши эксперименты и проверите, правда это, или нет. |
Add Daniil_Pravkin_report.tex
Add sgemm_graph.png