Проблемы и преимущества Fermi
Выход представителей нового поколения графических процессоров NVIDIA несколько раз откладывался, в итоге первые GeForce и Tesla на новой архитектуре вышли урезанными, относительно первоначально заявленных спецификаций. Они так же неприятно удивили довольно высоким уровнем энергопотребления. Что послужило причиной задержек? И стоило ли ждать? Какие особенные архитектурные инновации выделяют Fermi и делают его уникальным?
Производственные проблемы ↑ ≈
Появление новых GPU было запланировано ещё на осень прошлого года, однако у изготовителя самих кристаллов, тайваньской фабрики TSMC, появились проблемы с изготовлением чипов на новой архитектуре. Фирмы-производители не любят распространяться о деталях проблем, отделываясь скупыми отчетами о переносах сроков. На этой фабрике также производятся GPU AMD и эта фирма в свое время также столкнулась с техническими трудностями изготовления кристаллов, но сумела их преодолеть. Новое семейство ускорителей Radeon, основанных на обновленной архитектуре Evergreen и поддерживающих DirectX11, вышло вовремя. Эти ускорители производятся массово, они относительно дешевы и выделяют не так много тепла, а «история успеха» AMD, в борьбе с недостатками производственного процесса TSMC, попала в печать и стала достоянием общественности. Таким образом можно понять, с какими трудностями пришлось столкнуться NVIDIA и, на основе знаний о процессе производства, сделать достоверные предположения о проблемах изготовления Fermi, которые и вынудили урезать спецификации видеускорителей.
Напомним принципиальную схему изготовления микрочипов. Сначала создается архитектура чипа: грубо говоря, рисуется схема расположения транзисторов и соединений между ними. Далее, по этой схеме изготавливаются шаблоны, которые используются в приборах изготовления самих кристаллов CPU или GPU с данной архитектурой. Изготовление шаблонов по схемам — процесс трудоемкий, дорогой и длительный.
Когда в популярных статьях о различных семействах CPU или GPU описывают микроархитектуру, практически всё внимание уделяется описанию схемы работы и внутреннего устройства, количеству и спецификациям различных блоков. И только коротко указывается, что чип производится, например, по 90 нм технологическому процессу. Пусть пользователям и разработчикам достаточно этой информации, а для индустрии не менее важны параметры технологического процесса изготовления устройства. А также, как параметры технологического процесса соотносятся с микроархитектурными особенностями. К примеру, микроархитектура CPU может иметь так называемый «короткий» такт и рассчитывать на высокую тактовую частоту для достижения определенного уровня производительности. Но если технологический процесс не позволяет изготавливать высокочастотные устройства, пусть даже он очень «тонкий» и позволяет разместить большое количество транзисторов на кристалле, то CPU выйдет неудачным, с невысокой производительностью. Пусть даже сама микроархитектурная схема была хорошо выполнена.
Именно это случилось в свое время с процессорами Intel «Prescott», они просто не смогли работать на предполагаемых частотах 5–6 ГГц на доступном технологическом процессе. А микроархитектурная схема была рассчитана на короткую длительность такта и, в результате, эти CPU стали уступать по производительности старым архитектурам, рассчитанным на выполнение большего количества работы за один такт.
Итак, новые GPU NVIDIA производятся по 40 нм технологическому процессу, на который недавно перешла TSMC. Сразу надо сказать, что не все технологические процессы одного «размера» одинаковы. Технологический процесс имеет ещё множество параметров и они сильно разнятся у различных производителей, так как разные производители используют несколько различные технологии и материалы для достижения необходимой плотности транзисторов. И этот данный процесс получился у TSMC не очень удачным и качественным. Когда по шаблону идеального чертежа схемы микроархитектуры создается реальный чип, расположение транзисторов и соединений в нем всегда не полностью соответствует схеме. Он производится с некоторыми случайными отклонениями от чертежа. Чем лучше качество производства, тем меньше эти отклонения. Если отклонения большие, то чип не будет работать, как ему положено. Проще говоря, он будет «глючить» на заявленной частоте. Но, он может заработать на несколько меньшей. Как будто бы он был произведен по более «толстому» технологическому процессу.
Обычно, переход на более тонкий технологический процесс несёт увеличение тактовой частоты, но если перейти на некачественный технологический процесс, то достичь высоких частот удастся только в редких случаях. Так вот образуются семейства CPU с одной архитектурой, но различными тактовыми частотами. Есть ещё один вариант — вместо понижения частоты, отключать некачественно сделанные блоки. Так, например, рождаются трехъядерные процессоры. Но бывает и так, что и понижение частоты не помогает — схема просто неработоспособна.
Проблемы TSMC ↑ ≈
Что же конкретно не в порядке с процессом TSMC? Считается, что транзисторы в кристалле получаются слишком различными по качеству, то есть достаточно много транзисторов с низкими параметрами быстродействия. Второй недостаток кроется в низком качестве соединений между различными слоями в чипе. Кристалл Fermi по площади довольно большой, ~550 мм2, почти в полтора раза больше, чем Radeon 58xx. И первые ревизии были неработоспособными из-за ошибок.
Некоторые недостатки технологического процесса можно обойти, если учесть их при проектировании самой схемы. Например, в случае с вариативностью параметров транзисторов, не рассчитывать, что все транзисторы будут работать, как положено. Определить самые узкие места в схеме там, где наиболее критична скорость транзисторов и заменить один быстрый на несколько, но более медленных. Пусть ценой увеличения площади. Надо понимать, что если караван движется со скоростью самого медленного верблюда, то электронное устройство работает со скоростью схемы самого проблемного блока. И можно найти такие блоки, схемы которых наиболее чувствительны к вариативности транзисторов и каким-то образом переработать их. В частности, как правило, в разработке устройства применяется автоматическое проектирование, но некоторые блоки можно оптимизировать вручную, они смогут работать относительно быстрее. Таким образом, в случае дефектных транзисторов в этих блоках, схемы смогут работать пусть на пониженной для себя скорости, но общей для всего чипа.
Второй путь — дублирование проблемных блоков. Эта техника сплошь и рядом применяется при создании современных CPU и GPU. Но проблемы с качеством производства оказались настолько велики, что применение данных методов потребовало бы полного редизайна чипа, переработки всей схемы. Надо понимать, что принципиально микроархитектура оставалась бы той же самой, с тем же количеством шейдерных модулей и т.п. Но, реализована она в транзисторах и соединениях была бы несколько иначе, плюс дублирование некоторых модулей. Что ведет к изменению расположения блоков, так как дубли блоков требуют дополнительного места на кристалле, а это влечёт изменение положения других блоков и связей. То есть, все нужно перестроить и, самое главное, что полной гарантии успеха нет, а такая переработка занимает до полугода и NVIDIA пошла другим путем.
Кстати, автоматизированное проектирование схем и расчет параметров работы чипа, которое требует, в том числе, программную эмуляцию работы миллиардов транзисторов, очень вычислительно сложная задача. И, в силу своей последовательной сущности, даже не может быть существенно ускорена не только с помощью CUDA, но и просто созданием кластера из множества компьютеров. Так что совершенствование происходит методом проб и ошибок, от ревизии к ревизии. А вот AMD/ATI, со своими Radeon, начала раньше переход на этот неудачный 40 нм технологический процесс TSMC, ещё с серии 47xx/48xx и учла его особенности в схеме расположения транзисторов в реализации микроархитектуры Radeon Evergreen. В частности, сделала дубли проблемных межслойных соединений.
Решение: отключение вычислительных блоков ↑ ≈
Сроки выхода Fermi нельзя было значительно откладывать и начались ухищрения. На счастье производителей чипов, есть способ борьбы с проблемными транзисторами. Его знают все оверклокеры. Надо поднять напряжение, относительно естественного для чипа. Повышение напряжения улучшает скоростные характеристики транзисторов. То есть, меньшее количество транзисторов при повышенном напряжении будет работать не так, как следует.
Естественно, все это относительно некоторой частоты. Чем выше частота, тем сложнее заставить все транзисторы на ней работать. Но, повышение напряжения увеличивает энергопотребление. Это зависит от конкретного чипа, на сколько повышение вольтажа на одну условную единицу вызывает повышение потребления. NVIDIA не очень повезло с этим параметром для Fermi. Плюс, повышение напряжения увеличивает так называемые токи утечки. То есть, при повышении напряжения транзисторы начинают потреблять больше энергии. Но это ещё не все: в зависимости от процесса изготовления, варьируются и параметры потребления транзисторами энергии. Это один из важных параметров технологического процесса. И чем более качественный технологический процесс используется, тем более равномерен этот показатель среди всех транзисторов. Но и тут не повезло, многие транзисторы при повышении напряжения начинают сильно потреблять энергию, а увеличение потребления энергии увеличивает и температуру.
При повышении температуры, транзисторы имеют тенденцию потреблять и рассеивать впустую больше энергии, что снова вызывает увеличение температуры и так далее по кругу. Таким образом, особо с увеличением напряжения не разгонишься. И вот, по этой причине, Fermi вышел «прожорливым» и с мощной (следовательно — шумной) системой охлаждения, т.к. без неё невозможно обеспечить стабильную работу.
Поскольку дальше увеличивать напряжение было невозможно из-за проблем с охлаждением, для увеличения выхода годных чипов пришлось выбирать между двумя возможностями: отключать блоки с бракованными транзисторами или снижать тактовую частоту всего чипа. В итоге, пришлось применить оба метода, найдя некое оптимальное соотношение. Так родились GeForce GTX 480 и GeForce GTX 470. Более хорошие экземпляры чипов стали высокочастотным 480-м, только с одним отключенным шейдерным блоком, а самые плохие пошли на менее частотный 470.
Могли быть и другие сочетания частот и количества отключенных блоков. Например, в младшей модели мог быть отключен только один блок, но, при этом, частота была бы гораздо ниже. Однако, нам необходимо максимизировать произведение числа шейдерных процессоров на частоту чипа, так что оказалось, что лучше выключить два блока, но частоту оставить повыше. Как важен повышенный вольтаж для работоспособности Fermi, показывает следующий пример. После выхода новых GPU, пользователи стали собирать персональные суперкомпьютеры, заполняя видеоускорителями несколько PCI Express слотов. Пусть при выполнении CUDA-программ энергопотребление GPU не такое большое, как в 3D приложениях, что, кстати, очень неплохо, такая система все равно потребляет довольно много. И один пользователь столкнулся с проблемой, когда некачественный UPS, показывая номинально необходимую мощность, реально подавал периодически несколько меньшую. Он работал на своем пределе и это вызывало случайные ошибки исполнения CUDA-программ. Для устранения проблемы его пришлось заменить, ибо из-за меньшей мощности несколько уменьшалось напряжение, что вызывало сбои в работе транзисторов.
И тут NVIDIA сильно не повезло ещё в одном аспекте: в Fermi уменьшилось вдвое количество Streaming Multiprocessors, по сравнению с GT200, но они стали в четыре раза более «толстыми», с 32 функциональными модулями, вместо 8. Это не плохо с точки зрения GPU программ, так как позволяет объединить вместе больший объем локальной памяти, предоставив возможность блокам нитей обрабатывать больший объем данных совместно — 48 Кб вместо 16 Кб, а также упрощает организацию кэша. Но с точки зрения процесса производства, это обернулось кошмаром. Ибо если находится дефект в одном из 32 модулей, то приходится отключать весь Multiprocessor. То есть, например, если есть две ошибки, то при такой организации чипа мы теряем 2/16=12,5% производительности, так как приходится отключать два мультипроцессора из 16. А если бы организация осталась прежней, то потеряли бы всего 2/64=3% производительности, так как вместо одного мультипроцессора с 32 модулями было бы четыре с 8 функциональными модулями или CUDA cores. И, самое главное, можно было бы ещё больше мультипроцессоров выключить без особой потери производительности, победив, таким образом, некачественность технологического процесса. А в случае с 16 шейдерных процессоров, особо с выключением не развернешься, площадь-то кристалла и его себестоимость таким образом не уменьшается, она остается прежней, а производительность на четверть или треть меньше. Соответственно, меньше и цена. И никакого преимущества в производительности над конкурентом нет. Так что, отключение не очень хорошо сделанных блоков — не выход. Тем более, для производительного сегмента. Оно просто мгновенно переводит GPU в нижний сегмент. AMD повезло немного больше, у них не 16, а 20 шейдерных процессоров. Они довольно спокойно отключают несколько нефункционирующих на нужной частоте и получают семейство младших, но производительных, моделей.
Решение: ограничение производительности вычислений с двойной точностью ↑ ≈
Есть ещё один способ увеличения числа годных чипов — отключение функциональности. Например, вместо отключения целого ядра, как в AMD Phenom x3, можно отключить только отдельные блоки, которые вышли не очень качественными и не работают на необходимой частоте. Самый типичный и известный пример, это процессоры с уменьшенным размером кэша различного уровня. Действительно, размер кэша не имеет принципиального значения, процессор может работать вообще без кэша, так что можно вполне безопасно отключить области кэш-памяти, содержащие неработающие транзисторы.
Пока что, все же кэш-память GPU занимает не такой большой процент площади кристалла, как у современных CPU, которые зачастую почти полностью состоят из кэша. Например, Intel планирует в будущем выпустить настольный процессор с 24 Мб кэш-памяти. Понятно, что это хороший способ ускорить производительность последовательных программ и практически единственный, ибо резервы улучшения микроархитектуры близки к исчерпанию, борьба идет за проценты производительности. И локальная память на кристалле GPU соответствует кэшу первого уровня CPU, самому важному. Его всё же стараются не трогать, ибо тогда происходит слишком большая потеря производительности.
Последним из настольных процессоров с уменьшенным из-за отбраковки кэшем первого уровня был Duron производства AMD, печально известный своей низкой производительностью как раз из-за обрезанного L1. Ещё одна причина не сокращать L1 — более сильная интеграция кэша с исполнительным ядром из-за развившихся в CPU механизмов спекулятивной и предварительной загрузки данных. Если уменьшится размер кэша первого уровня, изменится и его структура. Таким образом, придется иметь дополнительную логику в самом ядре, рассчитанную на различные параметры L1, степень ассоциативности и размер линии, что нежелательно в самой критической части CPU, где каждый такт доступа к L1 отдается процентами производительности. А кэши второго-третьего уровня имеют более высокую латентность, больше 10 тактов, и можно легко организовать отключение нефункциональных частей.
Ещё один момент — в GPU L1-кэш программируемый, все программы рассчитывают на определённый его размер. И тут плодить различные модели, например, с размером 16 Кб, 32 Кб, 48 Кб лишний раз не стоит. Можно отключать части впервые появившегося в GPU полнофункционального кэша второго уровня. Но он довольно небольшой, особого облегчения не будет. Тем не менее, есть слухи о выпуске модели Fermi без L2 вообще. Чип ориентирован для графики, где L2 не востребован так, как в GPU-программах. Как отмечают маркетинговые материалы, вместо кэша в GPU транзисторы тратятся на функциональные модули арифметических операций, которых сотни. И вот с ними можно поиграть, как и производители CPU играют с плохо произведённым кэшем. Напомним, что частота чипа лимитирована максимальной рабочей частотой его самого проблемного блока. Самого плохо вышедшего, или схема которого имеет наиболее длинную цепочку транзисторов, которые все один за другим должны сработать за один такт частоты.
И одним из самых, если не самым требовательным к качеству исполнения, является блок умножения чисел двойной точности. Для того, чтобы перемножить два числа типа double, которые занимают 8 байт, то есть 64 бита, необходимо перемножить их мантиссы и порядки, как целые числа, которые составляют формат компьютерного представления вещественного числа. Причем, мантиссу и порядок можно перемножать параллельно, то есть общая скорость лимитируется скоростью медленного умножения больших мантисс. Число представляется как произведение — знак x мантисса x (2 ^ порядок). И для мантиссы и порядка в различных форматах отводится различное число бит. Чем больше бит, тем больше точность.
число | битов знака | битов мантиссы | битов порядка | всего |
---|---|---|---|---|
Вещественное число одинарной точности (single) | 1 | 23 | 8 | 32 |
Вещественное число двойной точности (double) | 1 | 52 | 11 | 64 |
Но, в случае вещественных чисел двойной точности, количество бит мантиссы гораздо больше, чем в формате чисел одинарной точности, а быстро перемножать длинные целые числа сложно. GT200 умеет перемножать за такт только 24-битные числа, а 32-битные перемножаются за 4 такта. 24 бита как раз соответствует длине мантиссы числа одинарной точности. И даже новый Radeon Evergreen с полной скоростью перемножает тоже только 24-битные целые числа. В своё время в Pentium 4, целочисленные блоки которого работали на удвоенной по сравнению с остальным ядром частоте, для умножения целых чисел использовались блоки FPU, и из-за дополнительных тактов на передачу данных из целочисленных регистров в регистры FPU целочисленное умножение имело большую длительность в тактах.
Пусть переход на более тонкий технологический процесс, 40 нм против 65 нм старого, позволяет ускорить все в полтора раза, все равно видно, что перемножение double-чисел за такт на грани возможности производства. А тут как раз проблемы с качеством изготовления транзисторов. Поэтому, чтобы заставить работать весь кристалл на нужной частоте, пришлось зачастую возможность работы с double ограничивать, отключая эту функциональность в универсальных вычислительных модулях. Поэтому, в GF100 производительность в double в 4 раза меньше максимальной теоретической, а работоспособные кристаллы отправляются на изготовление Tesla с полной скоростью в double. Причём частота ускорителей Tesla примерно на 200 МГц ниже.
Это разумное решение, потому что геймерам вычисления с двойной точностью не нужны. Альтернатива — снижать частоту, чтобы успевать производить умножения double-чисел, или отключать ещё больше шейдерных процессоров — гораздо хуже. Впрочем, и для вычислительных GPU-программ потеря в пиковой вычислительной мощности не всегда транслируется в такую же потерю производительности реального приложения. Потому, что производительность программы может быть ограничена скоростью памяти и кэша. И программа состоит не только из одних вычислительных операций, есть ещё множество инструкций управления, загрузки данных. Так что, реально производительность в double урезанных «потребительских» GeForce будет только раза в два ниже, в среднем.
Кстати, AMD тоже пришлось убрать, по аналогичным причинам, поддержку double из своих видеоускорителей младшего сегмента, которые являются несостоявшимися чипами более высокой категории. Только AMD убрало вычисления вообще, а NVIDIA замедлила в два раза. Надо отметить, что, вообще говоря, организовать это отключение функциональности в double-вычислениях не просто. Это совсем не то же самое, что отключить бракованные ядра или участки кэша. Нельзя так сделать, чтобы некоторые шейдерные мультипроцессоры выполняли double-вычисления, а некоторые нет. А если отключать некоторые из 32 функциональных модулей в каждом из мультипроцессоров, то нарушается поток исполнения. Кто-то же должен исполнять инструкции нитей, соответствующих отключенным элементам.
Вероятно, введение дополнительных схем и потребовало дополнительного времени, вызвав задержку выпуска Fermi. Дополнительные соединения позволяют использовать вместо нефункциональных модулей работающие. Так и получается исполнение вектора из 32 инструкций 32 нитей в четыре раза медленнее, если предположить, что из 32 модулей только 8 работают. Это упрощенная модель и считается, что для перемножения чисел двойной точности используется сразу два рядом расположенных обычных функциональных модуля, но суть понятна. Впрочем, детали реализации неизвестны, возможна и какая-то более хитрая схема. Правда, это маловероятно. Проблематично отдельно тактировать с вчетверо меньшей частотой относительно всего чипа блоки умножения-сложения, причем тогда, когда они выполняют именно операции с числами double. Дополнительная проблема — арифметические блоки универсальны. Одни и те же схемы используются и для вычислений с одинарной точностью, и с двойной. Если бы были отдельные блоки для работы с типом double, как в GT200, то можно было легко выключить нефункциональные и пропорционально увеличить время исполнения пакета инструкций.
Везение AMD ↑ ≈
Выше говорилось, что AMD раньше NVIDIA начала работу с новым технологическим процессом TSMC и адаптировала архитектуру Evergreen с учетом его недостатков. Но это не самое главное. AMD просто второй раз в её истории повезло. Первый раз был вышеописанный случай с Intel Prescott, по сути, тоже самое. Дело в том, что архитектура видеокарт NVIDIA рассчитана на априори более высокую тактовую частоту. У неё есть специальный высокочастотный шейдерный домен, то есть, шейдерные ядра работают на удвоенной тактовой частоте относительно остального чипа. Например, частота GeForce 480 1400 МГц, частота Radeon 5870 850 МГц, у младших моделей ещё меньше. А чем больше частота, тем чаще и быстрее должны переключаться транзисторы и больше греться и т.п. И, соответственно, требования к ним выше.
Технологический процесс TSMC несовершенен именно с точки зрения качества транзисторов. Дело тут не в длине конвейера, как в случае с Prescott, AMD использует «широкие» векторные VLIW инструкции, им не требуется высокая частота для получения большой потоковой производительности. Впрочем, такие сложные инструкции и не смогли бы выполняться с большой частотой. NVIDIA реализует более удобный для программирования скалярный подход, но есть и ещё отличия, которые могли повлиять. Например, латентность локальной памяти карточек NVIDIA гораздо меньше, это специально сделано для GPU программ. В итоге, NVIDIA пострадала от ошибок производства больше.
Будущие технологии TSMC ↑ ≈
Как можно понять из всего вышеописанного, для успеха продукта и фирмы-производителя важна не только микроархитектура, но и технологический процесс производства. В первую очередь это касается финансового успеха, который напрямую зависит от себестоимости чипа. Он может обладать очень высокой производительностью, но так же высокой себестоимостью производства и быть не очень выгодным. Пользователи измеряют качество, к примеру, CPU, соотношением цена-производительность, но истинной мерой успеха является производительность-себестоимость производства. С этой точки зрения крайне важными являются перспективы развития технологии производства.
Фирма TSMC, которая является партнером NVIDIA и производит собственно чипы по созданным NVIDIA схемам, отменила разработку и переход на 32 нм технологический процесс, ибо он все равно запоздал, и сконцентрировала свои усилия уже на 28 нм технологическом процессе. Он должен быть готов примерно через год. Но вопрос, какие у него будут свойства? А в ожидании нового технологического процесса, NVIDIA остается только осуществлять редизайн чипа. Как, например, только что состоявшийся выпуск GeForce GTX 460 с несколько изменённой микроархитектурой. Благодаря специальным модификациям, удалось уменьшить потребление и нагрев, увеличив выход годных кристаллов. Впрочем, этот бюджетный чип по размерам меньше топовых моделей, так что всё несколько проще.
Заключение ↑ ≈
Итак, снова кратко перечислим все приёмы, которые производители используют для увеличения выхода годных кристаллов:
- Повышение напряжения питания, что приводит к увеличению потребления и повышению температуры и требует применение более сложной системы охлаждения.
- Отключение не функционирующих с заданными параметрами частоты-вольтажа ядер или шейдерных процессоров.
- Отключение неработоспособных участков кэш-памяти.
- Отключение неработающей функциональности, например, вычислений двойной точности.
- Снижение тактовой частоты относительно запланированной.
Эти варианты образуют множество возможных комбинаций. Например, ничего не отключать, но сильно занизить частоту, или наоборот. Необходимо искать оптимальные сочетания. NVIDIA пришлось применить все способы, кроме отключения почти отсутствующего кэша, чтобы запустить Fermi в массовое производство. В готовящемся продолжении статьи мы рассмотрим, ради чего, собственно, такие усилия и что принципиально нового в этой архитектуре.
Материалы по теме ↑ ≈
Полный текст статьи читайте на nvWorld.ru