Bulldozer – архитектурата на бъдещето AMD
Появата на нова процесорна архитектура е много рядко явление в наши дни. И то говорим за радикална, сериозна промяна, а не за редовните ъпгрейди на една база. За такава радикална промяна при AMD се заговори още преди 5 години, малко след закупуването на ATI Technologies. Тази архитектура претърпя няколко сериозни отлагания във времето, включително и през миналия месец, когато се очакваще най-накрая да се появи. Е, всяко очакване обикновено си има край и ето че Bulldozer най-накрая достигна до пазара под формата на процесорната фамилия AMD FX. Така че нека да видим какво представляват и какво ни предоставят новите процесори.
Малко теория
Първо обаче ще направим малко отклонение относно съвременните процесорни архитектури. Преди няколко години на десктоп пазара настъпи голяма промяна – дотогавашното развитие на на процесорите състоящо се в нарастване единствено на производителността на един процесор изпълняващ една програма/инструкционен поток, беше заместено от нарастване както на производителността на процесора, така и на възможностите му да изпълнява по няколко потока едновременно. По този начин потребителите могат да работят както по-ефективно с множество приложения едновременно, така и позволи различни задачи, които могат да се раделят на по-малки части способни да се изпълняват едновременно, да бъдат изчислявани по-бързо. Самата концпеция на паралелното изпълнение съществува отдавна и се използва много активно при сървърите и работните станции, но прилагането й и за масовите компютри дотогава не беше популярно. Днес на практика почти всеки съвременен процесор поддържа възможности за много поточно изпълнение под някаква форма. Съответно развитието на софтуера през последните години много напредна в тази потока и огромна част от програмите са оптимизирани за многопоточна работа.
За целите на занятието искам да дефинираме и понятието „процесорно ядро“ – това е съвкупност от функционални блокове, които самостоятелно могат да изпълнят пълния набор инструкции на дадена архитектура и в комбинация с шинен интерфейс може да комуникира с останалите компоненти на компютъра, образувайки един централен процесор. Защо това определени е важно ще разберете по-късно.
От гледна точка на използваните архитектури при процесорите в момента можем демонстрираме следните различни подходи:
- Single core/single thread processing или еднопоточен процесор – това е процесор, които разполага с едно-единствено процесорно ядро и може да изпълнява един-единствен инструкционен поток в даден момент от време. На подобен процесор е възможно изпълнението на няколко програми/потока, като се работи на принципа на времеделенето – всяка програма заема процесора за даден период от време и след това предава управлението на друга. Това, разбира се, е доста нефективен начин за многопоточна работа.
- Symmetric Multiprocessing (СМP) или симетричната многопроцесорна архитектура е първият вариант да се разреши проблема с по-ефективната многопоточна работа и се базира на принципа, че няколко еднопоточни процесора могат да се обединят в една система, като комуникират с обща памет през общ шинен интерфейс. Така всеки процесор може да изпълнява собствен инструкционен поток, който може да бъде както различни програми, така част от една програма. Производителността на подобна система може грубо да се определи като сбор от производителността на отделните процесори.
- Chip Multiprocessing (CMP) или многопоточно изпълнение на ниво чип – това е следващата еволюция на многопоточната обработка като с нарастването на степента на интеграция стана възможно СМP да се реализира в един чип. Така е възможно един процесор да има 2 или повече процесорни ядра, които комуникират в обща среда и са свързани към общ контролер на паметта. На тази база може да се изгради и отделен процесор, като просто се махнат допълнителните процесорни ядра.
- Simultaneous Multithreading (SMT или както е популярно при процесорите на Intel – Hyperthreading) или едновременно многопоточно изпълнение – тази архитектура е директно развитие на принципа на времеделeнето при еднопоточните процесори. Първите процесори са имали по един изчислителен конвейер, докато съвременните разполагат с няколко. Обикновено те не могат да бъдат максимално натоварени от една програма и част ресурсите стоят неизползвани. На това се базира и и едновременното многопоточно изпълнение – процесорното ядро се екипира с допълнителен(ни) инстукционен(ни) указател(и), които позволяват да се следи изпълнението на две или повече програми едновременно. С добавянето на малко допълнителна логика (само няколко процента повече), процесорното ядро може да разпределя инкструкциите от различните потоци по различните блокове, като подобри ефективността на използването им. При това обаче се споделят множество общи ресурси, което може да доведе до неефективно изпълнение на потоците и в никой случай не може да се доближи като производителност до процесор с еквивалентен брой реални ядра. За това процесорното ядро трябва да е с доста висока изчислителна мощност, за да има полза от SMT.
- Clusterеd Multithreading или клъстерна многопоточна обработка – това е сравнително по-нова концепция и попада някъде между CMP и SMP. Идеята при нея е, че изчислителните ресурси се групират в два или повече клъстери от няколко елемента, които могат да работят относително независимо, разполагайки със собствен диспечер. При това се дублират най-често натоварваните от програмите елементи, а не целите процесорни ядра. Всеки от клъстерите се вижда от операционната система и може да изпълнява отделен инструкционен поток, без при това да се налага да споделя изчислителните си блокове с някой от останалите клъстери. По този начин ядрото може да работи с няколко потока, но всеки от потоците получава заделени само за себе си ресури, което води до значително по-голям прираст на производителността спрямо ЕМИ и до по-консистентно поведение на различните програми.
Важно е да се разбере, че няма „правилен“ и „неправилен“ подход, като всеки има преимущества и недостатъци в различни ситуации. Нещо повече – напълно е възможно комбинирането на всички многопоточни архитектури в рамките на една компютърна система. Например може да разполагате с двупроцесорна система, всеки от чиповете на която е съставен примерно от 4 ядра, всяко с по четири целочислени клъстера, всеки от които подържащ изпълнение на по 2 нишки едновременно. Това разбира се е чисто хипотетична ситуация, макар че в реалността съществуват подобни проекти.