Ti nisi rob!
Zatvoreni edukativni kurs za djecu elite: "Pravo uređenje svijeta."
http://noslave.org
Iz Wikipedije, slobodne enciklopedije
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). | ||||||||||||||||||||||||||||||||||||
Tip | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Autor |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Developer | ||||||||||||||||||||||||||||||||||||
Developers |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Upisano |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Interface |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
operativni sistem | ||||||||||||||||||||||||||||||||||||
Jezici interfejsa |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Prvo izdanje |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Hardverska platforma | ||||||||||||||||||||||||||||||||||||
najnoviju verziju | ||||||||||||||||||||||||||||||||||||
osloboditi kandidata |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
beta verzija |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
alfa verzija |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Test verzija |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Čitljivi formati datoteka |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Generisani formati datoteka |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Država |
Lua greška u Modulu:Vikipodaci na liniji 170: pokušaj indeksiranja polja "wikibase" (nula vrijednost). |
|||||||||||||||||||||||||||||||||||
Licenca |
Ključne karakteristike:
Kompajler podržava OpenMP 3.0 standard za pisanje paralelnih programa. Takođe sadrži modifikaciju OpenMP-a pod nazivom Cluster OpenMP, sa kojom možete pokrenuti aplikacije napisane prema OpenMP-u na klasterima koristeći MPI. Intel C++ kompajler koristi frontend (deo kompajlera koji analizira program koji se kompajlira) iz Edison Design Group. Isti frontend koriste kompajleri SGI MIPSpro, Comeau C++, Portland Group. Ovaj kompajler se naširoko koristi za kompajliranje SPEC CPU referentnih vrednosti. Postoje 4 serije proizvoda kompanije Intel koji sadrže kompajler:
Nedostaci Linux verzije kompajlera uključuju djelomičnu nekompatibilnost sa GNU ekstenzijama jezika C (podržane od strane GCC kompajlera), što može uzrokovati probleme pri kompajliranju nekih programa.
Eksperimentalne varijanteObjavljene su sljedeće eksperimentalne verzije kompajlera:
Glavne zastave
Napišite recenziju na članak "Intel C++ kompajler"Bilješkevidi takođeLinkovi
Izvod koji karakteriše Intel C++ kompajlerPa ipak, vratila se da bi poslednji put videla Belog maga... Njenog muža i najiskrenijeg prijatelja, kojeg nikada nije mogla zaboraviti. U srcu mu je oprostila. Ali, na njegovu veliku žalost, nije mu mogla donijeti oproštenje Magdalene.... Dakle, kao što vidite, Isidora, velika kršćanska bajka o "oprostu" je samo djetinjasta laž za naivne vjernike da im dopuste bilo šta. Zlo, znajući da će im na kraju biti oprošteno šta god da urade. Ali možete oprostiti samo ono što je zaista vrijedno oprosta. Čovek mora da shvati da za svako učinjeno zlo mora da odgovara... I to ne pred nekim misterioznim Bogom, već pred samim sobom, primoravajući sebe da surovo pati. Magdalena nije oprostila Vladiki, iako ga je duboko poštovala i iskreno voljela. Kao što nije uspjela svima nama oprostiti strašnu Radomirovu smrt. Uostalom, ONA je najbolje razumjela - mogli smo mu pomoći, mogli smo ga spasiti od okrutne smrti... Ali nismo htjeli. Smatrajući krivicu Belog Maga preokrutnom, ostavila ga je da živi sa tom krivicom, ne zaboravljajući je ni na trenutak... Nije htela da mu oprosti lakši oprost. Nikad je više nismo videli. Kao nikad vidjela svoje bebe. Preko jednog od vitezova njenog Hrama – našeg čarobnjaka – Magdalena je prenela odgovor Gospodu na njegovu molbu da nam se vrati: „Sunce ne izlazi dvaput u jednom danu... Radost tvoga sveta (Radomir) nikada neće vratiti se tebi, kao sto se necu vratiti tebi i ja... nasao sam svoju VJERU i svoju ISTINU, oni su ZIVE, tvoj je MRTVA... Oplakuj sinove svoje - voljeli su te. Nikad ti neću oprostiti njihovu smrt dok sam živ. I neka vaša krivica ostane sa vama. Možda će ti jednog dana doneti Svetlost i Oprost... Ali ne od mene. Glava maga Jovana nije dovedena na Meteore iz istog razloga - niko od vitezova Hrama nije hteo da nam se vrati... Izgubili smo ih, kao što smo izgubili i mnoge druge više puta, koji nisu želeli da razumeju i prihvatite naše žrtve... Ko je to baš kao i vi - otišli su, osuđujući nas.Vrtelo mi se u glavi!.. Kao žedan, zadovoljavajući svoju večnu glad za znanjem, pohlepno sam upijao tok neverovatnih informacija koje je velikodušno davao Sever... I želeo sam mnogo više!.. Hteo sam da saznam sve do kraja . Bio je to dašak slatke vode u pustinji sprženoj bolom i nesrećom! I nisam mogao dovoljno piti... Imam hiljadu pitanja! Ali nema više vremena... Šta da radim, Sever? .. - Pitaj Isidora!.. Pitaj, pokušaću da ti odgovorim... - Reci mi, Sever, zašto mi se čini da su u ovoj priči dvije životne priče, isprepletene sličnim događajima, povezane, a predstavljene kao život jedne osobe? Ili nisam u pravu? – Potpuno si u pravu, Isidora. Kao što sam vam ranije rekao, „moćnici ovoga sveta“, koji su stvorili lažnu istoriju čovečanstva, „stavili su“ na pravi Hristov život vanzemaljski život jevrejskog proroka Jošue, koji je živeo pre hiljadu i po godina. (još od priče o Sjeveru). I ne samo sebe, već i njegovu porodicu, rodbinu i prijatelje, prijatelje i pratioce. Na kraju krajeva, to je bila žena proroka Jošue, Jevrejka Marija, koja je imala sestru Martu i brata Lazara, majčinu sestru Mariju Jakobe i druge koji nikada nisu bili blizu Radomira i Magdalene. Kao što pored njih nije bilo drugih "apostola" - Pavla, Mateja, Petra, Luke i ostalih... Bila je to porodica proroka Jošue koja se prije hiljadu i po godina preselila u Provansu (koja se u to vrijeme zvala Galija (Transalpinska Galija), u grčki grad Masalija (danas Marseille), budući da je Masalija u to vrijeme bila “kapija” između Evrope i Azije, i to je bio najlakši način da svi “progonjeni” izbjegnu progon i nesreću.
|
Uvod Krajem 2003. Intel je predstavio verziju 8.0 svoje kolekcije kompajlera. Novi prevodioci su dizajnirani da poboljšaju performanse aplikacija koje rade na serverima, desktop računarima i mobilni sistemi(laptopovi, mobilni telefoni i PDA) zasnovani na Intel procesori. Zadovoljstvo nam je napomenuti da je ovaj proizvod kreiran uz aktivno učešće zaposlenika Intelovog centra za razvoj softvera u Nižnjem Novgorodu i Intelovih stručnjaka iz Sarova.
Nova serija uključuje Intel kompajlere za C++ i Fortran za Windows i Linux, kao i Intel kompajlere za C++ za Windows CE .NET. Kompajlatori ciljaju sisteme zasnovane na sljedećim Intel procesorima: Intel Itanium 2, Intel Xeon, Intel Pentium 4, Intel Personal Internet Client Architecture procesori za mobilne telefone i PDA, i Intel Pentium M procesor za mobilne računare (komponenta Intel Centrino tehnologije za mobilne telefone). PC).
Intel Visual Fortran Compiler za Windows pruža tehnologiju kompilacije nove generacije za računarstvo visokih performansi. Kombinira funkcionalnost Compaq Visual Fortran (CVF) jezika s poboljšanjima performansi koja su omogućena Intelovim tehnologijama za optimizaciju kompilacije i generiranja koda i pojednostavljuje zadatak portiranja izvorni kod, razvijen sa CVF-om, u Intel Visual Fortran okruženje. Ovaj kompajler je prvi koji implementira CVF funkcije za 32-bitne Intel sisteme i sisteme zasnovane na porodici Intel Itanium procesora koji rade u Windows okruženje. Pored toga, ovaj kompajler vam omogućava da implementirate funkcije CVF jezika na Linux sisteme zasnovane na 32-bitnim Intel procesorima i porodici Intel Itanium procesora. U 2004. godini planirano je izdavanje proširene verzije ovog kompajlera - kompajlera Intel Visual Fortran Compiler Professional Edition za Windows, koji će uključivati IMSL Fortran 5.0 biblioteku koju je razvio Visual Numerics, Inc.
"Novi kompajleri takođe podržavaju Intelove nadolazeće procesore, kodnog naziva Prescott, koji pružaju nove komande za poboljšanje grafičkih i video performansi, kao i druga poboljšanja performansi. Takođe podržavaju nova tehnologija Mobilni MMX(tm), koji na sličan način poboljšava performanse grafičkih, zvučnih i video aplikacija za mobilne telefone i PDA uređaje, - rekao je Aleksej Odinokov, ko-direktor Intelovog centra za razvoj softvera u Nižnjem Novgorodu. - Ovi prevodioci pružaju programerima aplikacija jedan skup alata za pravljenje novih aplikacija bežične mreže baziran na Intel arhitekturi. Novi Intelovi kompajleri takođe podržavaju Intelovu Hyper-Threading tehnologiju i industrijsku specifikaciju OpenMP 2.0, koja definiše upotrebu direktiva visoki nivo za kontrolu toka instrukcija u aplikacijama".
Među novim alatima uključenim u kompajlere su Intel Code Coverage i Intel Test Prioritization alati. Zajedno, ovi alati pomažu da se ubrza razvoj aplikacija i poboljša kvalitet aplikacije poboljšavajući proces testiranja. softver.
Alat za pokrivanje koda, prilikom testiranja aplikacije, pruža potpune detalje o korištenju logike aplikacije i lokaciji područja koja se koriste u izvornom kodu aplikacije. Ako se naprave promjene u aplikaciji ili ako ovaj test ne dozvoljava provjeru dijela aplikacije koji je od interesa za programera, alat za određivanje prioriteta testa omogućava vam da provjerite rad odabranog područja programski kod.
Novi Intel kompajleri dolaze u raznim konfiguracijama u rasponu od 399 USD do 1,499 USD. Danas se mogu kupiti od Intel Corporation ili od preprodavaca širom svijeta, čija se lista nalazi na web stranici. http://www.intel.com/software/products/reseller.htm#Russia.
Podrška za Prescott procesore
Podrška za Intel Pentium 4 (Prescott) procesor u osmoj verziji kompajlera je sljedeća:1. Podrška za SSE3 komande (ili PNI, Prescott New Instructions). Ovdje postoje tri načina za isticanje:
A. Montažni umetci (Inline Assembly). Na primjer, kompajler će prepoznati sljedeću upotrebu SSE3 naredbe _asm(addsubpd xmm0, xmm1). Dakle, korisnici zainteresovani za optimizaciju niskog nivoa mogu direktno pristupiti komandama asemblera.
b. U C/C++ kompajleru, nove instrukcije su dostupne sa višeg nivoa od korišćenja asemblerskih umetaka. Naime, kroz ugrađene funkcije (intrinzične funkcije):
Ugrađene funkcije
ugrađena funkcija | Generirana komanda |
---|---|
_mm_addsub_ps | Addsubps |
_mm_hadd_ps | Haddps |
_mm_hsub_ps | Msubps |
_mm_moveldup_ps | Movsldup |
_mm_movehdup_ps | Movshdup |
_mm_addsub_pd | Addsubpd |
_mm_hadd_pd | Haddpd |
_mm_hsub_pd | hsubpd |
_mm_loaddup_pd | movddup xmm, m64 |
_mm_movedup_pd | movddup reg, reg |
_mm_lddqu_si128 | Lddqu |
Tabela prikazuje ugrađene funkcije i odgovarajuće asemblerske upute iz SSE3 seta. Ista podrška postoji za naredbe iz skupova MMX\SSE\SSE2. Ovo omogućava programeru da izvrši optimizaciju koda niskog nivoa bez pribjegavanja programiranju asemblerskog jezika: kompajler se sam brine o mapiranju (mapiranju "e) ugrađenih funkcija u odgovarajuće procesorske instrukcije i optimalnoj upotrebi registara. Programer može koncentrirati se na kreiranje algoritma koji efikasno koristi nove skupove instrukcija.
V. Automatsko generiranje novih naredbi od strane kompajlera. Prethodne dvije metode uključuju korištenje novih naredbi od strane programera. Ali kompajler takođe može (koristeći odgovarajuće opcije - vidi odeljak 3 ispod) da automatski generiše nove instrukcije iz SSE3 seta za C/C++ i Fortran kod. Na primjer, optimizirana naredba za neusklađeno učitavanje (lddqu), koja vam omogućava da dobijete povećanje performansi do 40% (na primjer, u zadacima kodiranja videa i zvuka). Ostale komande iz SSE3 skupa omogućavaju vam da dobijete značajno ubrzanje u 3D grafičkim zadacima ili računskim zadacima koristeći kompleksne brojeve. Na primjer, grafikon u odjeljku 3.1 ispod pokazuje da je za 168.wupwise aplikaciju iz paketa SPEC CPU2000 FP, ubrzanje dobiveno automatskim generiranjem SSE3 instrukcija iznosilo ~25%. Izvedba ove aplikacije uvelike ovisi o brzini aritmetike kompleksnih brojeva.
2. Korišćenje mikroarhitektonskih prednosti Prescott procesora. Prilikom generisanja koda, kompajler uzima u obzir mikroarhitektonske promjene u novom procesoru. Na primjer, neke operacije (kao što su pomaci cijelih brojeva, množenja cijelih brojeva ili konverzije brojeva između različitih formata s pomičnim zarezom u SSE2) su brže na novom procesoru u odnosu na prethodne verzije (recimo, pomak cijelog broja sada traje jedan ciklus procesora u odnosu na četiri za prethodna verzija). Intel Pentium 4 procesor). Intenzivnije korištenje ovakvih naredbi omogućava vam značajno ubrzanje aplikacija.
Još jedan primjer mikroarhitektonskih promjena je poboljšani mehanizam prosljeđivanja skladišta (brzo učitavanje podataka prethodno pohranjenih u memoriji); Pravo spremanje se čak i ne dešava u keš memoriji, već u nekom srednjem baferu za spremanje, koji onda omogućava vrlo brz pristup podacima. Takva karakteristika arhitekture omogućava, na primjer, izvođenje agresivnije automatske vektorizacije programskog koda.
Kompajler takođe uzima u obzir povećanu količinu keš memorije na prvom i drugom nivou.
3. Poboljšana podrška za Hyper-Threading tehnologiju. Ova stavka može biti povezana s prethodnom - mikroarhitektonske promjene i njihova upotreba u kompajleru. Na primjer, runtime biblioteka koja podržava industrijsku specifikaciju OpenMP optimizirana je za rad na novom procesoru.
Performanse
Korišćenje kompajlera je jednostavan i efikasan način da se iskoristi prednost Intel procesorske arhitekture. U nastavku su uslovno (veoma) istaknuta dva načina korišćenja kompajlera: a) rekompilacija programa sa moguća promjena postavke kompajlera, b) ponovna kompilacija sa promjenom postavki kompajlera i izvornog teksta, kao i korištenje dijagnostike kompajlera za tekuće optimizacije i moguću upotrebu drugih softverski alati(na primjer, profileri).1.1 Optimizacija programa ponovnim kompajliranjem i promjenom postavki kompajlera
Često je prvi korak u prelasku na novi optimizirajući kompajler korištenje sa zadanim postavkama. Sljedeći logičan korak je korištenje opcija za agresivniju optimizaciju. Slike 1, 2, 3 i 4 pokazuju efekat prelaska na Intelov kompajler verziju 8.0 u poređenju sa korišćenjem drugih proizvoda vodećih u industriji (-O2 - podrazumevane postavke kompajlera, baza - postavke na maksimalne performanse). Poređenje je napravljeno na 32-bitnoj i 64-bitnoj Intel arhitekturi. Aplikacije iz SPEC CPU2000 se koriste kao testni set.
Slika 1
Slika 2
Slika 3
Slika 4
Neke od opcija su navedene u nastavku (u daljem tekstu, opcije su za porodicu Windows OS; za porodicu Linux OS postoje opcije sa istim efektom, ali se naziv može razlikovati; na primjer, -Od ili QxK za Windows imaju sličan efekat sa -O0 ili -xK za Linux respektivno, više detaljne informacije može se naći u priručniku kompajlera) koje podržava Intelov kompajler.
Kontrola nivoa optimizacije: Opcije -Od (bez optimizacija; koristi se za otklanjanje grešaka u programima), -O1 (maksimalna brzina uz minimiziranje veličine koda), -O2 (optimizacija za brzinu izvršavanja koda; koristi se po defaultu), -O3 (omogućava najagresivnije optimizacije za izvršenje koda brzina; u nekim slučajevima može dovesti do suprotnog efekta, odnosno do usporavanja; treba napomenuti da na IA-64 upotreba -O3 u većini slučajeva dovodi do ubrzanja, dok je pozitivan efekat na IA-32 manje izražen ). Primjeri optimizacija koje omogućava -O3 su razmjena petlji, fuzija petlje, distribucija petlje (optimizacija fuzije obrnute petlje), softversko prethodno preuzimanje podataka. Razlog zašto je sporost moguća kada se koristi -O3 može biti taj što je kompajler koristio heuristički pristup za odabir agresivne optimizacije za konkretan slučaj, bez dovoljno informacija o programu (na primjer, generirane instrukcije prethodnog preuzimanja za podatke koji se koriste u petlji, vjerujući da se petlja izvršava veliki broj puta, a zapravo ima samo nekoliko iteracija). Optimizacija međuproceduralnog profilisanja, kao i razni programerski "nagoveštaji" (pogledajte odeljak 3.2) mogu pomoći u ovoj situaciji.
Interproceduralna optimizacija: -Qip (unutar jedne datoteke) i -Qipo (unutar nekoliko ili svih projektnih datoteka). Uključuje takve optimizacije kao što je, na primjer, inline zamjena često korištenog koda (smanjenje cijene poziva funkcije/procedure). Predstavlja informacije za druge faze optimizacije - na primjer, informacije o gornjoj granici petlje (recimo, ako je to konstanta vremena kompajliranja definirana u jednoj datoteci, ali se koristi u mnogim) ili informacije o poravnanju podataka u memoriji (mnogi MMX \SSE\SSE2\SSE3 komande rade brže ako su operandi poravnati u memoriji na granici od 8 ili 16 bajtova). Analiza procedura alokacije memorije (implementirane/pozvane u jednoj od projektnih datoteka) se prosljeđuju onim funkcijama/procedurama u kojima se ova memorija koristi (ovo može pomoći kompajleru da napusti konzervativnu pretpostavku da podaci nisu pravilno usklađeni u memoriji; a pretpostavka bi trebala biti konzervativna kada nema dodatnih informacija). Kao još jedan primjer može poslužiti analiza pseudonima podataka: u nedostatku dodatnih informacija i nemogućnosti dokazivanja odsustva raskrsnica, kompajler polazi od konzervativne pretpostavke da ukrštanja postoje. Takva odluka može negativno utjecati na kvalitetu takvih optimizacija kao što je, na primjer, automatska vektorizacija na IA-32 ili softverski cjevovod (software pipelining ili SWP) na IA-64. Međuproceduralna optimizacija može pomoći u analizi prisutnosti memorijskih raskrsnica.
Optimizacija profilisanja: Uključuje tri faze. 1) generiranje instrumentiranog koda pomoću opcije -Qprof_gen. 2) rezultujući kod se pokreće na reprezentativnim podacima, dok se tokom rada prikupljaju informacije o različitim karakteristikama izvršavanja koda (na primer, verovatnoće prelaza ili tipična vrednost za broj iteracija petlje). 3) Rekompilacija sa opcijom -Qprof_use, koja osigurava da kompajler koristi informacije prikupljene u prethodnom koraku. Dakle, kompajler ima mogućnost da koristi ne samo statičke procene važnih karakteristika programa, već i podatke dobijene tokom stvarnog pokretanja programa. Ovo može pomoći pri naknadnom odabiru određenih optimizacija (na primjer, efikasniji raspored u memoriji različitih grana programa, na osnovu informacija o tome koje su grane izvršene na kojoj frekvenciji; ili primjena optimizacije na petlju na osnovu informacija o tipičan broj iteracija u njemu). Optimizacija profilisanja je posebno korisna kada je moguće odabrati mali, ali reprezentativan skup podataka (za korak #2) koji dobro ilustruje najtipičnije buduće slučajeve upotrebe programa. U nekim predmetnim oblastima izbor ovakvog reprezentativnog skupa je sasvim moguć. Na primjer, optimizaciju profiliranja koriste programeri DBMS-a.
Gore navedene optimizacije su generičkog tipa, tj. generisani kod će raditi na svim različitim procesorima iz porodice (recimo, u slučaju 32-bitne arhitekture, na svim sledećim procesorima: Intel Pentium-III, Pentium 4, uključujući Prescott jezgro, Intel Pentium M). Postoje i optimizacije za određeni procesor.
Specifične optimizacije procesora: -QxK (Pentium-III; upotreba SSE komandi, specifičnosti mikroarhitekture), -QxW i -QxN (Pentium 4; upotreba SSE i SSE2 naredbi, specifičnosti mikroarhitekture), -QxB (Pentium M; upotreba SSE i SSE2 naredbi, specifičnosti mikroarhitekture) ), QxP (Prescott; upotreba SSE, SSE2 i SSE3 komandi, karakteristike mikroarhitekture). U ovom slučaju, kod generiran korištenjem ovih opcija možda neće raditi na drugim predstavnicima porodice procesora (na primjer, -QxW kod može rezultirati izvršenjem nevažeće komande ako se izvršava na sistemu zasnovanom na Intel Pentium-III procesor). Ili ne radite s maksimalnom efikasnošću (na primjer, -QxB kod na Pentium 4 procesoru zbog razlika u mikroarhitekturi). Uz ove opcije, također je moguće koristiti runtime biblioteke optimizirane za određeni procesor koristeći njegov skup instrukcija. Da bi se kontrolisalo da se kod zaista izvršava na ciljnom procesoru, implementiran je mehanizam za otpremu (cpu-dispatch): provjera procesora tokom izvršavanja programa. U različitim situacijama ovaj mehanizam se može aktivirati ili ne aktivirati. Otpremanje se uvijek koristi ako se koristi varijacija opcije -Qax(KWNP). U ovom slučaju se generišu dvije verzije koda: optimizovana za određeni procesor i "opšta" (generička), izbor se dešava tokom izvršavanja programa. Dakle, povećanjem veličine koda moguće je postići izvršavanje programa na svim procesorima linije i optimalno izvršenje na ciljnom procesoru. Druga opcija je korištenje optimizacije koda za prethodnog predstavnika linije i korištenje ovog koda na ovom i narednim procesorima. Na primjer, -QxN kod može raditi na Pentium 4 sa Northwood i Prescott jezgrama. Nema povećanja veličine koda. Ovim pristupom možete postići dobre, ali još uvijek ne optimalne performanse na sistemu sa Prescott procesorom (jer se SSE3 ne koristi i razlike u mikroarhitekturi se ne uzimaju u obzir) uz optimalne performanse na Northwoodu. Slične opcije postoje i za procesore arhitekture IA-64. On ovog trenutka postoje dva od njih: -G1 (Itanium) i -G2 (Itanium 2; podrazumevana opcija).
Grafikon ispod (Slika 5) prikazuje ubrzanje (zasnovano na jednom - bez ubrzanja) korištenjem nekih od gore navedenih optimizacija (naime -O3 -Qipo -Qprof_use -Qx(N,P)) na Prescott procesoru u poređenju sa zadanim postavkama (-O2). Korištenje -QxP pomaže u nekim slučajevima da se postigne ubrzanje u odnosu na -QxN. Najveće ubrzanje postiže se u 168.wupwise aplikaciji već spomenutoj u prethodnom dijelu (zbog intenzivne optimizacije složene aritmetike korištenjem SSE3 instrukcija).
Slika 5
Slika 6 ispod prikazuje omjer (u vremenima) brzine koda sa optimalne postavke u poređenju sa potpuno neoptimiziranim kodom (-Od) na procesorima Pentium 4 i Itanium 2. Vidi se da Itanium 2 mnogo više zavisi od kvaliteta optimizacije. Ovo je posebno izraženo kod proračuna s pomičnim zarezom (FP), gdje je omjer oko 36 puta. Izračuni s pomičnim zarezom su jaka tačka IA-64 arhitekture, ali se mora voditi računa o korištenju najefikasnijih postavki kompajlera. Rezultirajući dobitak u produktivnosti plaća rad utrošen na njihovo pronalaženje.
Slika 6. Ubrzanje pri korištenju najboljih opcija optimizacije SPEC CPU200
Intel kompajleri podržavaju OpenMP industrijsku specifikaciju za izgradnju višenitnih aplikacija. Podržana je eksplicitna (opcija -Qopenmp) i automatska (-Qparallel) paralelizacija. U slučaju eksplicitnog načina rada, programer je odgovoran za ispravnu i efikasnu upotrebu OpenMP standarda. U slučaju automatske paralelizacije, kompajler ima dodatno opterećenje povezano sa analizom programskog koda. Iz tog razloga, trenutno automatska paralelizacija efikasno radi samo na prilično jednostavnim kodovima.
Grafikon na slici 7 pokazuje ubrzanje od upotrebe eksplicitne paralelizacije na inženjerskom (preprodukcijskom) uzorku sistema zasnovanog na Intel Pentium 4 procesoru (Prescott) sa podrškom za Hyper-Threading tehnologiju: 2,8 GHz, 2 GB RAM-a, 8K L1-Cache, 512K L2-Cache . SPEC OMPM2001 se koristi kao testni paket. Ovaj set se fokusira na male i srednje SMP sisteme, potrošnja memorije je do dva gigabajta. Aplikacije su kompajlirane koristeći Intel 8.0 C/C++ i Fortran sa dva skupa opcija: -Qopenmp -Qipo -O3 -QxN i -Qopenmp -Qipo -O3 -QxP, sa svakom od kojih su aplikacije počinjale sa omogućenim i onemogućenim Hyper-Threadingom . Vrijednosti ubrzanja na grafikonu normalizirane su na performanse jednonitne verzije s onemogućenim Hyper-Threadingom.
Slika 7: Aplikacije iz paketa SPEC OMPM2001 na Prescott procesoru
Može se vidjeti da u 9 od 11 slučajeva korištenje eksplicitne paralelizacije pomoću OpenMP-a daje povećanje performansi kada je omogućena Hyper-Threading tehnologija. Jedna aplikacija (312.swim) se usporava. Poznata je činjenica da ovu aplikaciju karakteriše visok stepen zavisnosti od propusni opseg memorija. Kao i kod SPEC CPU2000, wupwise ima velike koristi od Prescott optimizacije (-QxP).
1.2 Optimizacija programa sa promenama izvornog koda i korišćenjem dijagnostike kompajlera
U prethodnim odeljcima razmatrali smo uticaj kompajlera (i njegovih postavki) na brzinu izvršavanja koda. Istovremeno, Intel kompajleri pružaju više mogućnosti za optimizaciju koda nego samo mijenjanje postavki. Konkretno, kompajleri omogućavaju programeru da napravi "nagoveštaje" u programskom kodu, koji omogućavaju generisanje efikasnijeg koda u smislu performansi. Ispod su neki primjeri za jezik C/C++ (postoje slični alati za jezik Fortran, koji se razlikuju samo u sintaksi).
#pragma ivdep (gdje ivdep znači zanemariti vektorske ovisnosti) se koristi prije programskih petlji da se kompajleru kaže da unutra nema ovisnosti o podacima. Ovaj nagoveštaj funkcioniše kada kompajler (na osnovu analize) konzervativno pretpostavlja da takve zavisnosti mogu postojati (ako prevodilac može da dokaže da zavisnost postoji kao rezultat analize, onda „hint“ nema efekta), dok autor koda zna da takve zavisnosti ne mogu nastati. Sa ovim nagoveštajem, kompajler može generisati efikasniji kod: automatsku vektorizaciju za IA-32 (koristeći vektorske instrukcije iz skupova MMX\SSE\SSE2\SSE3 za C/C++ i Fortran programske petlje; možete saznati više o ovoj tehnici, za primjer, sljedeći članak u časopisu Intel Technology Journal), dovođenje softvera (SWP) za IA-64.
#pragma vektor se uvijek koristi da prisili kompajler da promijeni odluku o neefikasnosti vektorizacije petlje (i automatske za IA-32 i SWP za IA-64), na osnovu analize kvantitativnih i kvalitativnih karakteristika rada na svakom iteracija.
#pragma novector uvijek radi suprotno od #pragma vector.
#pragma vector aligned se koristi da kaže kompajleru da su podaci koji se koriste u petlji poravnati na granici od 16 bajtova. Ovo vam omogućava da generišete efikasniji i/ili kompaktniji (zbog nedostatka provera vremena izvršavanja) kod.
#pragma vector unaligned radi suprotno od #pragma aligned. Teško je govoriti o poboljšanju performansi u ovom slučaju, ali možete računati na kompaktniji kod.
#pragma tačka distribucije se koristi unutar programske petlje tako da kompajler može podijeliti distribucijsku petlju u ovoj tački na nekoliko manjih. Na primjer, takav "hint" se može koristiti kada kompajler ne uspije automatski vektorizirati izvornu petlju (na primjer, zbog ovisnosti o podacima koja se ne može zanemariti čak ni sa #pragma ivdep), dok svaki (ili dio) novog formirani ciklusi se mogu efikasno vektorizovati.
#pragma loop count (N) se koristi da kaže kompajleru da će najvjerovatnija vrijednost za broj iteracija petlje biti N. Ove informacije pomažu pri odlučivanju o najefikasnijoj optimizaciji za ovu petlju (na primjer, da li da se odmotaju , da li da radim SWP ili automatsku vektorizaciju, da li da koristim softverske komande za prethodno preuzimanje, ...)
"Nagoveštaj" _assume_aligned(p, base) se koristi da kaže kompajleru da je memorijski region povezan sa pokazivačem p poravnat na granici base = 2^n bajta.
Ovo je daleko od toga puna lista razne "nagoveštaje" kompajleru, koji mogu značajno uticati na efikasnost generisanog koda. Može se postaviti pitanje kako odrediti da je kompajleru potreban savjet.
Prvo, možete koristiti dijagnostiku kompajlera u obliku izvještaja koje pruža programeru. Na primjer, korištenjem opcije -Qvec_reportN (gdje N varira od 0 do 3 i predstavlja nivo detalja) možete dobiti izvještaj o automatskoj vektorizaciji. Programer će imati pristup informacijama o tome koje su petlje vektorizovane, a koje nisu. Inače, kompajler prijavljuje razloge zašto vektorizacija nije uspjela. Pretpostavimo da je uzrok bila konzervativno pretpostavljena ovisnost o podacima. U ovom slučaju, ako je programer siguran da se zavisnost ne može pojaviti, onda se može koristiti #pragma ivdep. Kompajler pruža slične (u poređenju sa Qvec_reportN za IA-32) mogućnosti na IA-64 za kontrolu prisutnosti i efikasnosti SWP-a. Općenito, Intel kompajleri pružaju obilje mogućnosti za dijagnosticiranje optimizacija.
Drugo, drugi softverski proizvodi (kao što je Intel VTune profiler) mogu se koristiti za pronalaženje uskih grla u performansama u kodu. Rezultati analize mogu pomoći programeru da izvrši potrebne promjene.
Za analizu možete koristiti i popis asemblerskog koda generiran od strane kompajlera.
Slika 8
Slika 8 iznad prikazuje korak po korak proces optimizacije aplikacije pomoću kompajlera (i drugih softverskih proizvoda) Intel na jeziku Fortran za IA-64 arhitekturu. Kao primjer, razmatra se neadijabatska regionalna šema prognoze za 48 sati Roshidrometcentra (o tome možete pročitati, na primjer, u ovom članku. Članak govori o vremenu izračunavanja od oko 25 minuta, ali je došlo do značajnih promjena Performanse koda su uzete kao početna tačka na Cray-YMP sistemu Nemodifikovani kod sa podrazumevanim opcijama kompajlera (-O2) pokazao je povećanje performansi od 20% na 4-smernom sistemu zasnovanom na Intel Itanium 2 900 MHz procesor Primjena agresivnije optimizacije (-O3) rezultirala je ubrzanjem od ~2,5x bez promjene koda uglavnom zbog SWP-a i prethodnog dohvaćanja podataka. Analiza korištenjem dijagnostike kompajlera i Intel VTune profilera otkrila je neka uska grla Na primjer, kompajler nije programski doveo nekoliko performansi- kritične petlje, izvještavajući u izvještaju da sugerira ovisnost o podacima. Male promjene koda (direktiva ivdep) pomogle su da se postigne efekat aktivno prenošenje. Koristeći VTune profiler, otkriveno je (i izveštaj kompajlera je to potvrdio) da kompajler nije promenio redosled ugnežđenih petlji (razmena petlji) radi efikasnijeg korišćenja keš memorije. Razlog su opet bile konzervativne pretpostavke o zavisnosti od podataka. Izmjene su napravljene u izvornom kodu programa. Kao rezultat toga, uspjeli smo postići 4-struko ubrzanje u odnosu na početnu verziju. Korišćenje eksplicitne paralelizacije sa OpenMP direktivama, a zatim prelazak na sistem sa više od visoka frekvencija omogućilo je smanjenje vremena izračunavanja na manje od 8 minuta, što je dalo više od 16 puta brže u odnosu na početnu verziju.
Intel Visual Fortran
Intel Visual Fortran 8.0 koristi front-end (dio kompajlera odgovoran za pretvaranje programa iz teksta u programskom jeziku u internu reprezentaciju kompajlera, koji je u velikoj mjeri nezavisan ni od programskog jezika ni od ciljne mašine), CVF kompajler tehnologije i komponente Intelovog kompajlera, odgovorne za skup optimizacija i generisanje koda.Slika 9
Slika 10
Na slikama 9 i 10 prikazani su uporedni grafikoni Intel performanse Visual Fortran 8.0 sa prethodnom verzijom Intel Fortran 7.1 i sa drugim industrijski poznatim kompajlerima iz ovog jezika koji rade pod operativnim sistemom Windows porodice i Linux. Za poređenje korišćeni su testovi čiji su izvorni tekstovi, koji zadovoljavaju standarde F77 i F90, dostupni na http://www.polyhedron.com/. Na istoj stranici dostupne su detaljnije informacije o upoređivanju performansi kompajlera (Win32 Compiler Comparisons -> Fortran (77, 90) Execution Time Benchmarks i Linux Compiler Comparisons -> Fortran (77, 90) Execution Time Benchmarks): više različitih kompajlera je prikazano, a geometrijska sredina je data u vezi sa pojedinačnim rezultatima za svaki test.
U prethodnom broju časopisa raspravljali smo o proizvodima iz porodice Intel VTune Performance Analyzer - alatima za analizu performansi koji su zasluženo popularni među programerima aplikacija i koji vam omogućavaju da otkrijete u kodu timske aplikacije, koji troši previše procesorskih resursa, što daje programerima priliku da identifikuju i eliminišu potencijalna uska grla povezana s takvim dijelovima koda, čime se ubrzava proces razvoja aplikacije. Imajte na umu, međutim, da performanse aplikacija u velikoj meri zavise od toga koliko su efikasni prevodioci koji se koriste u njihovom razvoju i koje hardverske karakteristike koriste prilikom generisanja mašinskog koda.
Najnoviji kompajleri Intel C++ i Intel Fortran za Windows i Linux obezbeđuju do 40% povećanja performansi u performansama aplikacija za sisteme zasnovane na Intel Itanium 2, Intel Xeon i Intel Pentium 4 procesorima u odnosu na postojeće kompajlere drugih proizvođača korišćenjem ovih funkcija procesori, kao što je Hyper-Threading tehnologija.
Razlike u vezi sa optimizacijom koda od strane ove porodice kompajlera uključuju upotrebu steka za izvođenje operacija s pomičnim zarezom, međuproceduralnu optimizaciju (Interprocedural Optimization, IPO), optimizaciju u skladu sa profilom aplikacije (Profile Guided Optimization, PGO), prethodno učitavanje podataka u keš memorija (prethodno dohvaćanje podataka), čime se izbjegava kašnjenje povezano s pristupom memoriji, podrška za karakteristične karakteristike Intel procesora (na primjer, ekstenzije za obradu striming podataka Intel Streaming SIMD Extensions 2, specifično za Intel Pentium 4), automatska paralelizacija izvršavanja koda , kreiranje aplikacija, pokretanje na više različite vrste procesori pri optimizaciji za jedan od njih, sredstva "predviđanja" narednog koda (predviđanje grananja), proširena podrška za rad sa nitima izvršavanja.
Imajte na umu da se Intel kompajleri koriste u poznatim kompanijama kao što su Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Na osnovu nezavisnog testiranja brojnih kompanija, performanse Intelovih kompajlera značajno nadmašuju kompajlere drugih proizvođača (pogledajte, na primer, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).
U nastavku ćemo pogledati neke od karakteristika najnovije verzije Intel kompajleri za desktop i servere operativni sistemi.
Kompajleri za Microsoft Windows platformu
Intel C++ kompajler 7.1 za Windows
Intel C++ Compiler 7.1 je kompajler objavljen ranije ove godine koji vam omogućava da postignete visok stepen optimizacije koda za procesore Intel Itanium, Intel Itanium 2, Intel Pentium 4 i Intel Xeon, kao i za Intel Pentium M procesor koji koristi Intel tehnologija Centrino i dizajniran za upotrebu u mobilnim uređajima.
Navedeni kompajler je potpuno kompatibilan sa razvojnim alatima Microsoft Visual C++ 6.0 i Microsoft Visual Studio .NET: Može se ugraditi u odgovarajuća razvojna okruženja.
Ovaj kompajler podržava ANSI i ISO C/C++ standarde.
Intel Fortran Compiler 7.1 za Windows
Intel Fortran Compiler 7.1 za Windows, takođe objavljen ranije ove godine, omogućava vam da kreirate optimizovani kod za Intel Itanium, Intel Itanium 2, Intel Pentium 4 i Intel Xeon, Intel Pentium M procesore.
Ovaj kompajler je u potpunosti kompatibilan sa razvojnim alatima Microsoft Visual C++ 6.0 i Microsoft Visual Studio .NET, odnosno može se integrisati u odgovarajuća razvojna okruženja. Pored toga, ovaj kompajler vam omogućava da razvijete 64-bitne aplikacije za operativne sisteme koji rade na Itanium / Itanium 2 procesorima, sa pomoć od Microsofta Visual Studio na 32-bitnom Pentium procesoru koji koristi 64-bitni Intel Fortran kompajler. Prilikom otklanjanja grešaka koda, ovaj kompajler vam omogućava da koristite program za otklanjanje grešaka za Microsoft .NET platformu.
Ako imate instaliran Compaq Visual Fortran 6.6, možete koristiti Intel Fortran Compiler 7.1 umjesto originalnog kompajlera jer su ovi prevodioci kompatibilni na nivou izvornog koda.
Intel Fortran Compiler 7.1 za Windows je u potpunosti usklađen sa ISO Fortran 95 standardom i podržava izgradnju i otklanjanje grešaka dvojezičnih aplikacija C i Fortran.
Kompajleri za Linux platformu
Intel C++ kompajler 7.1 za Linux
Drugi kompajler koji je objavljen početkom godine, Intel C++ Compiler 7.1 za Linux, omogućava postizanje visokog stepena optimizacije koda za procesore Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Ovaj kompajler je u potpunosti kompatibilan sa GNU C kompajlerom na nivou izvornog koda i objektnih modula, omogućavajući aplikacijama izgrađenim sa GNU C da se migriraju na njega bez dodatnih troškova. operativni sistemi SCO, rane verzije Sun Solaris, itd.), što znači potpunu kompatibilnost sa gcc 3.2 kompajler na binarnom nivou. Konačno, sa Intel C++ kompajlerom 7.1 za Linux, možete čak i rekompajlirati Linux kernel uz nekoliko manjih izmjena njegovog izvornog koda.
Intel Fortran kompajler 7.1 za Linux
Kompajler Intel Fortran Compiler 7.1 za Linux vam omogućava kreiranje optimizovanog koda za procesore Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Ovaj kompajler je potpuno kompatibilan sa Compaq Visual Fortran 6.6 kompajlerom na nivou izvornog koda, što omogućava da ponovo kompajlirate aplikacije s njim kreirane pomoću Compaq Visual Fortrana, čime ćete poboljšati njihove performanse.
Dodatno, navedeni kompajler je kompatibilan sa uslužnim programima koje koriste programeri, kao što su emacs editor, gdb debugger i pomoćni program za pravljenje aplikacije.
Kao i Windows verzija ovog kompajlera, Intel Fortran Compiler 7.1 za Linux je u potpunosti kompatibilan sa ISO Fortran 95 standardom i podržava kreiranje i otklanjanje grešaka u aplikacijama koje sadrže kod na dva jezika C i Fortran.
Treba naglasiti da su značajan doprinos kreiranju navedenih Intel kompajlera dali stručnjaci Ruski centar Intel za razvoj softvera u Nižnjem Novgorodu. Više informacija o Intel kompajlerima možete pronaći na Intel Web lokaciji na: www.intel.com/software/products/.
Drugi dio ovog članka bit će posvećen Intelovim kompajlerima koji kreiraju aplikacije za mobilne uređaje.