Краткий анализ архитектуры NVIDIA Fermi

Введение

Основным практическим воплощением новой архитектуры NVIDIA Fermi должен стать графический процессор GT300, который придёт на замену поколению GT200. Следует отметить, что этот графический процессор содержит в себе много нововведений концептуального характера, количество и качество которых позволяет судить о нём как о ключевом продукте компании, определяющем развитие графических процессоров на последующие два-три года. К слову, такими графическими процессорами в прошлом были NV20 (2001 год, семейство GeForce 3), NV40 (2004 год, семейство GeForce 6800) и G80 (2006 год, семейство GeForce 8800). Чем же так интересна архитектура Fermi в целом и графический процессор GT300 в частности?

Новые задачи для GPU

Архитектура Fermi предполагает, что обработка компьютерной графики больше не является  единственной задачей графических процессоров, хотя и остаётся одним из приоритетных направлений. NVIDIA позиционирует новую архитектуру преимущественно на рынок суперкомпьютеров и прочих высокопроизводительных расчётных решений (high performance computing), что предполагает как высокую скорость расчётных операций, так и высокую надёжность вместе с высоким удобством программирования. Для этого рынка ключевым требованием является поддержка вещественных вычислений двойной точности (double precision floating point) и механизмов нахождения и коррекции ошибок (ECC, error checking and correcting) в оперативной памяти и подсистемах кэш-памяти для повышенной отказоустойчивости.

Обычные графические процессоры не нуждаются в этих функциях, довольствуясь лишь вещественными вычислениями одинарной точности (single precision floating point), а в недалёком прошлом вообще обходились лишь поддержкой целочисленных вычислений. Справедливости ради стоит заметить, что графический процессор GT200 мог использоваться для вещественных вычислений двойной точности, но его производительность на таких задачах оставляла желать лучшего.

В целом, она была примерно эквивалентна таковой от двух современных 4-ядерных x86 процессоров. Ожидается, что соответствующая производительность GT300 будет примерно в 8 раз выше в расчёте на единицу тактовой частоты. Несмотря на то, что GT200 был пригоден для научных расчётов и на его основе были созданы первые продукты семейства Tesla, помимо относительно невысокой производительности на вещественных операциях двойной точности он также обладал и другими существенными недостатками, но для их описания необходимо углубиться в архитектуру как этого графического процессора, так и его предшественника, G80.

Немного истории

G80 был первым графическим процессором NVIDIA, основанным на унифицированной шейдерной архитектуре, которая все расчёты проводит на так называемых скалярных унифицированных шейдерных конвейерах (scalar unified shader pipelines), которые также известны как потоковые процессоры (streaming processors).

Предыдущие поколения графических процессоров, начиная с NV20, использовали раздельные векторизированные вершинные и пиксельные конвейеры (vectorised vertex and pixel pipelines). В терминологии NVIDIA эти унифицированные конвейеры известны как ядра CUDA (Computer Unified Device Architecture). Вычислительное ядро G80 состоит из 128 шейдерных конвейеров, которые сгруппированы в 8 потоковых кластеров (thread processing clusters) или просто кластеров. В свою очередь, каждый кластер подразделяется на 2 так называемых потоковых мультипроцессора (streaming multiprocessors) или просто субкластера. Итого по 16 шейдерных конвейеров на 1 кластер и по 8 конвейеров на 1 субкластер.

Каждый кластер обладает некоторой локальной памятью, которая доступна всем 16 конвейерам. Для G80 её размер был определён в 16 Кб. Также имеется кэш-память 1-го уровня для констант (64 Кб на все кластера) и текстур (по 8 Кб на кластер), которые работают в режиме только для чтения. Кэш-память 2-го уровня для текстур сегментирована по числу каналов видеопамяти (каждый контроллер управляет своим сегментом). Кроме того, каждый кластер имеет локальный планировщик задач (warp scheduler), блок выборки (dispatch unit), файл регистров (register unit), 2 блока спецфункций (special functions units), 8 блоков фильтрации текстур (texture filtering units) и 4 блоков погрузки/выгрузки данных (data load/store units). Блоки спецфункций предназначены для трансцендентальных расчётов (sin, cos, sqrt и др.) и операций умножения.

G80 состоял из 681 млн. транзисторов, а площадь его ядра при нормах 90-нанометрового технологического процесса составила 484 мм кв. Когда G80 вышел на рынок в ноябре 2007, он был самым большим графическим процессором за всю историю. Разумеется, также отнюдь недешёвым в производстве. Вышедший на рынок в октябре 2008 графический процессор G92 был модификацией G80, в первую очередь направленной на уменьшение себестоимости при сохранении достигнутого уровня производительности, что стало возможным благодаря переходу на 65-нанометровый технологический процесс. Несмотря на то, что количество транзисторов в составе G92 увеличилось до 754 млн., площадь его ядра уменьшилась до 324 мм кв. Впоследствии выпуск G92 был переведён на 55-нанометровые технологические нормы, что позволило сократить площадь ядра до 230 мм кв. Этот графический процессор известен как G92b.

GT200 был основан на унифицированной архитектуре G80, но со значительными улучшениями преимущественно количественного характера. Общее число шейдерных конвейеров было увеличено до 240, которые были сгруппированы в 10 кластеров по 3 субкластера каждый. Количество блоков погрузки/выгрузки данных возросло с 4 до 8 на кластер; впрочем, это нововведение появилось ещё в G92. Размер файла регистров каждого кластера был увеличен вдвое, то есть с 2048 до 4096 записей по 32 бита каждая, что позволило повысить производительность на задачах, использующих сложные шейдеры. Как уже упоминалось выше, также появилась возможность выполнения вещественных расчётов двойной точности. Работа блоков текстурирования и растеризации была существенно оптимизирована при неизменном их количестве. Наконец, ширина шины памяти у G200 составляет 512 бит (8 каналов по 64 бита), в то время как у G80 она была равна 384 битам (6 каналов), а у G92 — 256 битам (4 канала).

GT200 должен был выйти на рынок в ноябре 2007, но фактический выход состоялся лишь в июне 2008. Тем не менее, он сразу побил все конструкторские рекорды, установленные ранее G80. Новый графический процессор состоял из 1,4 млрд. транзисторов, что при нормах 65-нанометрового технологического процесса вылилось в площадь ядра в 576 мм кв. В январе 2009 был представлен GT200b (он же GT206), который был 55-нанометровой перепроектировкой GT200 c уменьшенной до 470 мм кв. площадью ядра. Он также опоздал с выходом, так как изначально ожидался в августе 2008. 40-нанометровая версия GT200 под названием GT200c или GT212 так и не материализовалась.

Компанию также постигли проблемы с выпуском других 40-нанометровых графических процессоров, не таких сложных, как GT200. В частности, GT214 был отправлен на доработку и вышел уже как GT215. Выпуск GT216 и GT218 также несколько раз откладывался. Пока что определённо можно сказать лишь то, что NVIDIA имеет проблемы с адаптацией своих дизайнов к 40-нанометровому технологическому процессу TSMC, но вместо отладки и повышения конкурентноспособности существующих продуктов компания делает ставку на GT300, очередной монстроидальный продукт. Время покажет, было ли это ошибкой или нет.

Что готовит нам GT300?

Архитектурных и технологических подробностей о GT300 пока известно немного. Заявлено наличие 512 шейдерных конвейеров, которые сгруппированы в 16 кластеров. Каждый кластер состоит из 2 субкластеров по 16 конвейеров каждый, а также 2 локальных планировщиков задач, 2 блоков выборки, 4 блоков спецфункций, 16 блоков погрузки/выгрузки данных и пр. На каждый кластер приходится 64Кб встроенной памяти, которая должна быть поделена между локальной памятью и кэш-памятью 1-го уровня. Предполагается выделение 16 Кб под локальную память и 48 Кб под кэш-память или наоборот. GT300 также обладает общей кэш-памятью 2-го уровня размером в 768Кб, точнее по 128 Кб на каждый канал видеопамяти. Хотя GT200 также обладал кэш-памятью 2-го уровня размером в 256 Кб (по 64 Кб на каждый канал видеопамяти), но шейдерные конвейеры к ней доступа не имели, только текстурные. Ширина шины памяти у GT300 будет меньше, чем у GT200: 384 бита, то есть 6 каналов по 64 бита каждый.

Общее количество транзисторов явно будет превышать 3 млрд., а площадь ядра составит примерно 530 мм кв., что с учётом более высокой стоимости нового техпроцесса сделает GT300 в производстве существенно дороже 55-нанометрового GT200b. Если же учесть количество ресурсов, вложенных в разработку GT300 и архитектуры Fermi, а также низкий выход полностью работоспособных экземпляров в первое время, то себестоимость продуктов на основе GT300 может оказаться не по карману многим потенциальным покупателям. Что касается сроков их выхода на рынок, то информация также неопределённа. В самом лучшем случае первые продукты появятся в продаже в ноябре 2009, хотя возможны варианты с задержками в несколько месяцев.

Что касается расчётной производительности GT300, то она в основной мере зависит от практической сбалансированности новой архитектуры и реально достижимой при массовом производстве частоты шейдерного домена. Ориентировочно последняя будет составлять от 1,5 ГГц до 2,0 ГГц, что даёт основание полагать о производительности от 2200 до 3000 Gflops на вещественных операциях одинарной точности и от 800 до 1500 Gflops двойной точности. Что касается производительности предыдущих разработок, то Tesla C1060 на основе GT200 с тактовой частотой шейдерного домена в 1,3 ГГц характеризовался 933 Gflops одинарной точности и 78 Gflops двойной точности. Как видим, разница в производительности просто огромна, особенно на вещественных операциях двойной точности. Из существующих конкурентных разработок следует отметить AMD/ATI Radeon HD5870, в основе которого лежит 40-нанометровый графический процессор RV870 (Cypress), который при стандартной тактовой частоте в 850МГц обладает производительностью в 2720 Gflops одинарной точности и 544 Gflops двойной точности.

Из предыдущих разработок AMD/ATI в сфере научных расчётов стоит отметить FireStream 9270 на основе RV790, который при тактовой частоте в 850 МГц демонстрировал 1200 Gflops одинарной точности и 240 Gflops двойной точности. Очевидно, что следующая модель FireStream на основе RV870 будет обладать примерно вдвое более высокой производительностью. Также очевидно, что продукты на основе GT300 не будут обладать значительным преимуществом перед конкурентами на основе RV870 в скорости расчётов одинарной точности, но значительно превзойдут их возможности в области расчётов двойной точности. Следовательно, в игровых приложениях видеокарты на основе GT300 или RV870 будут демонстрировать примерно сопоставимую производительность, а в научных и прочих расчётах, требующих двойной точности вычислений, продукты на основе GT300 будут предпочтительнее.

Конкуренты

У архитектуры NVIDIA Fermi в ближайшем будущем появится ещё один серьёзный конкурент в виде архитектуры Intel Larrabee. Продукты на основе этой архитектуры пока что находятся в стадии разработки, поэтому доступная информация не несёт окончательного характера.

Достоверно известно, что в основе архитектуры лежит процессорное ядро Larrabee, которое состоит из 64-битного скалярного блока, 512-битного векторного блока, двух файлов регистров (по одному на скалярный и векторный конвейер), блока декодирования команд, разделённой кэш-памяти для данных и команд по 32Кб каждая, блока по работе с кэш-памятью 2-го уровня и межядерной шиной, а также некоторой вспомогательной логики. Хотя кэш-память 2-го уровня логически является общей для всех ядер, каждое из них обладает быстрым доступом в локальный сегмент размером в 256 Кб. Передача данных между отдельными сегментами кэш-памяти происходит по высокоскоростной межядерной двойной кольцевой шине. Передача данных по этим кольцам, каждое из которых имеет разрядность в 512 бит, происходит в противоположном направлении. Они также служат для обмена данными с видеопамятью и периферийными контроллерами.

В основе скалярного блока Larrabee лежит целочисленная логика процессора Intel Pentium, который не обладал RISC-подобным ядром и не мог выполнять x86 команды вне очереди. В него была добавлена поддержка 64-битных команд, многопотокового выполнения, предварительной выборки и некоторых дополнительных функций. Векторный блок Larrabee состоит из 16 32-битных конвейеров, каждый из которых может выполнять как целочисленные команды, так и вещественные одинарной точности. С некоторой потерей производительности смогут выполняться и вещественные команды двойной точности.

Новые команды для векторного блока позволяют работать максимум над 3 исходными операндами, что даёт возможность реализовать сложные операции типа умножения с последущим сложением (multiply and add, MAD) или совмещенного умножения со сложением (fused multiply and add, FMA), при котором данные после умножения не округляются перед последующим сложением. Соответсвенно, архитектура Intel Larrabee будет полностью соответствовать требованиям стандарта IEEE 754-2008 в части вещественных вычислений одинарной и двойной точности. Впрочем, как и архитектура NVIDIA Fermi.

В архитектуре Larrabee почти все традиционные графические задачи (растеризация, интерполяция, альфа-смешивание, пр.) выполняются не специализированной логикой, а программно на векторных блоках. Исключение составляет лишь текстурная фильтрация, которая выполняется аппаратно. Поскольку современные программы работают преимущественно с текстурами, характеризующимися 8-битными каналами данных, поэтому обработка их на 32-битных конвейерах была бы малоэффективной. Впрочем, при необходимости текстурную фильтрацию можно проводить и программно. Каждое ядро обладает кэш-памятью для текстур размером в 32 Кб. Обмен данными между основными блоками ядра и блоком текстурной фильтрации происходит через кэш-память 2-го уровня.

Заключение

Предварительные тесты показали, что для достижения приемлемого уровня производительности (разрешение 1600х1200, 60 кадров в секунду) в популярных играх 2008 года (F.E.A.R., Helf-Life 2 Episode 2, Gears of War) достаточно 24 ядер Larrabee, работающих с тактовой частотой в 1,0 ГГц. Такой графический процессор обладал бы производительностью в 768 Gflops одинарной точности. Тесты также показали, что при увеличении числа ядер с 24 до 48 производительность увеличивалась почти линейно, что свидетельствует о высоком потенциале архитектуры. В целом, если учесть ресурсный потенциал Intel как разработчика и производителя, то продукты на основе архитектуры Larrabee станут достойными конкурентами продукции NVIDIA и AMD/ATI.

Это одна из причин, по какой NVIDIA следует поспешить с выпуском GT300. Что касается позиционирования будущих продуктов на основе GT300 преимущественно на рынок на рынок суперкомпьютеров и прочих высокопроизводительных расчётных решений, то следует учесть тот факт, что в этом году примерно 2/3 прибыли компании принесли решения семейства Quadro и Tesla, поэтому ориентация на эти семейства в ближайшем будущем очевидна. Жёсткая конкуренция на рынке игровых видеокарт, мировой экономический кризис, неудачи с DirectX 10 и Windows Vista привели к тому, что норма прибыли на этом рынке упала до очень низкого уровня, граничащего с нерентабельностью. Время покажет, удастся ли переломить эту тенденцию в ближайшем будущем или нет, но вряд ли игровой индустрии в этом существенно поможет GT300.

Павел Болотов (WSF)