Память для ноутбука: что показывает IRDM в операциях AVX?

Согласно заводской документации модули оперативной памяти IR-3200S464L16S-8G со­от­вет­ст­ву­ют спе­ци­фи­ка­ции DDR4-2400 (час­то­та так­ти­ро­ва­ния 1200 MHz), но поддерживают и XMP-профиль DDR4-3200, по­зво­ля­ю­щий под­нять частоту тактирования до 1600 MHz. При этом, активация овер­кло­кер­ско­го профиля мо­жет быть вы­пол­не­на по­вы­ше­ни­ем на­пря­же­ния питания от штатных 1.2V до 1.35V, что требует наличия на сис­тем­ной плате про­г­рам­ми­ру­е­мо­го ис­точ­ни­ка пи­та­ния. Ини­ци­а­ли­за­ция этого схемного решения вы­пол­ня­ет­ся UEFI на основании содержимого SPD, со­сто­я­ния оп­ций BIOS Setup и ряда platform-specific фак­то­ров. На­строй­ки UEFI для работы с XMP-профилем могут быть не­до­ступ­ны поль­зо­ва­те­лю, как это имеет мес­то по­чти во всех ноутбуках. Платформа ASUS FX506HM, ис­поль­зу­е­мая в на­шем экс­пе­ри­мен­те, — не ис­клю­чение.

Какую производительность продемонстрируют SO-DIMM модули IR-3200S464L16S-8G от GOODRAM на ноутбуке ASUS FX506HM в 512-битных операциях?

 

Разобравшись с потенциальными возможностями модулей, рассмотрим фактические параметры ини­ци­а­ли­за­ции под­сис­те­мы DRAM. Как видно из информации, овер­кло­кер­ский профиль не активирован, частота 1197.3 MHz при­бли­жен­но рав­на 1200 MHz, что соответствует режиму DDR4-2400.

Зная эффективную частоту передачи данных: FDDR = F · 2 = 1197.3 · 2 = 2394.6 MHz, а также разрядность од­но­го ка­на­ла в бай­тах (W=8 байт или 64 бита) и количество каналов (N=2 или Dual Channel) вычислим те­о­ре­ти­че­скую про­пус­к­ную спо­соб­ность:

Bandwidth = FDDR · W · N = 2394.6 · 8 · 2 = ~38313.6 MBPS.

Сначала о латентности

Измерение латентности подсистемы оперативной памяти, ор­га­ни­зо­ван­ной с помощью пары 8-ги­га­байт­ных SO-DIMM модулей DDR4 IR-3200S464L16S, основано на обходе в ОЗУ связанного списка элементов. Каждый из них яв­ля­ет­ся псев­до­слу­чай­ным числом — указателем на следующий элемент. Так намеренно подавляются спе­ку­ля­тив­ные ме­ха­низ­мы про­цес­сора — для того, чтобы начать следующий цикл чтения памяти, нужно уз­нать его адрес, для этого тре­бу­ет­ся за­вер­шить текущий цикл. В результате измеряется полная задержка па­мя­ти: от подачи ад­ре­са до из­вле­че­ния счи­тан­ных дан­ных. Non-tem­po­ral оп­ти­ми­за­ция в этом алгоритме не ис­поль­зу­ет­ся, поэтому кэш-память не­из­беж­но яв­ля­ет­ся участником событий.

Учитывая значительный объем L3 у исследуемого процессора (24MB), тест латентности требует диф­фе­рен­ци­ро­ван­ной оцен­ки: в каком случае на результат оказала влияние кэш-память L3, а в каком случае мы видим ха­рак­те­рис­ти­ки DRAM DDR4 от IRDM?

Латентность модулей памяти IR-3200S464L16S-8G в однопоточном режиме, установленных на платформе ASUS FX506HM

 

В тесте с одним потоком, где максимальный обрабатываемый объем блока составляет 40 MB, влияние L3 до­ста­точ­но вы­ра­же­но. До­пол­ни­тель­ное подтверждение этого тезиса мы видим на правом скриншоте при пе­ре­хо­де в режим Large Pag­es, где вли­я­ние TLB ни­ве­ли­ро­ва­но. Здесь точка перегиба соответствует объему бло­ка около 22 MB, при­бли­жа­ясь к объему L3-кэш, со­став­ля­ю­ще­му у Intel Core i9-11900H ровно 24MB.

Латентность модулей памяти IR-3200S464L16S-8G в многопоточном режиме, установленных на платформе ASUS FX506HM

 

В многопоточных тестах, где объем обрабатываемой информации кратно выше, влияние кэширования на ла­тен­т­ность IR-3200S464L16S-8G минимально и полученные графики более точно отражают физические ха­рак­те­рис­ти­ки под­сис­те­мы опе­ра­тив­ной памяти от GOODRAM. Кроме того, сравнивая результаты теста для ка­но­ни­че­ских страниц и Large Pages, можно наблюдать незначительный, но, тем не менее, устойчивый по­зи­тив­ный эффект от применения боль­ших стра­ниц.

Примечание 1.

Разметка оси Х соответствует объему информации, обрабатываемой в каждом потоке, а не сум­мар­но­му объ­е­му бло­ка, раз­де­ля­е­мо­го между потоками. Для исследуемого ноутбука ASUS FX506HM мно­го­по­точ­ный тест ис­поль­зу­ет во­семь потоков по числу ядер ус­та­нов­лен­но­го про­цес­со­ра Intel Core i9-11900H, сле­до­ва­тель­но в точке X=40MB общий об­ра­ба­ты­ва­е­мый объем составляет 40*8=320MB, что достаточно для уве­рен­но­го пе­ре­пол­не­ния L3.

Примечание 2.

Графики латентности от­ра­жа­ют за­ви­си­мость задержки получения данных в на­но­се­кун­дах (ось Y) от объема об­ра­ба­ты­ва­е­мо­го блока в мегабайтах (ось X). Меньшие значения Y со­от­вет­ст­ву­ют большей про­из­во­ди­тель­но­с­ти.

Выделяем главное

В ходе тестирования SO-DIMM модулей IR-3200S464L16S-8G было получено достаточно много результатов, не­ко­то­рые из них за­слу­жи­ва­ют отдельных публикаций и станут основанием для модернизации программного обеспечения NCRB. По­про­бу­ем выделить измерения, оптимальные для исследуемого ноутбука ASUS FX506HM, и сфор­му­ли­ро­вать кри­те­рии та­кой оптимальности.

О скорости чтения DRAM

Многопоточный тест чтения Модулей GOODRAM на основе 512-битной формы инструкции VMOVNTDQA дает ре­зуль­тат, по ме­ди­ан­но­му значению со­став­ля­ю­щий около 39.5 GBPS, что несколько пре­вы­ша­ет расчетный ли­мит, вы­чис­лен­ный в начале статьи. Дело в том, что не­смот­ря на non-temporal статус при­ме­нен­ной ин­ст­рук­ции, как вид­но из гра­фи­ка, CPU подавил кэширование далеко не полностью.

Многопоточный тест чтения Модулей GOODRAM на основе 512-битной формы инструкции VMOVNTDQA дает результат, по медианному значению составляющий около 39.5 GBPS

 

Примем во внимание минимум скорости, составляющий около 36 GBPS, при­мер­но со­от­вет­ст­ву­ю­щий го­ри­зон­таль­но­му участ­ку ус­та­но­вив­ше­го­ся режима, когда кэ­ши­ро­ва­ние подавлено за счет объема об­ра­ба­ты­ва­е­мой ин­фор­ма­ции.

Примем во внимание минимум скорости, составляющий около 36 GBPS, ориентируясь на горизонтальный участок установившегося режима

 

Программно-инициируемая опережающая выборка (software prefetch hints) не используется в этом тесте. За­бла­го­вре­мен­ная за­груз­ка данных возложена исключительно на аппаратный префетчер. Практика показала, что для Intel Core i9-11900H такой подход яв­ля­ет­ся оп­ти­маль­ным. Переход к ис­поль­зо­ва­нию prefetch hints зна­чи­тель­но снижает про­из­во­ди­тель­ность, во всяком случае, в данном варианте реализации при про­тес­ти­ро­ван­ных значениях prefetch-дис­тан­ции. За­ме­тим, что в 256-битном тесте, оптимизированном для CPU пре­ды­ду­щих поколений, ин­ст­рук­ции pre­fetch hints ис­поль­зу­ют­ся для всех вариантов установки опции Prefetch dis­tance. Именно это, а не различие в 256/512-раз­ряд­нос­ти, при­ве­ло к зна­чи­тель­но­му вы­иг­ры­шу 512-битного теста.

О скорости записи DRAM

В подтверждение тезиса о том, что при утилизации пропускной способности DRAM-подсистемы управление по­то­ка­ми дан­ных играет более важную роль, чем различие между AVX256 и AVX512, сравним результаты. Это со­от­вет­ст­вен­но 256-битная и 512-битная запись в режиме non-temporal, который в случае записи от­ра­ба­ты­ва­ет­ся процессором более строго. Кроме того, в отличие от теста чтения, здесь прочие условия мак­си­маль­но равны. В обоих случаях медиана со­став­ля­ет около 33 GBPS.

При утилизации пропускной способности DRAM-подсистемы управление по­то­ка­ми дан­ных играет более важную роль, чем различие между разрядностью команд AVX256 и AVX512

 

Про хорошо забытое старое

Если не принимать во внимание результаты, на которые оказала влияние кэш-память третьего уровня, то наи­боль­шую скорость за­пи­си в оперативную память, сформированную SO-DIMM модулями IRDM, показал од­но­по­точ­ный тест с ис­поль­зо­ва­ни­ем стро­ко­вых ин­ст­рук­ций REP STOS (для 64-битных операндов — это REP STOSQ). С помощью этих ин­ст­рук­ций IR-3200S464L16S-8G про­де­мон­ст­ри­ро­ва­ли скорость, достигающую в ме­ди­а­не 38 GBPS.

Реализованные более четырех десятилетий назад в первых x86-процессорах, строковые инструкции обес­пе­чи­ва­ли ощу­ти­мую при­бав­ку про­из­во­ди­тель­но­с­ти при обработке массивов, поскольку выполнение ап­па­рат­но­го цикла не тре­бо­ва­ло за­груз­ку из памяти инструкций, составляющих тело программного цикла, — его просто нет. В процессорах се­мей­ст­ва 80486 это об­сто­я­тель­ст­во уже утратило исходное преимущество — загрузка ин­ст­рук­ций стала выполняться из внут­рен­ней кэш-па­мя­ти, а ре­а­ли­зу­е­мые оп­ти­ми­за­ции главным образом кос­ну­лись прос­тей­ших операций, в част­нос­ти MOV. Стро­ко­вые инструкции на некоторое время перешли в раз­ряд не ре­ко­мен­до­ван­ных к использованию.

Разработчики нескольких поколений современных процессоров вспомнили о преимуществах аппаратных цик­лов, и по­лу­чен­ный результат подтверждает это. При выполнении инструкции REP STOSQ процессор, имея ин­фор­ма­цию о ба­зо­вом ад­ре­се массива (регистр RDI) и его длине (регистр RCX), может адаптивно выбрать ме­тод вы­пол­не­ния опе­ра­ции, за­ме­нив обработку 64-битных элементов обработкой блоков, размер которых оп­ти­ми­зи­ро­ван в со­от­вет­ст­вии с раз­ряд­но­стью внут­рен­них и внешних шин. Уровень участия кэш-памяти так­же может зависеть от соотношения объема об­ра­ба­ты­ва­е­мо­го блока и объемов кэш.

Интересно, что в многопоточном режиме преимущество несколько нивелировалось и медианная скорость за­пи­си в GOODRAM упала до 32 GBPS.

Возможно, если один поток способен полностью утилизировать пропускную способность DRAM, то затраты на ар­бит­раж в мно­го­по­точ­ном режиме не окупаются. Хотя не исключено, что имеет место иная, более тонкая при­чи­на, свя­зан­ная с мно­жест­вом условий, только при одновременном выполнении которых CPU имеет воз­мож­ность оп­ти­ми­зи­ро­вать ап­па­рат­ный цикл обработки массива. Об окончательных выводах еще говорить ра­но. Вместе с тем, одно из анек­до­тич­ных свойств x86-архитектуры, связанное с медленным выполнением ап­па­рат­ных циклов в сравнении с про­грам­мны­ми, возможно уйдет в прошлое.

Заметим, что ускорение выполнения строковых инструкций может зависеть от инициализации процессора про­це­ду­ра­ми UEFI, в част­нос­ти, — состояния ряда Model-Specific регистров. Исходя из этого, один и тот же процессор, бу­ду­чи ус­та­нов­лен­ным на раз­ных платформах, либо даже с различными версиями UEFI на одной платформе, может по­ка­зы­вать раз­лич­ные ре­зуль­та­ты.

Вместо послесловия

Автор далек от мысли, что набор инструкций AVX512 не эффективен. Не секрет, что оперативная память ра­бо­та­ет зна­чи­тель­но мед­лен­нее CPU, нивелируя различия времени выполнения внутренних операций по­след­не­го. Как ар­гу­мент в поль­зу AVX512, мож­но было бы привести в пример скорость чтения L3-кэш, но это со­всем другая история.

Максимальный выигрыш в производительности для AVX512 по сравнению с AVX256 при прочих равных мож­но за­фик­си­ро­вать при работе с векторными регистрами процессора, количество которых, кстати, уд­во­и­лось и со­став­ля­ет 32 (ZMM0-ZMM31), и кэш-памятью L1, но это уже тема отдельной публикации.

В силу ограниченного объема материала, мы акцентировали внимание лишь на элементарных операциях за­груз­ки и со­хра­не­ния дан­ных, важных в контексте оценки производительности DRAM. Детальная оптимизация с при­ме­не­ни­ем ме­нее оче­вид­ных пре­и­му­ществ новых CPU, в частности пре­ди­кат­ных ма­сок, позволяющих ин­ди­ви­ду­аль­но ад­ре­со­вать скалярные значения, упакованные в векторном регистре, также способна дать свои плоды, при условии ло­яль­но­с­ти со сто­ро­ны раз­ра­бот­чи­ков про­г­рам­мно­го обес­пе­че­ния.