среда, 5 декабря 2012 г.

Жулики в nVidia

Очень жизненная статья с официального форума Octane.

GPU рендеринг
Когда-то давным давно nVidia была вполне честной компанией с огромным потенциалом. Стартанули отлично, развились, закрепились. Но как любая акула бизнеса, со временем компания озадачилась увеличением эффективности в вопросах получения прибыли. Только вот незадача - рядовые пользователи, к сожалению, ограничены в финансах, и далеко не все готовы платить за игровую видеокарту с каждым поколением всё больше и больше (да и игровые приставки поджимают эту планку сверху, т.к. при цене на видеокарту >600$ многие геймеры задумаются о покупке приставки).

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

Кстати, в один прекрасный момент известный в узких кругах Алексей Николайчук, он же Unwinder, он же автор известной утилиты RivaTuner, занялся этим вопросом и успешно научился обманывать драйверы, после чего все желающие смогли разблокировать профессиональные функции на своих игровых видеокартах. Но nVidia достаточно быстро прикрыли эту лазейку, сначала на уровне драйверов (что тоже было обойдено), а затем и на хардварном уровне. Хотя лично мне кажется, что всё же на уровне биоса, но это не так важно. Главное что больше пока никто не смог повторить подобное. Но, тем не менее, это был реальный момент, когда было доказано, что «профессиональная» карта того времени ничем не отличалась от игровой, и вся разница между ними - это маркетинговые игры. Факт.

Прошло время, стало активно развиваться направление использования видеопроцессоров для физических вычислений. И конечно же nVidia не могли остаться в стороне, быстренько словили волну и вышли на рынок и в этом сегменте. Выпуск «профессиональных» версий для вычислений не заставил себя ждать. Привет, Тесла! Но, в отличии от профессиональных графических карт, у вычислительных карт практически нет никаких особенных уникальных фич – там преимуществом может быть только тупая производительность. Поэтому сразу встал вопрос, как сделать так чтобы карты игрового сегмента не конкурировали с «профессиональными»? Вариантов было немного: либо в рамках каждой линейки разрабатывать отдельный процессор специально под вычисления, либо взять тот же проц что и на игровые ставится, но при этом производительность игровых карт искусственно урезать. Конечно же пошли вторым путём. Оно и проще и дешевле и привычнее.

А теперь, чтобы всё вышесказанное не выглядело голословным, перейду к рассмотрению технических характеристик последних поколений процессоров nVidia - Fermi и Kepler. Думаю, будет достаточно рассмотрения производительности верхних моделей (GTX x60, x70, x80 и сравнения их с Tesla)

Fermi

GF100/110

16 потоковых мультипроцессоров (SM) по 32 ядра, обладающих возможностью выполнения одной FMA* операции с одинарной точностью (Single Precision - SP) за один такт, или с двойной точностью (Double Precision - DP) за 2 такта. Множитель шейдерного домена у этих чипов равен 2, поэтому ядра работают на удвоенной частоте. У игровых видеокарт базирующихся на этих чипах была искусственно урезана только производительность расчётов в DP в 4 раза (это они особо не скрывали).
*) FMA – это Fused multiply–add. Состоит по сути из двух операций с плавающей точкой a+b*c, поэтому не спрашивайте откуда у меня в вычислениях взялось «лишнее» умножение на 2.
Так же конечный результат буду делить на 1000, т.к. тактовые частоты буду подставлять в мегагерцах, а получать буду гигафлопы (и их я буду округлять до целого).

Вычислительная мощность видеокарт на этих чипах считается так:

Tesla C2070 (GF100)
14(SM)*32(cores)*575*2(MHz)*2/1000 = 1030 Gflops (SP)
14(SM)*32(cores)*575*2(MHz)*2/2/1000 = 515 Gflops (DP)

Tesla M2090 (GF110)
16(SM)*32(cores)*650*2(MHz)*2/1000 = 1331 Gflops (SP)
16(SM)*32(cores)*650*2(MHz)*2/2/1000 = 666 Gflops (DP)

GTX 480 (GF100)
15(SM)*32(cores)*700*2(MHz)*2/1000 = 1344 Gflops (SP)
15(SM)*32(cores)*700*2(MHz)*2/2/4/1000 = 168 Gflops (DP)

GTX 580 (GF110)
16(SM)*32(cores)*783*2(MHz)*2/1000 = 1604 Gflops (SP)
16(SM)*32(cores)*783*2(MHz)*2/2/4/1000 = 200 Gflops (DP)

Все расчёты сходятся с официальными (и не очень официальными) данными распространёнными по сети. Если не считать всем известной урезки DP, то с этими чипами всё более-менее честно.
Для остальных карт рассчитать мощность не сложно. Тактовые частоты и количество потоковых процессоров известны. Остальные цифры те же.

GF104/114

8 потоковых мультипроцессоров (SM), 48 ядер, FMA(SP) за такт, FMA(DP) за 2 такта. Множитель шейдерного домена x2. Производительность в DP зарезана в 2 раза.
А вот тут начинаются маленькие маркетинговые чудеса.
Для экономии площади кристалла, ядрам немного подрезали функционал на физическом уровне. Мало того что потоковых мультипроцессоров стало меньше вдвое, так ещё теперь каждое ядро не может выполнять и SP и DP операции. Очень похоже что они разделены так: 32 ядра - SP, 16 – DP. Из-за этого наблюдается очень заметное падение в расчётах относительно карт на GF100/110. Официально это нигде не сказано, в огромном количестве источников производительность рассчитывается исходя из 48 ядер, что даёт сильно завышенные результаты. В сторонних обзорах данная особенность почти нигде не упоминается, разве только видел один раз на anandtech вскользь, да и то только написано, что операции с DP могут выполнять только треть ядер, а про то, что эта треть не дружит с SP – нигде ни слова. Но мои наблюдения показывают, что прав всё же я.
Таким образом, получается:

GTX460 (GF104)
7(SM)*32(cores)*675*2(MHz)*2/1000 = 605 Gflops (SP)
7(SM)*16(cores)*675*2(MHz)*2/2/2/1000 = 76 Gflops (DP)

GTX560Ti (GF114)
8(SM)*32(cores)*822*2(MHz)*2/1000 = 842 Gflops (SP)
8(SM)*16(cores)*822*2(MHz)*2/2/2/1000 = 105 Gflops (DP)

А вот теперь начинается жесть как она есть

Kepler
Буду рассматривать сразу GK104 и GK110, но сначала «достоверные» официальные данные.

GK104
8 потоковых мультипроцессоров (SMX) по 192 ядра (FMA SP за такт). Шейдерный домен работает на базовой частоте.
GK110
16 потоковых мультипроцессоров (SMX) по 192 ядра (FMA SP за такт), плюс появившиеся мистические DP-Units (FMA DP за такт) в количестве 64 штук на SMX. Шейдерный домен работает на базовой частоте. Прочие «новые» фичи типа динамического параллелизма рассматривать сейчас не будем.

Отмечу, что и по моему мнению, и по мнению ряда более авторитетных источников, у GK104 и у GK110 упомянутые 192 ядра способны производить только SP вычисления. Но сразу возникает вопрос: а тогда каким образом GK104 выполняет DP расчёты при отсутствии DP-units?
Отвечаю: А они есть! (опять же, это не моя фантазия, в сети есть упоминания). Задействовано по 8 юнитов на SMX. Сколько их там реально – никто не знает. Что-то мне подсказывает, что те же самые 64.
Только nVidia об этом тихо молчит. Почему? А ответ простой: чтобы не показывать, что они стали и теслы тоже урезать из маркетинговых соображений. Зачем урезать? – всё просто: выкидывать на рынок не топовую карту которая разом бьёт по расчётам c SP и DP топовые карты на Fermi – глупо. Лучше выкинуть только чемпиона по SP. Кому надо – тот купит. А для тех кому нужны расчёты с двойной точностью пусть догребают карты предыдущих поколений, которых, судя по всему, осталось ещё прилично, либо пусть раскошеливаются на доргущий K20/K20X.
А теперь коварный замысел номер 2.
Вопрос: если у младшей модели Tesla урезана производительность в вычислениях с DP, то что надо сделать чтобы игровые карты не конкурировали с ней? Правильно! Зарезать у GTX ещё и SP!
У меня есть все основания считать, что у линейки GTX 6xx для расчётов с одинарной точностью используется только 112 ядер из 192 (касаться производительности в играх не буду, сейчас говорю только про физические вычисления). В сети подтверждений такому моему "дикому" предположению я нигде не нашёл, но косвенно всё на то указывает.
Согласно моей теории, для семейства карт на чипе Kepler производительность вычисляется так:

Tesla K10 (GK104)
2(процессора)*8(SMX)*192(cores)*745(MHz)*2/1000 = 4577 Gflops (SP)
2(процессора)*8(SMX)*8(cores)*745(MHz)*2/1000 = 191 Gflops (DP)

Tesla K20 (GK110)
13(SMX)*192(cores)*705(MHz)*2/1000 = 3519 Gflops (SP)
13(SMX)*64(cores)*705(MHz)*2/1000 = 1173 Gflops (DP)

GTX680 (GK104)
8(SMX)*112(cores)*1006(MHz)*2/1000 = 1803 Gflops (SP)
8(SMX)*8(cores)*1006(MHz)*2/1000 = 129 Gflops (DP)

GTX660Ti/670 (GK104)
7(SMX)*112(cores)*915(MHz)*2/1000 = 1435 Gflops (SP)
7(SMX)*8(cores)*915(MHz)*2/1000 = 102 Gflops (DP)

Хочу отметить, что похоже младшие модели, базирующиеся на GK106 (у него всего 5 мультипроцессорных блоков), зарезаны не больше чем топовые карты (куда уж больше :). В этом есть ложка мёда на бочку дёгтя, т.к. получается что две 650Ti, имеющие по 4 SMX, будут равны по вычислительной мощности одной GTX680 (с 8 SMX) при условии одинаковых тактовых частот (теория не подтверждена).

Ещё раз коротко изложу свои размышления. Не воспринимайте их как истину в последней инстанции, пусть это и обоснованные, но всё же предположения:

- nVidia играет в грязные маркетинговые игры, и всё бы ничего, но они замалчивают нюансы, вводя пользователей в заблуждение насчёт реального быстродействия их карт.
- Раньше nVidia резали по вычислениям только игровые карты и только при расчётах с DP, теперь же они оборзели вконец и режут всё, включая младшие Tesla.
- Kepler получился колоссально мощным и энергоэффективным. Причём настолько, что nVidia решила дозированно выводить его на рынок и тем самым снять пенку несколько раз.
- GK104 и GK110 глобально отличаются только количеством SMX – 8 против 16.
- Задержка появления GK110 связана не с разработкой чего-то абсолютно нового, а с производственными проблемами (низкий процент выхода годной продукции). Всё же 16 SMX блоков такой плотности на новом техпроцессе это не шутки.
- Строение SMX у GK104 и GK110 либо одинаково, либо с незначительными мелкими доработками.
- Урезав мощность линейки GTX сейчас, nVidia имеет возможность перепродать в следующем году как новую линейку GTX7xx ту же карту, но работающую на полную мощность (или чуть менее урезанную).
- Спустя некоторое время выйдет карта Tesla K15(?) со всеми включенными DP-юнитами на чипе, которая окончательно заменит карты Tesla на Fermi. Но скорее всего номер чипу сменят, чтобы не палиться лишний раз.

Потрясающая работа в начале поста создана пользователем Manalokos с официального форума Октана.

Комментариев нет:

Отправить комментарий