Всички сме свикнали всяка година производителите на графични чипове NVidia и ATI да обновяват продуктовите си фамилии. В повечето случаи обаче новите модели се базират на сходна архитектура с предишното поколение, като подобренията често идват заради по-добрия производствен процес, усвоен от основния производител на чиповете – тайванската компания TSMC. Всеки няколко години обаче производителите внедряват радикално променени архитектури, обикновено обвързани с появата на нова версия на графичния API DirectX. По принцип това трябваше да се случи през изминалата година, заедно с появата на Windows 7, но поради редица причини нещата не се стекоха в обичайното русло. От една страна TSMC меко казано се издъни с усвояването на 40-нанометровата производствена технология, която повлече със себе и огромно забавяне в появата на чиповете. Заедно с това процесът явно все още страда от някои проблеми и не предлага достатъчно стабилни добиви. ATI успяха да компенсират донякъде този проблем благодарение на опита от появилия се по-рано графичен чип RV740. В голяма степен Cyprеss запазва доста от познатите черти на RV700 поколението, като количествените промени са гарнирани и с някои качествени промени извън поддръжката на DX11. За Nvidia обаче проблемът се оказа много по-голям – компанията не само се забави с половин година за появата на първите си 40 мм. чипове, но освен това очакваният им нов флагман въвежда и много сериозни архитектурни промени, които не помагат за улесняване на задачата. В края на краищата чипът се забави с над половин година, през което време конкурентите им успяха да изкарат пълна продуктова гама от DX11 чипове. В края на краищата новият чип се появи и е време да се запознаем с характерните му особености и промените, които носи за бъдещето на компанията.
Да се срещнем с Ферми.
Nvidia продължават да именуват новите си архитектури на известни физици. И Тесла (GT200) и Ферми са сред основополагащите учени за съвременната Физика. GT200 не стана основополагащ графичен чип, но GF100 има шансове да стане повратна точка в развитието на графичните чипове. Самата архитектура с известно напъване може да се проследи до G80, но промените в нея са огромни, много по-големи в сравнение с тези в GT200. Предишните два чипа използваха по 8 АЛУ (Stream Processors, CUDA Cores и всякакви подобни маркетингови имена) комбинирани с 2 модула за специални операции (Special Function Units), които заедно с 16 KB локална памет образуваха основната изчислителна единица на чипа – поточния мултипроцесор (Streaming Multiprocessor). По-нататък два (G80) или 3 (GT200) ПМ блока се комбинираха с текстуриращ блок и управляваща логика, за да образуват клъстер за нишкова обработка (КНО, Thread Processing Cluster), като самия чип се състои от респективно 8 и 16 такива клъстера.
В GF100 организацията е кардинално променена, като вече нивото КНО липсва в йерархията, а поточния мултипроцесор е с 4 пъти увеличен брой АЛУ в себе си – цели 32 модула. В същото време МСО блоковете са само 2 пъти повече (4), като са добавени и 16 модула за зареждане/запис в от/в паметта (Load/Store Units). Текстуриращите модули вече са интегрирани в ПМ, като са 4 с отделен текстурен кеш. Всеки от тях може да изчислява по един адрес на такт и да зарежда по 4 семпъла, като връща един билинейно филтриран пиксел или 4 нефилтирирани стойности. Последната добавка в ПМ е така нареченият Polymorph Engine, който се грижи за теселацията и геометричната обработка, но повече за това след малко. Локалната памет е увеличена 4 пъти, като вече освен със софтуерно менажиране, може да работи и като стандартен L1 кеш, като може да се конфигурира във формат съответно 16/48 КБ или 48/16 КБ. Това е направено с цел запазване на съвместимостта със съществуващите CUDA приложения.
Самите ALU са претърпели сериозни изменения, като вече се поддържа пълноценна IEEE754-2008 точност при работа с плаваща запетая, а целочисленият модул е разширен, така че да може да обработва 32-битови цели стойности. Заедно с това вече може да за изпълнява инструкцията FMA (Fused Multiply-Add), която за разлика от обикновеното Multiply-Add изчисление използва закръгляване само на крайния резултат, а не и на междинната стойност, като така дава по-голяма точност. Подобрена е значително и производителността при изчисления с плаваща запетая при двойна точност, като вече не се използва отделен блок за целта, а работата се извършва в самите АЛУ. Скоростта в този случай е спада до ½ от производителността при единична точност, което е 4-5 пъти по-бързо в сравнение с GT200 и около 2 пъти по-бързо в сравнение със Cypress на ATI.
Текстуриращите модули са станали по-малко на брой в сравнение с GT200, но сега разполагат с увеличен текстурен кеш и с някои подобрения за увеличаване на ефективността. Според компанията значителното повишаване на ефективността трябва да доведе до там, че въпреки по-малкия брой блокове в чипа, текстуриращата производителност на Fermi ще е по-висока от тази на GT200. В добавка е възможно използването на ускорен jittered sampling, който помага за смекчаване на границите на сенките. В новия чип това е реализирано като единична векторна инструкция, докато в GT200 това може да се изпълни само с последователно извличане на всеки семпъл. Като част от добавената функционалност за поддръжка на DX11 е използването и на новите формати за компресиране на текстури BC6H и BC7. Въпреки тези подобрения, увеличеното съотношение между изчислителните блокове и текстуриращите блокове води до някои опасения относно производителността на чипа в по-старите игри. За сравнение, без да отчитаме разликата в тактовата честота, при GT200 съотношението беше 3:1. При Ферми това съотношение вече е 8:1. Отчитайки разликата в честотите между блоковете пък ефективното съотношение се променя на 6,8:1 и 16:1. Дори и ATI, които от много време залагат доста агресивно съотношение между изчислителните и текстуриращите блокове в чиповете си запазват от доста време съотношение 4:1. Нещо което липсва в описанието на блоковете е пълноценната ъглово независима анизотропна филтрация, която за пръв път от много години беше реализиран в новите чипове на ATI. При все това алгоритъмът на Nvidia е доста добър, но все пак това остава като слабо място спрямо конкуренцията в борбата за максимално качество.
За разлика от предходното поколение ПМ разполага с два отделни, независими диспечера за инструкции. GF100 запазва като базова единица за обработка така наречения уарп, съставен от 32 нишки, като всеки от диспечерите подава по една инструкция върху един уарп за два такта. Фактически това означава, че 32-те АЛУ могат да обработват едновременно две групи от 16 нишки поотделно. Заедно с това е възможно независимото изпълнение и на инструкции за зареждане/запис от паметта или на специални функции. Единственото сериозно ограничение е, че това важи само за работата с единична точност – ако се налага изпълнение на инструкции с двойна точност, то не е възможно комбинирането им с каквито и да е други инструкции, т.е. за два такта ще са заети само една група от функционални блокове. Причината за това най-вероятно е свързан с ограничени възможности за достъп до регистровия файл – работата с данни с двойна точност изисква двойно по-голяма пропускателна способност в сравнение с единична точност. При все това е осъществен огромен напредък спрямо предходното поколение, при което освен споменатото ограничение, не беше възможно да се изпълняват каквито и да е други операции докато има подадена инструкция към МСО блоковете, което означаваше в най-лошия случай 16 такта на бездействие.
No comments yet.