Add Kirill Simonov report - #29
Conversation
|
|
||
| \section{Постановка задачи} | ||
|
|
||
| Выполнение операции перемножения плотных матриц (SGEMM) лежит в основе подавляющего большинства алгоритмов машинного обучения и вычислительной математики. Ввиду кубической асимптотической сложности данной задачи, ключевым фактором, ограничивающим скорость ее выполнения на графических ускорителях (GPU), становится не максимальная производительность арифметико-логических устройств, а пропускная способность шины памяти. |
There was a problem hiding this comment.
Не понял, как из куба следует важность пропускной способности памяти.
|
|
||
| Выполнение операции перемножения плотных матриц (SGEMM) лежит в основе подавляющего большинства алгоритмов машинного обучения и вычислительной математики. Ввиду кубической асимптотической сложности данной задачи, ключевым фактором, ограничивающим скорость ее выполнения на графических ускорителях (GPU), становится не максимальная производительность арифметико-логических устройств, а пропускная способность шины памяти. | ||
|
|
||
| Данная учебная практика посвящена исследованию подходов к оптимизации доступа к памяти при вычислении матричных произведений. В отличие от дискретных видеокарт, целевой платформой в работе выступает система на кристалле (SoC) с архитектурой унифицированной памяти (Unified Memory Architecture, UMA). В таких системах центральный и графический процессоры физически разделяют общий объем оперативной памяти, что требует специфического подхода к распределению нагрузок и утилизации локальной кеш-памяти. Основой для проведения экспериментов послужил проект myGEMM, предоставляющий набор последовательно усложняющихся реализаций алгоритма. |
There was a problem hiding this comment.
- "Матричный произведения" --- это странный зверь.
- Скажите сразу, что за SoC.
- Сразу ссылка на myGEMM
- Усложняющихся?
|
|
||
| Данная учебная практика посвящена исследованию подходов к оптимизации доступа к памяти при вычислении матричных произведений. В отличие от дискретных видеокарт, целевой платформой в работе выступает система на кристалле (SoC) с архитектурой унифицированной памяти (Unified Memory Architecture, UMA). В таких системах центральный и графический процессоры физически разделяют общий объем оперативной памяти, что требует специфического подхода к распределению нагрузок и утилизации локальной кеш-памяти. Основой для проведения экспериментов послужил проект myGEMM, предоставляющий набор последовательно усложняющихся реализаций алгоритма. | ||
|
|
||
| Особенностью macOS является использование транслятора \texttt{cl2Metal}, который преобразует OpenCL C в промежуточное представление Metal. Оригинальный код myGEMM содержит сложные препроцессорные вычисления (например, \texttt{\#define RTS (TS/WPT)}), что приводит к аварийному завершению компиляции под \texttt{cl2Metal}. Таким образом, требуется не только оптимизация самих алгоритмов, но и адаптация механизма передачи параметров. |
|
|
||
| Особенностью macOS является использование транслятора \texttt{cl2Metal}, который преобразует OpenCL C в промежуточное представление Metal. Оригинальный код myGEMM содержит сложные препроцессорные вычисления (например, \texttt{\#define RTS (TS/WPT)}), что приводит к аварийному завершению компиляции под \texttt{cl2Metal}. Таким образом, требуется не только оптимизация самих алгоритмов, но и адаптация механизма передачи параметров. | ||
|
|
||
| \textbf{Целью работы является} адаптация существующих алгоритмов блочного матричного умножения под трансляторы macOS, а также экспериментальная оценка влияния двумерного блочного разбиения и регистровой оптимизации на итоговую производительность в условиях UMA. |
There was a problem hiding this comment.
Что такое "блочное разбиение" и "регистровая оптимизация"?
| Для выполнения поставленной цели потребовалось решить следующие задачи: | ||
| \begin{itemize} | ||
| \item модифицировать кодовую базу ядер проекта myGEMM\footnote{Cedric Nugteren. Репозиторий проекта myGEMM. URL: \url{https://github.com/CNugteren/myGEMM} (дата обращения: 21.03.2026).} для обеспечения совместимости с компилятором \texttt{cl2Metal}; | ||
| \item спроектировать автономную систему программ для статической генерации параметров разбиения и управления запусками; |
|
|
||
| \section{Описание предлагаемого решения} | ||
|
|
||
| Оригинальная архитектура проекта myGEMM опирается на передачу параметров оптимизации (размеров блоков, ширины векторизации) непосредственно на этапе JIT-компиляции OpenCL-кода через динамически задаваемые параметры препроцессора. Однако встроенный в подсистему macOS компилятор \texttt{cl2Metal} демонстрирует нестабильную работу при разборе сложных препроцессорных выражений внутри \texttt{.cl} файлов, что делает невозможным использование оригинального подхода на платформе Apple Silicon. |
There was a problem hiding this comment.
Что за блоки, какая векторизация? Apple Silicon?
|
|
||
| Оригинальная архитектура проекта myGEMM опирается на передачу параметров оптимизации (размеров блоков, ширины векторизации) непосредственно на этапе JIT-компиляции OpenCL-кода через динамически задаваемые параметры препроцессора. Однако встроенный в подсистему macOS компилятор \texttt{cl2Metal} демонстрирует нестабильную работу при разборе сложных препроцессорных выражений внутри \texttt{.cl} файлов, что делает невозможным использование оригинального подхода на платформе Apple Silicon. | ||
|
|
||
| Для решения этой проблемы был разработан независимый программный комплекс на языке Python, выполняющий расчет параметров оптимизации на центральном процессоре. Инструментарий состоит из следующих изолированных компонентов: |
| Для решения этой проблемы был разработан независимый программный комплекс на языке Python, выполняющий расчет параметров оптимизации на центральном процессоре. Инструментарий состоит из следующих изолированных компонентов: | ||
|
|
||
| \begin{itemize} | ||
| \item \texttt{calculate\_kernels.py} — модуль статической подготовки конфигураций. Указанная программа служит инструментом для развертывания пользовательских параметров оптимизации (\texttt{TS}, \texttt{WPT}, \texttt{WIDTH} и других) в виде фиксированных констант препроцессора. Программа выполняет вычисление производных величин, необходимых для работы алгоритмов (например, \texttt{RTS = TS/WPT}, \texttt{LPT = (TSDK * WPT) / TS}), и записывает их в заголовочный файл \texttt{settings.h} как готовые целочисленные значения. Это полностью переносит математическую нагрузку с препроцессора OpenCL на сторону Python, что необходимо для стабильной трансляции кода в \texttt{cl2Metal} на платформе Apple Silicon. Кроме того, модуль обеспечивает реализацию векторизации: в зависимости от заданного параметра \texttt{WIDTH}, автоматически генерируется директива \texttt{typedef}, определяющая тип \texttt{floatX} (\texttt{float}, \texttt{float2} или \texttt{float4}), а также набор вспомогательных параметров препроцессора, что позволяет коду ядер OpenCL единообразно работать с векторами данных, сохраняя совместимость с управляющей программой на C++. |
There was a problem hiding this comment.
Тире. Пробелы. Неразрывные. Ну хоть бы перечитывали за нейронкой.
There was a problem hiding this comment.
Простите, но это уже буквально бред.
|
|
||
| В качестве входных данных использовались квадратные матрицы размерностью \(4096 \times 4096\) и \(8192 \times 8192\) элементов. Для каждого ядра выполнялось 50 контрольных итераций, которым предшествовали 15 предварительных запусков для стабилизации температурного режима кристалла и предотвращения динамического снижения тактовой частоты. Между сменой тестируемых размерностей выдерживалась трехсекундная программная пауза. | ||
|
|
||
| Для минимизации влияния фоновой активности операционной системы macOS (обусловленной работой таких процессов, как \texttt{WindowServer} или \texttt{Spotlight}) на точность замеров, в методику проведения эксперимента был включен этап предварительной стабилизации графического процессора (\textit{warm-up}). Перед началом записи данных выполнялось 15 инициализирующих итераций, что обеспечивало выравнивание тактовой частоты графического процессора и выход системы из энергосберегающих состояний. Все 50 итераций измерения включались в финальный расчет, что при достаточном объеме выборки позволяет компенсировать случайные кратковременные всплески времени выполнения, связанные с планировщиком задач ОС. Стабильность полученных результатов при различных нагрузках подтверждается высокой повторяемостью средних значений производительности (GFLOPS) при последующих сессиях экспериментов. |
There was a problem hiding this comment.
Ууууфффф..... Нейробред детектед.
| Для минимизации влияния фоновой активности операционной системы macOS (обусловленной работой таких процессов, как \texttt{WindowServer} или \texttt{Spotlight}) на точность замеров, в методику проведения эксперимента был включен этап предварительной стабилизации графического процессора (\textit{warm-up}). Перед началом записи данных выполнялось 15 инициализирующих итераций, что обеспечивало выравнивание тактовой частоты графического процессора и выход системы из энергосберегающих состояний. Все 50 итераций измерения включались в финальный расчет, что при достаточном объеме выборки позволяет компенсировать случайные кратковременные всплески времени выполнения, связанные с планировщиком задач ОС. Стабильность полученных результатов при различных нагрузках подтверждается высокой повторяемостью средних значений производительности (GFLOPS) при последующих сессиях экспериментов. | ||
|
|
||
| Оценка вычислительной производительности основывалась на подсчете затраченного физического времени \(t\). Поскольку для вычисления одного элемента результирующей матрицы \(N \times N\) требуется \(2N\) скалярных операций сложения и умножения, итоговый показатель производительности в GFLOPS рассчитывался по формуле: | ||
| \[ |
gsvgit
left a comment
There was a problem hiding this comment.
Думайте над тем, что пишите. Проверяйте внимательнее то, что написали.
|
|
||
| В качестве вводных данных использовались квадратные матрицы размером \(4096 \times 4096\) и \(8192 \times 8192\) элементов. Для каждого ядра выполнялось 50 контрольных итераций, которыми предшествовали 15 предварительных запусков для стабилизации температурного режима процессора и предотвращения динамического снижения тактовой частоты. Между сменой тестируемых размеров матриц выдерживалась трёхсекундная программная пауза. На основе полученной выборки вычислялись среднее значение производительности (GFLOPS), стандартное отклонение и 95\%-й доверительный интервал, а проверка характера распределения результатов выполнялась при помощи критериев Д'Агостино-Пирсона и Шапиро-Уилка. | ||
|
|
||
| Для оценки вычислительной производительности измерялось время выполнения операций \(t\). При умножении плотных квадратных матриц размера \(N \times N\) требуется выполнить \(N\) операций умножения и \(N-1\) операций сложения для каждого из \(N^2\) элементов. Таким образом, суммарное число арифметических операций для всей матрицы составляет \(N^2\cdot(2N-1)\), что при больших значениях \(N\) упрощается до \(2N^3\). Итоговый показатель производительности в GFLOPS рассчитывался по формуле: |
There was a problem hiding this comment.
"что при больших значениях " Это так не работает.
|
|
||
| Для решения этой проблемы был разработан инструментарий на языке Python, обеспечивающий автоматизацию сборки проекта и проведение серии экспериментов. В состав средств автоматизации входят следующие изолированные компоненты: | ||
| \begin{itemize}[noitemsep, topsep=0pt] | ||
| \item \texttt{calculate\_kernels.py} ~--- статическая обработка конфигураций. Содержит встроенный словарь для одиннадцати версий вычислительных ядер. Программа для каждого ядра рассчитывает макроподстановки и сохраняет их в заголовочный файл \texttt{settings.h}. Также модуль автоматизирует сборку проекта, компилируя исходные файлы, запускает прогревочные итерации для графического процессора и сохраняет данные каждого запущенного процесса. |
There was a problem hiding this comment.
Неразрывные проблеы не так работают.
gsvgit
left a comment
There was a problem hiding this comment.
Нет . Этот позор от нейронки надо переделать самостоятельно.
|
|
||
| В качестве вводных данных использовались квадратные матрицы размером \(4096 \times 4096\) и \(8192 \times 8192\) элементов. Для каждого ядра выполнялось 50 контрольных итераций, которыми предшествовали 15 предварительных запусков для стабилизации температурного режима процессора и предотвращения динамического снижения тактовой частоты. Между сменой тестируемых размеров матриц выдерживалась трёхсекундная программная пауза. На основе полученной выборки вычислялись среднее значение производительности (GFLOPS), стандартное отклонение и 95\%-й доверительный интервал, а проверка характера распределения результатов выполнялась при помощи критериев Д'Агостино-Пирсона и Шапиро-Уилка. | ||
|
|
||
| Для оценки вычислительной производительности измерялось время выполнения операций \(t\). При умножении плотных квадратных матриц размера \(N \times N\) требуется выполнить \(N\) операций умножения и \(N-1\) операций сложения для каждого из \(N^2\) элементов. При расчёте производительности (GFLOPS) зачастую используется стандартная асимптотическая оценка сложности алгоритма, равная \(2N^3\) операций. Младшим членом \(N^2\) пренебрегают, так как при исследуемых больших размерах матриц его вклад становится исчезающе малым. Итоговый показатель производительности в GFLOPS рассчитывался по формуле: |
There was a problem hiding this comment.
Хосспади. Перестаньте уже издеваться над нейронкой. Сядьте и подумайте сами. Своей головой. Может даже до сентября.
No description provided.