Daugiabranduoliai procesoriai rinkoje pasirodė jau senokai, bet iki šiol beveik nėra programų, gebančių išnaudoti visus jų skaičiavimo pajėgumus. Kompiuterių rinkoje skubama mėgautis šūkiais: ,,Keturis kartus didesnis našumas – už 700 Lt“. Čia turima galvoje Intel keturių branduolių procesorius „Core 2 Quad“. Žinoma, esant optimaliam operacinės sistemos ir programinės įrangos santykiui, šis procesorius lenkia brangiausius dvibranduolius procesorius. Tačiau nepaisant mažos kainos dauguma vartotojų laukia. Šiandien tik nedaugelis programų pajėgios suteikti didesnį našumą naudojant kelis branduolius. Kai kurios programos daugelio branduolių terpėje veikia lėčiau nei vieno.
Kodėl naujų procesorių potencialas atskleidžiamas taip sunkiai? Naujas lustų dizainas nėra vienintelė priežastis. Jei programinės įrangos kūrėjai iš karto numatytų darbą daugiabranduoliais procesoriais, šiandien išspaustų didesnį beveik visų programų našumą. Aptarsime problemas, kylančias kuriant daugiabranduolių procesorių programinę įrangą, taip pat supažindinsime su programinės įrangos našumo pokyčių matavimais (tai gali pateikti programos, skirtos darbui aštuonių branduolių procesoriais).
Daug srautų ir didysis paskirstymo menas
Tam, kad programa gebėtų naudotis keletu branduolių, ji turi veikti lygiagretumo režimu (yra atskiri skaičiavimo srautai – gijos (threads)). Esant daugelio srautų režimui (multithreading), programos dalis, reikalaujanti intensyvių skaičiavimų, gali veikti foniniu režimu. Bet, pavyzdžiui, programos sąsaja gali nuolat atsinaujinti kaip nedidelis atskiras duomenų srautas. Tiesa, tai beveik nesuteikia bendro našumo padidėjimo, nes operacijos (nors ir paskirstytos tolygiai per visą skaičiavimo laiką) vis dėlto atliekamos viena paskui kitą.
Procesoriai atskleidžia potencialąPateikiame spartos palyginimą procentais. Archyvavimo programa „WinRAR 3.71“ Silpnai. „WinRAR“ nėra skirta darbui su keliais branduoliais. Failo suspaudimo procesas beveik nepaspartėja. 3D žaidimas „World in Conflict“ Vidutiniškai. Tokie žaidimai kaip „World in Conflict“ paprastai spartina darbą tik su dviem arba keturiais branduoliais. Vaizdo kodavimo programa „MainConcept H.264 Pro“ Puikiai. Paralelizacija, koduojant vaizdo failą, daro šią programą gana efektyvią daugelio branduolių terpėje. |
---|
Hipersrautų (hiperthreading) technologijos „Intel Pentium 4“ procesoriai pradėjo veikti su dviem loginiais branduoliais, gebančiais vienu metu atlikti dvi skaičiavimo operacijas. Tačiau kilo rimtų problemų. Vienu metu vykdant du procesus, kuriems būtina prieiga prie vieno ištekliaus (pavyzdžiui, prie atmintinės ląstelės), vienas srautas gali atlikti skaičiavimus anksčiau. Tuo metu kito srauto skaičiavimo rezultatas bus dar neparuoštas, todėl šis srautas negali panaudoti bendro ištekliaus. Tai – vadinamoji lenktynių būsena (race-condition).
Kita problema – srautai gali trukdyti vienas kitam, laukdami prieigos prie vieno ištekliaus ir blokuodami tuo pat metu kitą. Ši būsena vadinama tarpusavio blokiruote (deadlock). Dvibranduoliuose procesoriuose problemos apsiriboja dviem srautais (threads), o didinant branduolių skaičių problemos gerokai sudėtingesnės, tad programinės įrangos kūrėjams tenka ieškoti naujų sprendimų.
Daugiabranduolių technologijų privalumai ir trūkumai
Priklausomybė nuo skaičiavimų dažnai trukdo efektyviai pritaikyti paralelizaciją. Pateiksime du pavyzdžius. Programa, kurioje kiekviena operacija reikalauja prieš tai buvusių skaičiavimų rezultato, nesuteikia skaičiavimų spartos padidėjimo. Klasikinis pavyzdys – kiškių populiacijos padidėjimo skaičiavimas (vadinamieji Fibonačio skaičiai).
Dauguma taikomųjų programų nepritaikytos keleto branduolių technologijoms. Archyvavimo programa „WinRAR 3.71“ naudoja tik vieną branduolį. Žaidimų kūrėjai taip pat neskuba (nors jiems paralelizacija turėtų būti gerai žinoma). Juk grafiniai lustai jau senokai atlieka lygiagrečius skaičiavimus. Tik kai kurie žaidimai (pavyzdžiui, World in Conflict) geba perkelti savo personažų dirbtinį intelektą ir skaičiavimus į keleto branduolių terpę. Todėl vartotojai, naudojantys dviejų ar keturių branduolių procesorius, gali pastebėti našumo padidėjimą.
Paralelizacija gali būti įdomi vaizdo kodavimui, nes leidžia pasiekti įspūdingą našumo didėjimą. Kvalifikuotas srautų formavimas suteikia galimybę greičiau įvykdyti transformaciją tarp dviejų atraminių kadrų arba judėjimo vektorių interpoliaciją. Štai kodavimo programa „H 264 Pro“, kurią sukūrė kompanija MainConcept, gerai veikia tiek su vienu, tiek su aštuoniais branduoliais.
Patogumas arba kruopštumas: „Intel Compiler 10“ prieš „OpenMP“
Siekdama išspręsti šias problemas, Intel programuotojams siūlo patogią paralelizacijos priemonę „Intel Compiler 10“ (bandomąją versiją galima atsisiųsti iš www.intel.com/software tinklalapio). Kompiliacijos proceso metu ši priemonė analizuoja programinį kodą ir, esant galimybei, padalija programą į keletą srautų. Aišku, „Intel Compiler 10“ nėra stebuklinga lazdelė – automatinė paralelizacija pavyksta tik tuo atveju, jei kompiliatorius „užtikrintas“, kad nebus anksčiau minėtų dead-lock arba race-condition situacijų. Be to, ši priemonė pasižymi konservatyvumu ir dažnai sukuria programas, gebančias skaičiuoti tik nuosekliai. Todėl tam tikrą optimizaciją gali pasiekti tik programuotojas, tiksliai žinantis, kokie jo programos elementai turi veikti nepriklausomai vienas nuo kito.
Nuo 1997 metų šiems tikslams naudojama programavimo sistema „OpenMP“, kuria programuotojas gali atlikti paralelizaciją su vienu ar kitu pradinio kodo elementu. „OpenMP“ veikia programuojant C/C++ ir FORTRAN kalbomis. Ekspertų nuomone, ši sistema yra idealus pagrindas kuriant daugiabranduolę programinę įrangą.
Informacija
- whatif.intel.com – tinklalapis programinės įrangos daugiabranduolių procesorių kūrėjams.
- www.openmp.org – „OpenMP“ rinkinio (kartu su dokumentacija) tinklalapis.