Как обойти функцию Matlab 'Cripple AMD', восстановить полную производительность для Ryzen, Threadripper CPU

Как обойти функцию Matlab 'Cripple AMD', восстановить полную производительность для Ryzen, Threadripper CPU

Одна из трудностей, связанных с обзорами ЦП, заключается в том, что они представляют собой наилучшее время для оценки новых функций и программного обеспечения, и в то же время представляют собой наихудшее возможное время для попыток глубокого погружения в какую-либо конкретную часть программного обеспечения. Иногда рецензенты принимают тесты, потому что поставщик рекомендовал их, не задумываясь о том, будет ли тест работать идентично в системе Intel и AMD. Иногда поставщик не раскрывает информацию о том, что приложение скомпилировано так, что тесты будут выполняться намного быстрее на одной платформе, а не на другой. Это как-раз тот случай.

Когда я опубликовал данные Matlab в нашем совместном обзоре Threadripper 3970X / Cascade Lake X, это было потому, что Intel рекомендовала этот тест и рабочую нагрузку в качестве демонстрации для линейки настольных ПК Intel HEDT. Я специально попросил рекомендации, надеясь, что Intel будет иметь в виду некоторые приложения, которые будут демонстрировать относительно небольшое масштабирование на уровне 18 ядер или выше с интеграцией AVX-512. Даже профессиональные приложения не всегда идеально масштабируются, и я знал, что в этом обзоре у Intel будет «островок» производительности, на котором она будет стоять на пересечении более высоких тактовых частот и приложений с небольшим количеством потоков. «Слегка» в данном контексте следует понимать как «приложения, которые не масштабируются до 64 потоков», а не «приложения, которые не масштабируются за 4–8 потоков», что обычно имеет в виду когда мы называем приложение легким потоком. Было очевидно, что Threadripper 3960X и 3970X превзойдут 10980XE в каждом приложении, которое может масштабироваться в соответствии с их количеством потоков, особенно в случае 3970X. Учитывая все вышесказанное, стоило изучить области, которые исторически были самыми сильными для Intel, чтобы увидеть, как будет сравниваться производительность.

Для этого обзора Intel рекомендовала четыре рабочих нагрузки: AIXPRT, Adobe Premiere Pro, Matlab и Sony Catalyst. Мне хотелось потратить больше времени на оценку AIXPRT, прежде чем я начал запускать его в системах, что делало его менее привлекательным. Теперь Adobe требует, чтобы вы предоставили им кредитную карту, чтобы запустить 7-дневную бесплатную пробную версию их программного обеспечения, так что это правильно. Я решил протестировать Matlab и Sony Catalyst. Мне не было известно об этом расследовании и сообщении реддитора Недфландерса 1976 года, сделанном около восьми дней назад.

Он пишет:

Matlab очень медленно работает на процессорах AMD для операций, в которых используется библиотека Intel Math Kernel Library (MKL). Это связано с тем, что Intel MKL использует различительный диспетчер ЦП, который не использует эффективный путь кода в соответствии с поддержкой SIMD ЦП, но основан на результате запроса строки поставщика. Если процессор от AMD, MKL не использует расширения SSE3-SSE4 или AVX1 / 2, но использует SSE1 независимо от того, поддерживает ли процессор AMD более эффективные расширения SIMD, такие как AVX2, или нет.

Есть способ отключить это поведение в Matlab. Фландрия пишет. Если вы пользователь Windows с установленным Matlab, создайте командный файл со следующими данными:

@echo offset MKL_DEBUG_CPU_TYPE = 5matlab.exe

Запустите приложение, используя этот командный файл. Вы можете сделать это постоянным, введя: «MKL_DEBUG_CPU_TYPE = 5» в переменные системной среды. В Nedflanders1976 также есть подробности о том, как выполнить эту задачу для Linux. Мы поиграли с тестированием некоторых вариантов вариантов, в том числе установкой «MKL_DYNAMIC = FALSE» и «MKL_NUM_THREADS = 64», чтобы увидеть, улучшат ли эти настройки производительность. Они не. Наилучшая производительность была достигнута с использованием настроек выше.

Обновленные результаты Matlab

Я обновил результаты Matlab новыми данными, показывающими влияние запуска приложения в этом режиме. Я показываю общее суммарное время для всей рабочей нагрузки в нижней части каждого набора результатов. Верхние результаты показывают производительность наших трех сравниваемых ЦП без каких-либо изменений, нижняя диаграмма показывает влияние с флагом «set MKL_Debug_CPU_Type = 5». Это может работать для других приложений, которые также используют библиотеку MKL. Следует отметить, что во многих случаях загрузка ЦП во время этого теста составляет всего ~ 53-55 процентов, что соответствует 17-18 потокам процессора. В этом случае, однако, эти параметры оказались быстрее, чем заставляя MKL использовать большее количество потоков. Указание машине использовать 48 или 64 потока только увеличило общее время выполнения на 3970X.

нажмите, чтобы увеличить
нажмите, чтобы увеличить

Производительность AMD улучшается в 1,32 раза - 1,37 раза. Индивидуальные результаты теста иногда намного больше. Очевидно, что эти результаты намного хуже для Intel, превратив то, что выглядело как узкая победа над 3960X и хороший результат против 3970X, в тотальную потерю.

Когда можно тестировать такого рода приложения?

Я не знал о поведении Матлаба, когда согласился провести тестирование приложения для запуска Threadripper 3960X / 3970X / Cascade Lake, но сейчас отличное время для обсуждения этой темы. Дело в том, что Matlab поставляется в конфигурации, которая автоматически настроена против AMD: он отказывается запускать код SIMD на процессоре AMD, даже если процессор поддерживает соответствующий код SIMD.

Нет ничего плохого в том, чтобы сравнить реальное приложение. Производительность реального приложения, которое вы должны использовать, вполне может зависеть от выбора оборудования, которое вы делаете. Если ваша работа зависит от выполнения рабочих нагрузок в приложении, которое сильно благоприятствует микропроцессорам Intel, вы, скорее всего, купите процессоры Intel, даже если вы предпочитаете покупать чипы на основе ARM или AMD. Люди заслуживают того, чтобы знать, как программное обеспечение, которое они запускают, фактически работает на оборудовании, которое они используют, и Matlab является основным программным обеспечением, используемым более чем 3 миллионами человек. Тот факт, что Matlab предпочитает процессоры Intel, не означает, что пользователи Matlab не заслуживают знать, как работает приложение. Конечно они делают.

Фландрия просит вас связаться с Matlab, чтобы сделать запрос на добавление функциональности, если вы хотите решить эту проблему, но вам уже нужно быть подписчиком Matlab, чтобы что-то отправлять. Независимо от того, меняет ли компания свой подход, мы считаем, что конечные пользователи должны знать, как обойти эту проблему и восстановить полную производительность процессоров AMD.

Я мог бы включить тест Matlab, даже если Intel раскрыл, что он будет использовать специфические для Intel пути оптимизации; Я искал тесты, которые позволят Intel сравнивать с гораздо более высоким числом ядер AMD. Я не собирался позиционировать эти тесты как нечто иное, чем они были - лучшие сценарии для Intel, но, тем не менее, реалистичные сценарии. Я протестировал y-cruncher 0.78 для этого обзора специально, потому что это пример оптимизированного приложения AVX-512, где этот набор SIMD дает Intel значительный прирост скорости. У меня нет проблем с демонстрацией процессоров Intel или AMD для их наилучшего преимущества. Я просто хочу знать, когда я это делаю.

Читатели спросят, почему я не прыгнул в горло Intel, основываясь на исторических фактах проблемы компиляции «Cripple AMD». Позвольте мне заверить вас, я полностью осознаю их. Факты этой ситуации объясняются тем, что Intel следовало быть осторожным с тем, какие тесты были рекомендованы и что они сообщали об этих тестах. Но у меня также нет копий каждого руководства Intel по последним циклам запуска HEDT, и я не могу сказать, что тест был добавлен для этого цикла, а не как программа, которую Intel также рекомендовал бы в предыдущих циклах. , Даже если Matlab не упоминался в предыдущих общедоступных руководствах по тестированию более ранних процессоров, я специально обратился к Intel с просьбой предоставить данные о тестах, которые могут включать такие возможности, как AVX-512. Корпорация Intel должна иметь практику, чтобы рецензенты знали об этих подводных камнях, но я не могу с уверенностью сказать, что это не было ошибкой.

С этим сказал:

Читатели должны знать, что я также сканировал Sony Catalyst, используя патчи Swallowtail, способные удалить функцию «Cripple AMD» из исполняемых файлов, и не обнаружил никаких признаков смещения про-Intel после их выполнения; Threadripper 3970X выполнял рабочую нагрузку Sony Catalyst в тот же период времени после запуска приложения. На данный момент, однако, патчам Махаона 10 лет. Несмотря на то, что я подтвердил, что они работают на старом программном обеспечении, неясно, способны ли они определять методы, которые все еще используются, для предотвращения оптимального выполнения кода на процессорах AMD. Я больше не уверен, представляет ли Sony Catalyst Edit тип легкопоточного приложения, которое я надеялся протестировать для обзора 10980XE, или использует ли пока еще необнаруженные пути преференциального кода для повышения производительности процессоров Intel. По крайней мере, я не так уверен, как хотелось бы.

Я скажу еще одну вещь по этому вопросу. Что касается меня лично, то любое программное обеспечение, которое заявляет о поддержке AVX, AVX2, SSE или любого другого кода SIMD, должно четко указывать, выполняется ли этот код исключительно на поддерживаемых микропроцессорах Intel. Неспособность информировать клиентов о том, что ваше программное обеспечение не будет выполнять идеальный код на их платформе из-за жестко заданных ограничений в вашем приложении, должна представлять собой ложную рекламу. AMD рекламирует свои процессоры на основе таких факторов, как поддержка AVX2, но поставщики программного обеспечения не обязаны сообщать вам, сможете ли вы использовать функции, за которые вы буквально заплатили. Такого не должно быть. Разработчики программного обеспечения стоимостью в несколько миллионов долларов способны провести комплексную юридическую проверку, необходимую для того, чтобы быть честными в своей практике оптимизации.

Читать далее

Как обойти функцию Matlab 'Cripple AMD CPU'
Как обойти функцию Matlab 'Cripple AMD CPU'

Если вы запускаете Matlab на процессоре AMD, вы не получаете всю производительность, на которую имеете право. Matlab отказывается выполнять определенный код на процессорах AMD, даже если эти процессоры поддерживают данный код. Вот как это исправить.