AMD Phenom и MATLAB R2007b:

исследуем особенности взаимодействия с точки зрения производительности

Ещё при самом первом тестировании AMD Phenom X4 9850 по обновлённой версии методики (в которой обновилась в том числе версия пакета MathWorks MATLAB), мы обратили внимание на совершенно необъяснимую, с точки зрения логики и здравого смысла, странность: результаты Phenom X4 9850 в одном из подтестов встроенного бенчмарка MATLAB, оказывались в разы хуже, чем у Phenom X3 8750, имеющего не только на одно ядро меньше, но и работающего на более низкой частоте. В принципе, можно было бы просто проигнорировать этот факт — в конце концов, мы не являемся разработчиками ни MATLAB ни Phenom, поэтому всё, что мы можем — это произвести тестирование производительности и опубликовать полученные результаты… однако подспудное ощущение незавершённости данной ситуации всё равно бередило душу каждый раз при взгляде на результаты тестирования очередного AMD Phenom.

Один из возможных методов решения проблемы подсказал наш читатель с ником sergiojr. По его мнению, в случае с Phenom MATLAB неправильно определял тип процессора, и не подключал соответствующую оптимизированную библиотеку (в случае с процессорами Intel она называется Intel Math Kernel Library, в случае с процессорами AMD — AMD Core Math Library). Предположение оказалось неверным, однако навело на другую интересную мысль: а что будет, если попытаться принудительно заставить MATLAB использовать с AMD Phenom библиотеку, предназначенную для процессоров Intel? Изменив вручную соответствующим образом* содержимое файла blas.spec, мы запустили MATLAB… и он, что самое главное — запустился. Пробный запуск встроенного бенчмарка также завершился успешно, и мы, окрылённые таким беспроблемным началом, приступили к тестам. Их результаты оказались настолько интересными, что мы посчитали их достойными отдельной статьи.

* — Содержимое оригинального BLAS.SPEC выглядит примерно так:
GenuineIntel Family * Model * mkl.dll mklcompat.dll # Intel processors
AuthenticAMD Family * Model * acml.dll # AMD processors

Заменить нужно всего лишь название DLL, вот таким образом:
GenuineIntel Family * Model * mkl.dll mklcompat.dll # Intel processors
AuthenticAMD Family * Model * mkl.dll mklcompat.dll # AMD processors
Тестирование

Хотелось бы обратить внимание читателей на то, что в данном материале мы используем результаты встроенного бенчмарка MATLAB в их первозданном, «сыром» виде, поэтому не удивляйтесь, что большинство чисел на диаграммах меньше единицы, а наилучшим показателем является не больший, а наоборот — меньший результат.

Также хотелось бы отдельно прокомментировать различия между диаграммами и графиками. С диаграммами всё просто: на них приведены результаты тестирования производительности процессоров AMD Phenom X3 8750 и Phenom X4 9850, работающих в паре с библиотеками AMD CML и Intel MKL в штатном режиме. Графики представляют несколько иной взгляд: воспользовавшись тем, что Phenom позволяют отключать любое количество ядер, мы последовательно протестировали Phenom X3 с одним ядром, двумя и тремя, а Phenom X4 — с одним, двумя, тремя и четырьмя. Таким образом, на графиках вы можете наблюдать эволюцию производительности в каждом подтесте в зависимости от количества включенных ядер. И, забегая вперёд — там есть на что посмотреть!

LU-декомпозиция матрицы (LU)



Первый тест — и первый шок. Переход на Intel MKL ускоряет все без исключения вариации Phenom — как трёхъядерные, так и четырёхъядерные. Ускорение колеблется от 38% для Phenom X4 до 30% для Phenom X3, то есть даже в худшем случае — почти на треть.

На графике четырёхъядерный и трёхъядерный Phenom ведут себя совершенно одинаково, тенденция к увеличению производительности при увеличении количества ядер прослеживается достаточно чётко вплоть до 4 ядер, однако наибольший эффект всё-таки даёт переход с 1 ядра на 2, в дальнейшем темпы прироста снижаются. Что забавно: у библиотеки ACML темпы прироста при увеличении количества ядер оказались даже выше, чем у Intel MKL — это притом, что абсолютная производительность с любым количеством ядер у ACML стабильно ниже.

Векторное быстрое преобразование Фурье (FFT)



А с быстрым преобразованием Фурье родная библиотека AMD в комбинации со «своими» процессорами работает весьма успешно, и переход на Intel MKL даже чуть-чуть ухудшает их результаты. Но самое интересное творится на графике…

Во-первых, легко заметить, что даже с одной и той же библиотекой ACML трёхъядерный и четырёхъядерный Phenom при одинаковом количестве работающих ядер ведут себя совершенно по-разному! Так, Phenom X4 при последовательном наращивании количества работающих ядер с 1 по 3, стабильно наращивает быстродействие (хоть и понемногу), и лишь при включении 4-го ядра относительно резко его снижает. В то же время Phenom X3 снижает быстродействие при переходе от 1 ядра к двум, а потом повышает при переходе от 2 ядер к 3-м. Библиотека MKL ведёт себя менее странно, но снижение скорости при включении 4-го ядра наблюдается и у неё.

Решение уравнения Ван дер Поля методом ODE45 (ODE)



«Чем дальше, тем страньше» — так и хочется сказать при взгляде на эту чудесную диаграмму. В случае четырёхъядерного Phenom, переход с родной ACML на Intel MKL улучшает результат примерно на 38%, в то время как на трёхъядерном Phenom та же операция приводит к ухудшению результата на 11%! Можно, конечно, как-то притянуть за уши рассуждения о том, что у Intel нет многоядерных процессоров с нечётным количеством ядер, и поэтому Intel MKL вовсе не обязана хорошо с ними работать… но нам они не кажутся серьёзными.

Сравнение ACML с MKL на разном количестве ядер демонстрирует уже наблюдавшуюся ранее картину: MKL более-менее спокойно «переживает» включение четвёртого ядра у Phenom X4, а вот ACML при этой ситуации достаточно резко снижает производительность вычислений.

Решение симметричной разреженной системы линейных уравнений (Sparse)



Мы дошли до самого «разгромного» для Phenom X4 теста. Легко заметить два факта:

1) С родной библиотекой ACML, быстродействие четырёхъядерного Phenom, работающего на частоте 2,5 ГГц, оказывается в 4 раза ниже (!!!) чем у трёхъядерного Phenom, работающего на частоте 2,4 ГГц.

2) Переход с ACML на Intel MKL, увеличивает скорость исполнения данного теста на четырёхъядерном Phenom в 3,7 раза.

Менее заметен на фоне двух вышеперечисленных третий факт: даже после перехода на использование «неродной» библиотеки, Phenom X4 9850 всё равно оказывается медленнее Phenom X3 8750. То есть Intel MKL в некотором роде загоняет проблему Phenom X4 вглубь — но отнюдь не решает её.

График лишь подтверждает вышесказанное: уже в третий раз мы наблюдаем проблему снижения производительности библиотеки ACML при переходе от трех ядер к четырем, просто именно на тесте Sparse данный эффект проявился особенно резко.

Графическое отображение аппроксимирующих полиномов
в форме Берштейна (2D)



Эффект от перехода на Intel MKL практически отсутствует в обоих случаях. График демонстрирует совсем уж странное: и на библиотеке AMD CML, и на Intel MKL, наблюдается одна и та же тенденция: резкое увеличение производительности при переходе от 1 ядра к 2-м — и плавное падение производительности при дальнейшем наращивании количества ядер.

Отображение процесса моделирования гибкой мембраны (3D)



Разница в производительности между ACML и Intel MKL при работе процессоров в штатном режиме (со всеми имеющимися ядрами) практически отсутствует, а на графике опять творится что-то странное. Во-первых, опять по-разному себя ведут Phenom X3 и Phenom X4 при задействовании одинакового количества ядер: Phenom X3 при переходе от 1 ядра к 2-м почти не снижает производительность (на обеих библиотеках), а Phenom X4 при таком же переходе сбрасывает скорость вполне ощутимо. Во-вторых, независимо от библиотеки и процессора, самыми производительными оказались одноядерные конфигурации.Заключение



На диаграмме и графике используются значения среднего геометрического всех подтестов. Нетрудно заметить два момента: во-первых, использование Intel MKL благотворно влияет не только на четырёхъядерный Phenom, но и на трёхъядерный тоже. В гораздо меньшей степени, конечно, но, тем не менее, прибавку быстродействия в 7% совсем уж несущественной не назовёшь. Во-вторых, использование Intel MKL вместо ACML на четырёхъядерном Phenom даёт общую прибавку быстродействия почти на 40% (!), что позволяет предположить наличие в поставляемой с MATLAB библиотеке ACML весьма существенной несовместимости с процессорами AMD нового поколения.

Также хотелось бы отметить странное поведение не только AMD CML, но и Intel MKL при включении 4-го ядра на Phenom X4 в тесте FFT (быстрое преобразование Фурье). Странностям ACML в комбинации с Phenom мы уже, прямо скажем, к концу статьи подустали удивляться, а проявление аналогичной реакции на 4-е ядро Phenom у библиотеки Intel — честно говоря, настораживает. Впрочем, не имея на руках исходников библиотек, строить какие-то предположения о том, что там происходит «внутри», было бы слишком самонадеянно…

P.S. Поначалу напрашивается мысль о внесении соответствующих изменений в методику тестирования… однако как раз этого делать ни в коем случае не следует. Те, кто прочитал данный материал, разумеется, могут использовать подстановку Intel MKL вместо AMD CML, что называется, на свой страх и риск (заметьте — ничего кроме скорости мы не проверяли!) Однако в открытую рекомендовать использование программного продукта одного конкурента в комбинации с процессором другого — это, извините, не наша область компетенции. Да и с честностью конкуренции двух производителей между собой в случае использования подобной комбинации, возникают, мягко говоря, неясности. Оптимальным вариантом был бы выпуск обновлённой ACML.DLL, в которой были бы устранены все выявленные нами «странности». К сожалению, последняя версия, которую нам удалось обнаружить на сайте AMD (4.1.0), с MATLAB работает некорректно: при запуске встроенного бенчмарка, MATLAB завершает своё исполнение с сообщением об ошибке.


Модули памяти для тестовых стендов предоставлены Corsair Memory



12 сентября 2008 Г.

AMD Phenom MATLAB R2007b:

AMD Phenom MATLAB R2007b:

AMD Phenom X4 9850 ( MathWorks MATLAB), , , : Phenom X4 9850 MATLAB, , Phenom X3 8750, , . , — , MATLAB Phenom, , — … AMD Phenom.

sergiojr. , Phenom MATLAB , ( Intel Intel Math Kernel Library, AMD — AMD Core Math Library). , : , MATLAB AMD Phenom , Intel? * blas.spec, MATLAB… , — . , , , . , .

* — BLAS.SPEC :
GenuineIntel Family * Model * mkl.dll mklcompat.dll # Intel processors
AuthenticAMD Family * Model * acml.dll # AMD processors

DLL, :
GenuineIntel Family * Model * mkl.dll mklcompat.dll # Intel processors
AuthenticAMD Family * Model * mkl.dll mklcompat.dll # AMD processors

, MATLAB , «» , , , , — .

. : AMD Phenom X3 8750 Phenom X4 9850, AMD CML Intel MKL . : , Phenom , Phenom X3 , , Phenom X4 — , , . , . , — !

LU- (LU)



— . Intel MKL Phenom — , . 38% Phenom X4 30% Phenom X3, — .

Phenom , 4 , - 1 2, . : ACML , Intel MKL — , ACML .

(FFT)



AMD «» , Intel MKL - . …

-, , ACML Phenom -! , Phenom X4 1 3, ( ), 4- . Phenom X3 1 , 2 3-. MKL , 4- .

ODE45 (ODE)



« , » — . Phenom, ACML Intel MKL 38%, Phenom 11%! , , - , Intel , Intel MKL … .

ACML MKL : MKL - «» Phenom X4, ACML .

(Sparse)



«» Phenom X4 . :

1) ACML, Phenom, 2,5 , 4 (!!!) Phenom, 2,4 .

2) ACML Intel MKL, Phenom 3,7 .

: «» , Phenom X4 9850 Phenom X3 8750. Intel MKL Phenom X4 — .

: ACML , Sparse .


(2D)



Intel MKL . : AMD CML, Intel MKL, : 1 2- — .

(3D)



ACML Intel MKL ( ) , - . -, - Phenom X3 Phenom X4 : Phenom X3 1 2- ( ), Phenom X4 . -, , .



. : -, Intel MKL Phenom, . , , , , 7% . -, Intel MKL ACML Phenom 40% (!), MATLAB ACML AMD .

AMD CML, Intel MKL 4- Phenom X4 FFT ( ). ACML Phenom , , , 4- Phenom Intel — , . , , - , «», …

P.S. … . , , , Intel MKL AMD CML, , ( — !) — , , . , , , . ACML.DLL, «». , , AMD (4.1.0), MATLAB : , MATLAB .