ПРОБЛЕМИ С МНОГОТО
ЯДРА
Многоядрените процесори
ще променят начина на мислене по отношение на компютърното инженерство, но само,
когато софтуера ги догони.
Peter Varhol
Днес сме
свидетели на друга компютърна революция близка до появата на евтините персонални
компютри и широко използваните 32-битови процесори. Тъй като все още сме в
началото й, реалните ползи могат да бъдат реализирани далеч във времето. Но ако
обърнат особено внимание на системите и софтуера, инженерите могат да постигнат
някои от тези ползи още днес.
За да се разбере тази
революция на многоядрените процесори и тяхното драматично влияние върху
производителността на системите, трябва да погледнем назад към произхода на
Закона на Мур. Той носи името на Гордън Мур, един от откривателите на
микропроцесора. Законът на Мур гласи, че плътността и производителността на микропроцесора се удвоява
приблизително на всеки 18 месеца.
Производителите на
процесори като Intel постигнат този стандарт до голяма степен чрез два метода:
по-високи скорости и по-малко компоненти. Това дава възможност да се прави един
оборот по-малко и да се комплектоват по няколко схеми на едно и също
място.
Фигура:
RapidMind ви
позволява да вземете съществуващо приложение, да го поставите върху работеща платформа и
платформата автоматично да намира и прилага възможности за паралелно изпълнение
на многоядрени системи.
Но нито един метод не може да продължи до
безкрай.
Тези ограничения, обаче не са в противоречие със закона на Мур. Микропроцесорите вече започнаха използването на множество вътрешни връзки като начин за по-добро използване на непрекъснатите цикли. Предприе се и следващата логична стъпка, тъй като конструкторите на процесора се занимават не само с вътрешни връзки, а също и със свързаните с тях основни вериги, да направиш матрица за един процесор е все едно да я направиш за многопроцесорни системи.
И сега всички ги имаме. Тази статия е
написана на двуядрен лаптоп, който е вече на три години. Ако използвате такъв
компютър, то следващия ви компютър почти сигурно ще има четириядрен процесор.
Потребителите на НРС, като инженерите конструктори, държат на многото ядра
поради изискването за бързина, особено при моделирането и симулацията в реално
време.
Но това не се постига толкова лесно.
Нито една операционни системи, нито софтуерно приложение, може все още да
използва пълноценно многото ядра. Минали са едно или повече десетилетия, преди
да можем напълно да се възползваме от всички предимства на днешните
технологии.
Но системните и софтуерни доставчици
ни помагат да стигнем до там. Intel предоставя инструменти за отстраняване на
грешки и профилиране на тези, които пишат и поддържа собствени кодове. Microsoft
и Linux общностите поддържат много добър паралелизъм между операционните
системи.
Многоядрените процесори разчитат на групи от единични ядра,
осигуряващи мощността им. Ядрото е набор от вериги и функции, определящи
естествената му способност да изпълнява инструкции. Това включва вътрешни
връзки, регулатори, изчислителни възли, чипове и изобщо всичко, различно от
периферни устройства и връзки, които свързват ядрата едно към друго и извън
процесора. Тъй като процесора се управлява от една верига, всяка стъпка във вътрешните връзки се извършва по точно определен
начин в ядрата, но тази верига управлява процесори с повече от едно ядро.
Фигура: Intel Atom използва две ядра, за да
постигне висока производителност в малък обем за малки компютри или вградени
системи.
Тъй като теоретично можем да
извършим голям брой операции в една верига, нуждата от високи скорости е
по-малка, което спестява топлинна енергия и понижава консумацията на
електроенергия. И докато използването на няколко ядра означава, че размерът на
матриците обикновено е по-голям, това води до опростяване на платката в
сравнение с тези при няколко отделни процесора.
Софтуера – тежката част
Въпреки че изглежда
съвсем лесно тези многоядрени процесори да се включат в настолни системи,
писането на софтуера, за да може да се използват пълноценно тези процесори е
много по-трудно. За да бъдат работещи всички ядра и да имат кодове от едно
приложение, се изискват много усилия и има предпоставки за грешки.
Писането многослойни (многонишкови)
приложения, които могат да работят паралелно, е една от най-трудните технически
дейности, с които компютърните специалисти се заемат. Има два вида непредвидени
грешки, на които можете да се наслаждавате, докато пишете такива приложения.
Първата е конкурентното състояние. Ако имате две отделни нива (нишки), а едно от
тях зависи от данните, получени от другото, какво ще се случи, ако първото ниво
се нуждае от данни, преди второто да ги е генерирало. Тогава първото допуска
грешки.
Тези конкурентни условия са особено
трудни за отстраняване на грешки, защото те възникнат привидно произволно.
Понякога те си взаимодействат успешно, тъй като „състезанието” е спечелено от
нивото, което предоставя данните. Друг път се проваля, тъй като данните, от
които се нуждае не са налични.
Вторият тип грешка е мъртвата точка
(безизходицата). Ако и двете нива изискват ресурс, притежаван от трето и не се
отказват, то нито едно от двете не може да продължи напред. Тъй като те обикновено са предназначени да задържат
ресурсите, докато сами не си генерират, нито
един от тях не може да приключи.
Тъй като Intel има
особен интерес да се гарантира успехът на многоядрените процесори, те са на
прага да създадат Intel Parallel Studio, набор от плъгини за Microsoft Visual
Studio, които да спомогнат за изграждане на приложения с паралелни компоненти.
Състои се от три компонента - Intel Parallel Composer, Intel Parallel Inspector
и Intel Parallel Amplifier. Intel Parallel Composer се състои от паралелен
плъгин дебъгер, който опростява отстраняването на грешки от паралелния код и
помага да се гарантира точността. Parallel Inspector открива грешки и дава
насоки по отношение на осигуряване на надеждно прилагане. Parallel Amplifier е
експлоатационен профил, спомагащ за лесно намиране на тясното място, без да е
необходимо да се знае архитектурата на процесора или монтажния код.
Иновационните third-party инструменти
са създадени също и да съдействат за изграждане на паралелни приложения.
RapidMind е платформа, която ви позволява да правите еднонишкови приложения и да
ги изпълните в RapidMind платформа за напълно защитени приложения (трябва само
да направите няколко малки промени в кода).
Друга компания, чиято
технология има потенциал за изпълнение на тези условия е Virtutech, чийто Simics
симулатор предвижда обратими дейности и отстраняване на грешки. Можете също така
да променяте скоростта на всяко ядро на симулирания процесор, за да откриете
причината за конкурентното състояние.
Накрая, CriticalBlue съвместява два
продукта даващи възможност на разработчиците на многоядрени устройства да
създават и подобряват паралелни приложения. Призмата позволява на разработчиците
да анализират кода за паралелните възможности, да извършват анализи от вида
„what-if” на паралелни стратегии, да декодират приложението, да проверяват
безопасността, както и да настройват резултата. Multicore Cascade добавя т.нар.
„cross-core” софтуерно разделение, анализ на задачите, както и проверка при
оптимизиране на софтуерната ефективност в рамките на архитектурата чрез смесване
на процесорите и Cascade ко-процесори.
Нито един от тези инструменти не
поддръжа днешното широко многонишково програмиране. RapidMind е ограничен до C +
+ (въпреки, че основателят и шеф на екипа от учени Michael McCool казва, че
бъдещите версии ще поддържат .NET), докато Virtutech цели разработка на вградена
система. Но средства като тези са начинът, по който трябва да преминем към
нарастващата захранваща мощност на бъдещите процесори.
Ползата за потребителите на високо
ниво
В най-добрия случай многоядрената обработка осигурява възможността едно приложение да има множество нишки (нива) на изпълнение. Ако използвате конструкторското приложение, например, можете да извършите цялостното конструиране и да започнете симулация във фонов режим, докато в същото време си водите бележки върху оригиналната конструкция.
На по-високо ниво,
многоядрените процесори също така ще позволят на инженерите и другите НРС
потребители да стартират едновременно две активни приложения. Днес, ние често
работим с няколко отворени приложения, но те работят едно по едно. В бъдеще,
многото ядра на процесора ще ни позволят да работим с две или повече приложения
по едно и също време и всяко от тях да е активно.
Това, което
многоядреният процесор няма да направи, е да ускори изпълнението на една задача.
Ако имате редица от приложения, зависими от цялата нишка или имате проблеми с
потребителите с едно приложение, то тогава вероятно ще видите много малко или
почти никакво подобрение в получените резултати.
По-доброто използване на процесора с
няколко ядра ще стане постепенно, на етапи. Така че повишаването на
производителността на многоядрените процесори все още е доста далеч. Но има
доставчици на софтуер за конструиране, които предоставят такива и днес.
Консултирайте се с вашия софтуерен доставчик; дали поддържа паралелни операции и
незабавно обновяване на многоядрени машини. Ако не, следете продуктовата линия,
както и хардуерните ъпгрейди и се възползвайте. Но бъдете готови за бум при
многоядрените приложения в бъдеще.
Peter Varhol се
занимава с разработка на софтуер и системи за управление от много
години.