
Что лучше: Intel или AMD? Этому наивному вопросу примерно столько же лет, сколько и PC платформе. Попытка решить такой спор, сформулировав истину в последней инстанции, обречена на провал. Попробуем все же оценить производительность процессоров за чашечкой кофе для некоторого частного случая, немного приоткрыв завесу над таинством бенчмаркинга. Поможет нам в этом Java. Она возьмет на себя задачу математического расчета, а мы посмотрим, чем закончится встреча друзей-соперников.
Немного философии
Достоинство низкоуровневых синтетических тестов – их способность отобразить результат в виде стандартной физической величины (например, скорость чтения кэш-памяти L1-уровня лучше всего оценивать в гигабайтах в секунду). Как правило, такие тесты оптимизируются для различных процессоров, поскольку выбор оптимального метода выполнения может зависеть от платформы. Очевидно, для специалистов по аппаратному обеспечению и системному программированию такая форма бенчмарков является наиболее информативной.
Пользователя в свою очередь интересует скорость решения его задач: например, уровень FPS в игре или время поиска записи в базе данных. Код операционной системы и приложений, от которого зависит выполнение полезной работы, не похож на монотонные «хрестоматийные» операции. Унылыми вариантами повторяющихся чтения или записи блоков памяти мало кого убедишь. Очевидно, при сравнении двух платформ лидер и величина его преимущества, могут зависеть от сценария тестирования, а потому выбор такого сценария является ответственным шагом, зависящим от поставленной задачи: получение низкоуровневых метрик платформы или прогнозирование быстродействия при решении определенных пользовательских задач.
Сценарий теста и конфигурация стенда
Исследовалась производительность при выполнении математических операций в Java-среде. Консольное приложение создает массив из 5 млн чисел двойной точности. Процедура, время выполнения которой оценивается, использует этот массив как массив аргументов, последовательно считывает элементы, вычисляет значение синуса и сохраняет в массив результатов.
Платформа 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 ГГц.
На обе платформы установлена оперативная память Kingston HyperX HX434C19FBK2 в двухканальном режиме на основе двух модулей, объем каждого из которых составляет 16 ГБ. Они выполненных по технологии DDR4 при двухрэнковой организации.
Несмотря на то, что модули 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 на плате 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
Платформа AMD под Windows: время вычисления функции одним потоком составляет 14743.955 мс, в многопоточном режиме — 2096.493 мс, рейтинг параллелизма 7.076
Платформа Intel под Ubuntu: время вычисления функции одним потоком составляет 16712.624 мс, в многопоточном режиме — 3889.369 мс, рейтинг параллелизма 4.294
Платформа AMD под Ubuntu: время вычисления функции одним потоком составляет 20492.715 мс, в многопоточном режиме — 3264.572 мс, рейтинг параллелизма 6.310
Сведем воедино данные по времени выполнения 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 весьма сложным и спекулятивным процессом, а значит – при трактовке результатов необходима особая аккуратность.
Продолжение следует…