Asus ROG Strix GL702ZC: в поисках неочевидного

01 Окт 2017

Asus ROG Strix GL702ZC: в поисках неочевидного

В условиях, когда x86-совместимые процессоры не только конкурируют меж­ду собой, но и должны отстаивать свое право на существование, не­боль­шая и неочевидная архитектурная особенность CPU может стать ре­ша­ю­щим фактором. Поиск таких неочевидных, но важных новаций дав­но стал для средств массовой информации чем-то вроде азартной охоты. И, как это бывает, мы узнаем о них не из пресс-релизов, а зна­ко­мясь с новыми про­дук­тами. Так произошло и с ноутбуком ASUS ROG Strix GL702ZC, оснащенном процессором AMD Ryzen 7 1700. Речь идет о механизме уп­рав­ле­ния содержимым кэш-па­мя­ти, спо­соб­ным оптимизировать ее вза­и­мо­дей­ствие с оперативным запоминающим устройством (ОЗУ).

Идентификация

Формализуем методы идентификации исследуемого оборудования. Параметру PROCESSOR_IDENTIFIER в рапорте утилиты AIDA64 соответствует значение AMD64 Family 23 Model 1 Stepping 1, AuthenticAMD. Прикладная утилита Java CPUID v0.47, раз­ра­бо­тан­ная в нашей тестовой лаборатории, дает следующий результат:

Имя процессора, доступное как текстовая строка посредством функций CPUID 80000002h-80000004h
Рис 1. Имя процессора, доступное как текстовая строка посредством функций CPUID 80000002h-80000004h

Примечание. В этом и последующих скрин-шотах утилиты Java CPUID, двоичный файл CPUID.BIN, сохраненный на исследуемой платформе, анализируется на инструментальной платформе.

Параметры процессора: Family 17h, Model 01h
Рис 2. Параметры процессора: Family 17h, Model 01h

Отметим, в рапорте AIDA64 код модели процессора записан в десятичной системе (23), а утилита Java CPUID ви­зу­а­ли­зи­ро­ва­ла его как шестнадцатеричное число (17h), как того и требует Advanced Micro Devices.

Список новых инструкций, поддержка которых реализована в AMD CPU семейства 17h
Рис 3. Список новых инструкций, поддержка которых реализована в AMD CPU семейства 17h.
Фрагмент
документа Software Optimization Guide for AMD Family 17h Processors.

Набор поддерживаемых технологий, декларируемый процессором в сеансе операционной системы, может быть сокращен по сравнению с приведенным списком (Рис 3), поскольку зависит как от конкретной мо­ди­фи­ка­ции про­цес­со­ра, так и особенностей инициализации, выполняемой UEFI-процедурами при старте платформы, включая за­ви­си­мость от установок опций CMOS Setup. Это означает, что наряду с изучением документации, потребуется экс­пе­ри­мент.

Акцентируем внимание на доступности документов, специально предназначенных для работы с процессорами рас­сма­три­ва­е­мого семейства. Системным программистам, в частности разработчикам UEFI-приложений и драй­ве­ров, адресован Processor Programming Reference (PPR). Разработчикам прикладного ПО, будет полезно руководство Software Optimization Guide (SOG).

Инструкция CLZERO

Описание всех добавленных функциональных расширений (Рис 3) выходит за рамки статьи. Остановимся на одной из новых инструкций: CLZERO. Мнемоника может быть расшифрована как Cache Line Zero и означает обнуление содержимого заданной кэш-строки, идентифицируемой адресом кэшированной области памяти, передаваемым в регистре RAX (в 64-битном режиме) или EAX (в 32-битном). При типовом размере кэш-строки, равном 64 байта, младшие адресные биты 0-5 не используются в силу гранулярности задания диапазона.

Описание инструкции CLZERO в документе AMD64 Architecture Programmers Reference Manual, Volume 3
Рис 4. Описание инструкции CLZERO в документе AMD64 Architecture Programmers Reference Manual, Volume 3

Во избежание недоразумений, отметим, новая инструкция CLZERO и ранее существующая инструкция CLFLUSH выполняют принципиально различные операции. В первом случае обнуляется содержимое строки (кэшированные данные), а во втором — строка объявляется недостоверной.

Детектирование функциональных расширений

В документации AMD приводится систематизирующая таблица, описывающая методы детектирования опциональных расширений архитектуры.

Фрагмент систематизирующей таблицы из документа AMD64 Architecture Programmers Reference Manual, Volume 3
Рис 5. Фрагмент систематизирующей таблицы из документа AMD64 Architecture Programmers Reference Manual, Volume 3

Наличие инструкции CLZERO индицируется битом [0] регистра EBX после выполнения функции 80000008h инструкции CPUID.

Результат детектирования инструкции CLZERO
Рис 6. Результат детектирования инструкции CLZERO

Примечание. Количество ядер, равное 16, здесь указано как архитектурный лимит и в общем случае может не соответствовать конфигурации конкретной модели процессора.

Содержимое EBX равно 00000007h, что означает наличие «единиц» в трех младших двоичных разрядах, в том числе бите [0]. Вывод: инструкция CLZERO поддерживается платформой.

В каких случаях это актуально?

Использование инструкции CLZERO создает механизм быстрого обнуления массивов, основанный на обнулении кэ­шированной копии области DRAM с последующим ее вытеснением из кэш. Также важно, что располагая ин­фор­ма­ци­ей о том, что 64-байтную область памяти предписано обнулить, процессор может избежать операций пе­ре­сыл­ки между Cache и DRAM, имеющих место при частичной перезаписи строки.

В каких ситуациях это востребовано?

При выделении памяти пользовательским программам, современные ОС практически всегда должны очищать вы­де­ля­е­мый блок. Иной вариант небезопасен, поскольку данные, оставшиеся после приложения, ранее ис­поль­зо­вав­ше­го память и освободившего ее, станут доступны другим приложениям. Следовательно, от скорости об­ну­ле­ния, в некоторой мере зависит производительность функций ОС API.

Заметим, что пример с инициализацией ОЗУ процедурами POST при старте платформы, был бы не совсем кор­рек­тен в данном контексте, поскольку в этом случае могут быть использованы более производительные спе­ци­аль­ные ап­па­рат­ные средства DRAM-контроллера.

Теги: