Pentium4 производства AMD, часть 4

OpenCL и Radeon 4000 серии

Принято считать, что архитектура новых Radeon 5XXX мало, непринципиально отличается от серии 4XXX. Кто-то даже говорит, что произошел просто «шринк», автоматический перенос архитектуры на более тонкий техпроцесс, и производительность удвоилась. Возможно, с точки зрения графики и компьютерных игр это и так, но с точки зрения OpenCL всё совсем иначе. Можно сразу сказать, 4000 серия не приспособлена для OpenCL и уже не будет приспособлена, владельцам этих карт не стоит надеяться всерьёз попользоваться GPU в неграфических целях. И покупать их для проведения расчетов на GPU тоже не имеет никакого смысла.

OpenCL, формально, поддерживается на этих GPU, но в режиме совместимости. Это похоже на программную эмуляцию графики на CPU. Дело в том, что хотя размер локальной памяти минипроцессоров, из которых состоит Radeon 4000, такой же, как у GT200 — 16 Кб, режим доступа отдельных нитей к локальной памяти не произвольный, в отличие от GeForce и Evergreen. Этот режим больше приспособлен для пиксельных шейдеров, чем для универсальных вычислений, и не соответствует спецификациям OpenCL. Таким образом, приходится эмулировать локальную память в глобальной памяти GPU, которая очень медленная, что убивает всю производительность. Также есть и другие небольшие пробелы: в соответствии спецификациям OpenCL, инструкции атомарной записи и синхронизации, которые используются в нетривиальных OpenCL-приложениях, не поддерживаются.

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

Поддержка операций с вещественными числами двойной точности

Как описано в предыдущей статье, поддержка вещественных чисел типа double стала камнем преткновения для GPU, а отсутствие этой поддержки — главным препятствием распространения использования GPU в научных расчетах. Новые Radeon Evergreen имели все шансы переломить ситуацию. Напомню, что один их вычислительный модуль, которых в минипроцессоре 16 штук, может производить за такт одну–две операции с double-числами, так как для одной double-операции используется несколько обычных функциональных устройств, работающих с числами типа float. В таком случае VLIW-инструкция состоит просто из одной или двух операций с числами double.

Это даже проще, не требуется никакой дополнительной векторизации, необходимой для получения полной float-производительности. И производительность в расчётах с вещественными числами двойной точности получается в 10–20 раз больше, чем у современного четырёхъядерного CPU. И это соотношение гораздо больше, чем у GeForce GT200, где поддержка double сделана, можно сказать, формально: его почти бессмысленно использовать для таких расчетов.

Но, кроме умножения и сложения, другие операции не поддерживаются! На аппаратном уровне, есть только приближенные функции вычисления квадратного корня и деления. И никаких экспонент, логарифмов, синусов и косинусов нет, не говоря уже о более сложных функциях. Все эти функции, и в том числе обыкновенное деление, надо эмулировать программно. Но AMD пока ещё не озаботилась об этом. «Умельцы» написали кустарные реализации базовых математических функций для Radeon, производительность и точность которых сравнима с CPU аналогами, но им ещё лишь предстоит «проверка боем».

Можно и самим написать. Пишите свою программу, где используется косинус и экспонента, вот и реализуйте их, вместе с другими функциями, с нужной вам точностью. И про деление не забудьте. Также, сам компилятор в данный момент имеет проблемы с использованием типа double.

Все эти проблемы должны быть разрешены в ближайших релизах SDK, но к тому времени успеет выйти Fermi, который поддерживает double наравне со float. В два раза отличается пиковая производительность и все библиотечные математические функции уже есть. Хотя, судя по недавним превью архитектуры, NVIDIA может ограничить производительность вычислений с двойной точностью на «потребительских» продуктах на базе Fermi, тогда Evergreen сохранит определённое преимущество в этой области.

Fermi и Radeon 5000

AMD продало примерно два миллиона чипов с архитектурой Evergreen, но неграфических приложений для них — раз-два и обчёлся. Для AMD будет хорошо, если они в значительной мере успеют улучшить программное обеспечение для Radeon, до массового выхода Fermi, чтобы можно было более-менее спокойно программировать. Но они упустили момент, и разработчики будут оптимизировать в первую очередь для NVIDIA.

Если, для сравнения Fermi и Radeon, оценить их перспективы в основных секторах неграфического использования GPU, то наиболее крепкие позиции у AMD в настольном секторе. Семейство видеокарт Radeon очень неплохое, достаточно дешёвых и массовых представителей, поэтому разработчики массового ПО c поддержкой OpenCL не могут игнорировать продукты AMD. Производительность в наиболее востребованных, в настольном сегменте, вычислениях с вещественными числами одинарной точности, является сильной стороной Radeon. Он полностью поддерживает на уровне железа OpenCL и можно ожидать, что в массовых OpenCL-приложениях Radeon будет несколько медленней и несколько дешевле Fermi. Насколько он будет медленней, будет зависеть от конкретного приложения.

Можно примерно сравнить GPU с настольными процессорами, и тогда продукт AMD будет отождествлён с Intel Pentium 4, а Fermi — c Core или Nehalem. А старый GT200 — примерно как Athlon. В некоторых тестах Pentium 4 отставал сильно от только вышедшего Core, а в некоторых не так сильно, но Core был дороже. К сожалению для AMD, у их изделий нет такой поддержки на уровне ПО, какая была у Pentium 4, и это снижает ценность Radeon для неграфических применений. Главная надежда AMD пока связана с ожиданием, что Fermi получится очень дорогим.

Но для каких-то изысков и целенаправленно рассчитывая на вычислительные применения брать Radeon смысла особого нет, потому что Fermi предоставляет более широкие возможности для выполнения обширного круга задач, при высокой производительности. Он обладает существенно большими кэшами первого и второго уровней, что важно для приложений, поддерживает C++ и так далее. Наверное, даже лучше выбрать бюджетный вариант Fermi, с меньшей теоретической производительностью, но с новой архитектурой. Какие-то задачи могут пойти медленней, чем на «топовой» модели Radeon, но список исполняемых задач, которые получат реальное ускорение от GPU, будет значительно больше. И Fermi поддерживает больше, чем OpenCL 1.0.

Самые преданные покупатели Radeon — это разработчики некоего массового софта под OpenCL, которые хотят, чтобы их какая-нибудь бесплатная программа работала у как можно большего числа пользователей, например, геймеров, которые купили Radeon, даже в принципе не думая о неигровых применениях. Эти разработчики осаждают форум технической поддержки AMD и спрашивают, когда будет полная поддержка OpenCL и т.п. Словно фанаты некой компьютерной игры, требующие патч, исправляющий глюки первой версии.

Если же рассматривать, грубо говоря, построение суперкомпьютеров на Radeon, то тут у него может быть только преимущество в цене одного терафлопа, на некоторых задачах, благодаря дешевизне. Но эта цена сильно зависит от задачи. Сильнее, чем у более универсального Fermi и можно напомнить, что падение производительности, от перехода к используемому в научных вычислениях double, на Radeon должно быть удручающим.

Кстати, у Radeon есть узкие места архитектуры и на некоторых приложениях он не быстрее, чем даже GT200. Особенно, без усиленной GPU-оптимизации. Ещё не до конца понятно, на сколько это проблема железа, драйверов или компилятора, но на приложениях, скорость которых ограничена производительностью памяти, у Evergreen преимущества над GT200 зачастую нет. Усовершенствований в вычислительных модулях гораздо больше, чем улучшений в системе памяти (собственно, особо значительных и нет). Похоже на сравнение высокочастотного Celeron с Pentium 4, с более низкой частотой, но большим кэшем и «широкой» шиной. При большей вычислительной мощности, Radeon 5870 имеет чуть меньшую пропускную способность видеопамяти, чем GeForce GTX 285.

Если бы программная поддержка Radeon была «на уровне», то можно было подумать создать на базе Radeon специализированный суперкомпьютер, для решения некоторой достаточно потоковой задачи, которая хорошо ложится на его VLIW-архитектуру, желательно с использованием вещественных чисел одинарной точности. Но пока, из-за слабой поддержки софта, это не очень актуально.

Можно сказать, что если Fermi пытается приблизиться к процессорам в функциональности, то Radeon, в большей степени, именно к использованию программируемого графического ускорителя в неграфических вычислениях.

 /