Очередной эль-классико Intel–AMD: судит Java

10 мая 2018

Очередной эль-классико Intel–AMD: судит Java

Что лучше: Intel или AMD? Этому на­ив­но­му воп­ро­су при­мер­но столь­ко же лет, сколь­ко и PC плат­фор­ме. По­пыт­ка ре­шить такой спор, сфор­му­ли­ро­вав ис­ти­ну в по­след­ней ин­стан­ции, об­ре­че­на на про­вал. По­про­бу­ем все же оце­нить про­из­во­ди­тель­ность про­цес­со­ров за чашечкой кофе для не­ко­то­ро­го част­ного слу­чая, не­мно­го при­от­крыв за­ве­су над та­ин­ством бенч­мар­кин­га. Поможет нам в этом Java. Она возь­мет на себя задачу ма­те­ма­ти­че­ско­го расчета, а мы посмотрим, чем за­кон­чит­ся встреча дру­зей-соперников.

Немного философии

Достоинство низкоуровневых синтетических тестов – их способность отобразить результат в виде стандартной физической величины (например, скорость чтения кэш-памяти L1-уровня лучше всего оценивать в гигабайтах в секунду). Как правило, такие тесты оптимизируются для различных процессоров, поскольку выбор оптимального метода выполнения может зависеть от платформы. Очевидно, для специалистов по аппаратному обеспечению и системному программированию такая форма бенчмарков является наиболее информативной.

Пользователя в свою очередь интересует скорость решения его задач: например, уровень FPS в игре или время поиска записи в базе данных. Код операционной системы и приложений, от которого зависит выполнение по­лез­ной работы, не похож на монотонные «хрестоматийные» операции. Унылыми вариантами повторяющихся чте­ния или записи блоков памяти мало кого убедишь. Очевидно, при сравнении двух платформ лидер и величина его преимущества, могут зависеть от сценария тестирования, а потому выбор такого сценария является от­вет­ствен­ным шагом, зависящим от поставленной задачи: получение низкоуровневых метрик платформы или про­гно­зи­ро­ва­ние быстродействия при решении определенных пользовательских задач.

Сценарий теста и конфигурация стенда

Исследовалась производительность при выполнении математических операций в Java-среде. Консольное при­ло­же­ние создает массив из 5 млн чисел двойной точности. Процедура, время выполнения которой оценивается, ис­поль­зу­ет этот массив как массив аргументов, последовательно считывает элементы, вычисляет значение синуса и со­хра­ня­ет в массив результатов.

Платформа Intel представлена системной платой ASUS Prime B360-Plus с процессором Intel Core i5-8400 CPU, шта­т­ная ра­бо­чая частота которого составляет 2,80 ГГц.

Платформа Intel представлена системной платой ASUS Prime B360-Plus с процессором Intel Core i5-8400 CPU, штатная рабочая частота которого составляет 2,80 ГГц

Платформа AMD представлена системной платой MSI X370 XPower Gaming Titanium с процессором AMD Ryzen 5 1600 Six-Core Processor со штатной частотой в 3,20 ГГц.

Платформа AMD представлена системной платой MSI X370 XPower Gaming Titanium с процессором AMD Ryzen 5 1600 Six-Core Processor со штатной частотой в 3,20 ГГц

На обе платформы установлена оперативная память Kingston HyperX HX434C19FBK2 в двухканальном ре­жи­ме на ос­но­ве двух модулей, объем каждого из которых составляет 16 ГБ. Они выполненных по технологии DDR4 при двух­рэн­ко­вой организации.

В тесте в двухканальном режиме используется оперативная память Kingston HyperX HX434C19FBK2

Несмотря на то, что модули HX434C19FBK2 способны на большее, в обеспечение равных условий и на платформе ASUS Prime B360-Plus, и на MSI X370 XPower Gaming Titanium заданы одинаковые частоты тактирования памяти – 2667 МГц. В установках UEFI BIOS Setup можно ознакомиться с параметрами DIMM-модулей Kingston HyperX.

Характеристики модулей памяти DDR4 HyperX-KHX3466C19D4 на плате ASUS Prime B360-Plus
Характеристики модулей памяти DDR4 HyperX-KHX3466C19D4 на плате ASUS Prime B360-Plus

Характеристики модулей памяти DDR4 HyperX-KHX3466C19D4 на плате MSI X370 Power Gaming Titanium
Характеристики модулей памяти DDR4 HyperX-KHX3466C19D4 на плате MSI X370 Power Gaming Titanium

По данным SPD их номенклатурный номер несколько отличается от маркетингового: KHX3466C19D4/16G. Скорее всего, данные сформированы из максимально допустимой частоты памяти 3466 МГц и тайминга CL (CAS Latency), равного для данной модели 19.

Результаты

Тест создан на основе класса FutureTask, позволяющего декларировать задания с возможностью параллелизма при асинхронном выполнении. Автор не позиционирует предлагаемый Java-код, как наиболее производительный метод решения данной вычислительной задачи. Целью является сравнение быстродействия исследуемых плат­форм на некотором «среднестатистическом» коде.

Кросс-платформенное Java-приложение было запущено под ОС Windows и Ubuntu. Акцентируем внимание на ме­ди­ан­ных значениях, как наиболее информативных.

Платформа Intel под Windows: время вычисления функции одним потоком составляет 12606.686 мс, в многопоточном режиме — 2327.033 мс, рейтинг параллелизма 5.436
Платформа Intel под Windows: время вычисления функции одним потоком составляет 12606.686 мс, в многопоточном режиме — 2327.033 мс, рейтинг параллелизма 5.436

Платформа AMD под Windows: время вычисления функции одним потоком составляет 14743.955 мс, в многопоточном режиме — 2096.493 мс, рейтинг параллелизма 7.076
Платформа AMD под Windows: время вычисления функции одним потоком составляет 14743.955 мс, в многопоточном режиме — 2096.493 мс, рейтинг параллелизма 7.076

Платформа Intel под Ubuntu: время вычисления функции одним потоком составляет 16712.624 мс, в многопоточном режиме — 3889.369 мс, рейтинг параллелизма 4.294
Платформа Intel под Ubuntu: время вычисления функции одним потоком составляет 16712.624 мс, в многопоточном режиме — 3889.369 мс, рейтинг параллелизма 4.294

Платформа AMD под Ubuntu: время вычисления функции одним потоком составляет 20492.715 мс, в многопоточном режиме — 3264.572 мс, рейтинг параллелизма 6.310
Платформа AMD под Ubuntu: время вычисления функции одним потоком составляет 20492.715 мс, в многопоточном режиме — 3264.572 мс, рейтинг параллелизма 6.310

Сведем воедино данные по времени выполнения Java-теста, снятые на различных платформах, в диаграмму.

Сводная таблица тестирования платформ Intel и AMD с помощью программного обеспечения, написанного на Java

Операция выполняется в один поток (single-thread), а также с использованием многопоточной обработки (multi-thread). Величина ratio отражает масштабируемость, а точнее – соотношение времени выполнения для одно­по­точ­но­го и многопоточного вариантов. Важным фактором является одновременный запуск на вы­пол­не­ние такого ко­ли­че­ства потоков, которое кратно превышает количество процессорных ядер. Это означает, что пла­ни­ро­ва­ние об­ра­бот­ки делегируется виртуальной Java-машине. В качестве результата отображается время вы­пол­не­ния, поэтому меньшее значение соответствует лучшему результату.

Рейтинг параллелизма в процессе выполнения теста указывает уровень масштабируемости

Для величины ratio, отражающей рейтинг параллелизма в процессе выполнения теста, напротив, большее зна­че­ние со­от­вет­ст­ву­ет лучшей масштабируемости.

Гипотезы

Как следует из результатов, в однопоточном режиме, характеризующем производительность одного ядра, пе­ре­вес на стороне Intel. С выполнением нескольких потоков быстрее справился процессор AMD. Здесь имеет зна­че­ние оп­ти­маль­ная координация взаимодействия компонентов мультипроцессорной платформы.

Несколько забегая вперед (низкоуровневые метрики станут темой отдельной статьи), заметим, что для двух срав­ни­ва­е­мых процессоров, чип AMD обладает кэш-памятью большего размера (L3=16MB против 9 у Intel). В то же вре­мя процессор от Intel прилично выигрывает по скорости доступа к кэш-памяти, в частности – L1. Не исключено, что это обстоятельство сыграло свою роль в перемене лидера в ситуации, когда работой полностью загружены все 6 ядер, и доступ к ОЗУ может стать фактором, сдерживающим производительность.

Кроме того, участвующий в тестировании процессор AMD Ryzen 5 1600, в отличие от оппонента, поддерживает тех­но­логию Hyper Threading, и установлен на системную плату, позиционируемую как оверклокерская.

Резюме

Вспомним, что современные Java-машины не только интерпретируют байт-код, но и способны выполнять его ди­на­ми­че­скую трансляцию в нативные инструкции, что делает функционирование JVM весьма сложным и спе­ку­ля­тив­ным процессом, а значит – при трактовке результатов необходима особая аккуратность.

Продолжение сле­ду­ет…

Теги: