Ju nuk jeni rob!
Kurs i mbyllur arsimor për fëmijët e elitës: "Rregullimi i vërtetë i botës".
http://noslave.org
Nga Wikipedia, Enciklopedia e Lirë
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). | ||||||||||||||||||||||||||||||||||||
Lloji | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Autori |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Zhvilluesi | ||||||||||||||||||||||||||||||||||||
Zhvilluesit |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Shkruar në |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Ndërfaqja |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
sistemi operativ | ||||||||||||||||||||||||||||||||||||
Gjuhët e ndërfaqes |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Botimi i parë |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Platforma e harduerit | ||||||||||||||||||||||||||||||||||||
Versioni i fundit | ||||||||||||||||||||||||||||||||||||
lirimin e kandidatit |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
version beta |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
version alfa |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Versioni i testit |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Formatet e skedarëve të lexueshëm |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Formatet e skedarëve të krijuar |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Shtetit |
Gabim Lua në Moduli:Wikidata në rreshtin 170: përpiquni të indeksoni fushën "wikibase" (një vlerë zero). |
|||||||||||||||||||||||||||||||||||
Liçensë |
Karakteristikat kryesore:
Përpiluesi mbështet standardin OpenMP 3.0 për të shkruar programe paralele. Ai gjithashtu përmban një modifikim të OpenMP të quajtur Cluster OpenMP, me të cilin mund të ekzekutoni aplikacione të shkruara sipas OpenMP në grupe duke përdorur MPI. Përpiluesi Intel C++ përdor një frontend (pjesën e përpiluesit që analizon programin që kompilohet) nga Edison Design Group. I njëjti front përdoret nga përpiluesit SGI MIPSpro, Comeau C++, Portland Group. Ky përpilues përdoret gjerësisht për përpilimin e standardeve të SPEC CPU. Ekzistojnë 4 seri produktesh nga Intel që përmbajnë përpiluesin:
Disavantazhet e versionit Linux të përpiluesit përfshijnë papajtueshmëri të pjesshme me shtesat GNU të gjuhës C (të mbështetura nga përpiluesi GCC), gjë që mund të shkaktojë probleme gjatë përpilimit të disa programeve.
Variantet eksperimentaleJanë publikuar versionet e mëposhtme eksperimentale të përpiluesit:
Flamujt kryesorë
Shkruani një përmbledhje për artikullin "Përpiluesi Intel C++"ShënimeShiko gjithashtuLidhjet
Një fragment që karakterizon përpiluesin Intel C++E megjithatë, ajo u kthye për të parë Magusin e Bardhë për herë të fundit ... Burrin dhe mikun e saj më të vërtetë, të cilin nuk mund ta harronte kurrë. Në zemrën e saj, ajo e fali atë. Por, për keqardhjen e tij të madhe, ajo nuk mundi t'i sjellë atij faljen e Magdalenës .... Pra, siç e shihni, Isidora, fabula e madhe e krishterë për "faljen" është thjesht një gënjeshtër fëminore për besimtarët naivë për t'i lejuar ata të bëjnë çfarëdo. Të keqen, duke e ditur se çfarëdo që të bëjnë, ata përfundimisht do të falen. Por ju mund të falni vetëm atë që është vërtet e denjë për falje. Njeriu duhet të kuptojë se duhet të përgjigjet për çdo të keqe të bërë... Dhe jo para ndonjë Zoti misterioz, por para vetes, duke e detyruar veten të vuajë mizorisht. Magdalena nuk e fali Vladykën, megjithëse e respektoi thellësisht dhe e donte sinqerisht. Ashtu siç nuk arriti të na falte të gjithëve për vdekjen e tmerrshme të Radomirit. Në fund të fundit, ishte AJO që kuptoi më së miri nga të gjitha - ne mund ta ndihmonim atë, ne mund ta shpëtonim atë nga një vdekje mizore ... Por ne nuk donim. Duke e konsideruar shumë mizore fajin e Magusit të Bardhë, ajo e la atë të jetonte me këtë faj, duke mos e harruar për asnjë çast... Ajo nuk donte t'i jepte një falje të lehtë. Nuk e pamë më kurrë. Siç nuk i panë kurrë foshnjat e tyre. Nëpërmjet njërit prej kalorësve të Tempullit të saj - magjistarit tonë - Magdalena i përcolli Zotit përgjigjen ndaj kërkesës së tij për t'u kthyer tek ne: "Dielli nuk lind dy herë në një ditë ... Gëzimi i botës tënde (Radomir) nuk do të ketë kurrë kthehu tek ti, ashtu siç nuk do të kthehem tek ti dhe unë... E gjeta BESIN dhe TË VËRTETËN time, ato janë LIVE, e jotja është e VDEKUR... Vajto bijtë e tu - të deshën. Nuk do t'ju fal kurrë vdekjen e tyre sa të jem gjallë. Dhe faji juaj le të mbetet me ju. Ndoshta një ditë ajo do t'ju sjellë dritë dhe falje ... Por jo nga unë. Koka e Magus Gjonit nuk u soll në Meteora për të njëjtën arsye - asnjë nga Kalorësit e Tempullit nuk donte të kthehej tek ne ... Ne i humbëm ata, pasi humbëm shumë të tjerë më shumë se një herë, të cilët nuk donin të kuptonin dhe pranoni viktimat tona... Kush është si ju - u larguan duke na dënuar.Më zunë mendja!.. Si i etur, duke plotësuar urinë time të përjetshme për dije, përthitha me lakmi rrjedhën e informacionit të mahnitshëm të dhënë bujarisht nga Veriu... Dhe doja shumë më tepër!.. Doja të dija gjithçka deri në fund. . Ishte një frymë uji i ëmbël në shkretëtirën e djegur nga dhimbja dhe fatkeqësia! Dhe nuk mund të pija mjaftueshëm ... Kam një mijë pyetje! Por nuk ka më kohë ... Çfarë duhet të bëj, Sever? .. - Pyet Isidora!.. Pyet, do të përpiqem të të përgjigjem... - Më thuaj, Sever, pse më duket se në këtë tregim lidhen dy histori jete, të ndërthurura me ngjarje të ngjashme, dhe ato paraqiten si jeta e një personi? Apo nuk kam të drejtë? – Ke plotesisht te drejte Isidora. Siç ju thashë më parë, "të fuqishmit e kësaj bote", që krijuan një histori të rreme të njerëzimit, "vunë" në jetën e vërtetë të Krishtit jetën e huaj të profetit hebre Joshua, i cili jetoi një mijë e gjysmë vjet më parë. (që nga historia e Veriut). Dhe jo vetëm ai, por edhe familja e tij, të afërmit dhe miqtë e tij, miqtë dhe ndjekësit e tij. Në fund të fundit, ishte gruaja e profetit Joshua, Judeja Maria, e cila kishte një motër Martën dhe një vëlla Llazarin, motrën e nënës së tij Maria Jakobe dhe të tjerë që nuk ishin kurrë pranë Radomirit dhe Magdalenës. Ashtu siç nuk kishte "apostuj" të tjerë pranë tyre - Pali, Mateu, Pjetri, Luka dhe të tjerët ... Ishte familja e profetit Joshua që u shpërngul një mijë e gjysmë vjet më parë në Provence (që në atë kohë quhej Gaul (Gali Transalpine), në qytetin grek Massalia (tani Marsejë), pasi Massalia në atë kohë ishte "Portë" midis Evropës dhe Azisë, dhe ishte mënyra më e lehtë për të gjithë "të persekutuarit" për të shmangur persekutimin dhe fatkeqësinë.
|
Hyrje Në fund të vitit 2003, Intel prezantoi versionin 8.0 të koleksionit të saj të përpiluesve. Përpiluesit e rinj janë krijuar për të përmirësuar performancën e aplikacioneve që funksionojnë në serverë, desktop dhe sistemet celulare(laptopë, telefona celularë dhe PDA) bazuar në Procesorët Intel. Kemi kënaqësinë të vërejmë se ky produkt u krijua me pjesëmarrjen aktive të punonjësve të Qendrës së Zhvillimit të Softuerit Intel Nizhny Novgorod dhe specialistëve të Intel nga Sarov.
Seria e re përfshin përpilues Intel për C++ dhe Fortran për Windows dhe Linux, si dhe përpilues Intel për C++ për Windows CE .NET. Përpiluesit synojnë sistemet e bazuara në procesorët e mëposhtëm Intel: Intel Itanium 2, Intel Xeon, Intel Pentium 4, procesorët Intel Personal Internet Client Architecture për telefonat celularë dhe PDA, dhe procesori Intel Pentium M për PC-të celularë (një komponent i teknologjisë Intel Centrino për telefonat celularë).PC).
Përpiluesi Intel Visual Fortran për Windows ofron teknologji të përpilimit të gjeneratës së ardhshme për llogaritje me performancë të lartë. Ai kombinon funksionalitetin e gjuhës Compaq Visual Fortran (CVF) me përmirësimet e performancës të bëra të mundshme nga teknologjitë e përpilimit dhe optimizimit të gjenerimit të kodit të Intel dhe thjeshton detyrën e bartjes Kodi i burimit, i zhvilluar me CVF, në mjedisin Intel Visual Fortran. Ky përpilues është i pari që zbaton funksionet CVF si për sistemet Intel 32-bit ashtu edhe për sistemet e bazuara në familjen e procesorëve Intel Itanium që funksionojnë në Mjedisi Windows. Përveç kësaj, ky përpilues ju lejon të zbatoni funksionet e gjuhës CVF në sistemet Linux bazuar në procesorët 32-bit Intel dhe familjen e procesorëve Intel Itanium. Në vitin 2004, është planifikuar të lëshohet një version i zgjeruar i këtij përpiluesi - përpiluesi Intel Visual Fortran Compiler Professional Edition për Windows, i cili do të përfshijë Bibliotekën IMSL Fortran 5.0 të zhvilluar nga Visual Numerics, Inc.
"Përpiluesit e rinj mbështesin gjithashtu procesorët e ardhshëm të Intel, të koduar Prescott, të cilët ofrojnë komanda të reja për të përmirësuar performancën grafike dhe video, si dhe përmirësime të tjera të performancës. Ata gjithashtu mbështesin Teknologji e re Mobile MMX(tm), i cili në mënyrë të ngjashme përmirëson performancën e aplikacioneve grafike, zanore dhe video për telefonat celularë dhe PDA-të, - tha Alexei Odinokov, bashkëdrejtor i Qendrës së Zhvillimit të Softuerit Intel në Nizhny Novgorod. - Këta përpilues u ofrojnë zhvilluesve të aplikacioneve një grup të vetëm mjetesh për ndërtimin e aplikacioneve të reja rrjetet pa tela bazuar në arkitekturën Intel. Përpiluesit e rinj të Intel mbështesin gjithashtu teknologjinë Hyper-Threading të Intel dhe specifikimin e industrisë OpenMP 2.0, i cili përcakton përdorimin e direktivave nivel të lartë për të kontrolluar rrjedhën e udhëzimeve në aplikacione”.
Ndër mjetet e reja të përfshira në përpilues janë mjetet e Intel Code Coverage dhe Intel Test Prioritization. Së bashku, këto mjete ndihmojnë në përshpejtimin e zhvillimit të aplikacioneve dhe përmirësimin e cilësisë së aplikacionit duke përmirësuar procesin e testimit. software.
Mjeti i mbulimit të kodit, kur teston një aplikacion, ofron detaje të plota në lidhje me përdorimin logjik të aplikacionit dhe vendndodhjen e zonave të përdorura në kodin burimor të aplikacionit. Nëse bëhen ndryshime në aplikacion ose nëse ky test nuk lejon kontrollimin e pjesës së aplikacionit që është me interes për zhvilluesin, mjeti i Prioritizimit të Testit ju lejon të kontrolloni funksionimin e zonës së zgjedhur kodi i programit.
Përpiluesit e rinj të Intel vijnë në një sërë konfigurimesh që variojnë nga 399 dollarë në 1,499 dollarë. Ato mund të blihen sot nga Intel Corporation ose nga rishitës në mbarë botën, një listë e të cilave gjendet në sit. http://www.intel.com/software/products/reseller.htm#Russia.
Mbështetje për procesorët Prescott
Mbështetja për procesorin Intel Pentium 4 (Prescott) në versionin e tetë të përpiluesit është si më poshtë:1. Mbështetje për komandat SSE3 (ose PNI, Prescott New Instructions). Ekzistojnë tre mënyra për të theksuar këtu:
A. Insertet e montimit (montim Inline). Për shembull, përpiluesi do të njohë përdorimin e mëposhtëm të komandës SSE3 _asm(addsubpd xmm0, xmm1). Kështu, përdoruesit e interesuar për optimizimin e nivelit të ulët mund të hyjnë drejtpërdrejt në komandat e asemblerit.
b. Në përpiluesin C/C++, udhëzimet e reja janë të disponueshme nga një nivel më i lartë sesa përdorimi i inserteve të asemblerit. Përkatësisht, përmes funksioneve të integruara (funksionet e brendshme):
Funksionet e integruara
funksion i integruar | Komanda e gjeneruar |
---|---|
_mm_addsub_ps | Shton nënsubps |
_mm_hadd_ps | Haddps |
_mm_hsub_ps | Msubps |
_mm_moveldup_ps | Movsldup |
_mm_movehdup_ps | Movshdup |
_mm_addsub_pd | Shtosubpd |
_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 tregon funksionet e integruara dhe udhëzimet përkatëse të montimit nga grupi SSE3. E njëjta mbështetje ekziston për komandat nga grupet MMX\SSE\SSE2. Kjo i lejon programuesit të kryejë optimizimin e kodit të nivelit të ulët pa përdorur programimin në gjuhën e asamblesë: vetë përpiluesi kujdeset për hartëzimin (hartëzimin "e) të funksioneve të integruara në udhëzimet përkatëse të procesorit dhe përdorimin optimal të regjistrave. përqendrohuni në krijimin e një algoritmi që përdor në mënyrë efektive grupe të reja instruksionesh.
V. Gjenerimi automatik i komandave të reja nga përpiluesi. Dy metodat e mëparshme përfshijnë përdorimin e komandave të reja nga programuesi. Por përpiluesi është gjithashtu në gjendje (duke përdorur opsionet e duhura - shih seksionin 3 më poshtë) të gjenerojë automatikisht udhëzime të reja nga grupi SSE3 për kodin C/C++ dhe Fortran. Për shembull, komanda e optimizuar e ngarkimit të padrejtuar (lddqu), e cila ju lejon të merrni një rritje të performancës deri në 40% (për shembull, në detyrat e kodimit video dhe audio). Komanda të tjera nga grupi SSE3 ju lejojnë të merrni një përshpejtim të konsiderueshëm në detyrat grafike 3D ose detyrat llogaritëse duke përdorur numra kompleksë. Për shembull, grafiku në seksionin 3.1 më poshtë tregon se për aplikacionin 168.wupwise nga grupi SPEC CPU2000 FP, shpejtësia e marrë nga gjenerimi automatik i udhëzimeve SSE3 ishte ~25%. Performanca e këtij aplikacioni varet shumë nga shpejtësia e aritmetikës së numrave kompleksë.
2. Përdorimi i avantazheve mikroarkitekturore të procesorit Prescott. Kur gjeneron kodin, përpiluesi merr parasysh ndryshimet mikroarkitekturore në procesorin e ri. Për shembull, disa operacione (të tilla si zhvendosjet e numrave të plotë, shumëzimet e numrave të plotë ose konvertimet e numrave midis formateve të ndryshme me pikë lundruese në SSE2) janë më të shpejta në procesorin e ri në krahasim me versionet e mëparshme (të themi, një zhvendosje e numrit të plotë tani kërkon një cikël procesor kundrejt katër për versioni i mëparshëm).Procesori Intel Pentium 4). Përdorimi më intensiv i komandave të tilla ju lejon të merrni një përshpejtim të konsiderueshëm të aplikacioneve.
Një shembull tjetër i ndryshimeve mikroarkitekturore është mekanizmi i përmirësuar i përcjelljes së dyqaneve (ngarkim i shpejtë i të dhënave të ruajtura më parë në memorie); Ruajtja reale as nuk bëhet në memorien e memories, por në një bufer të ndërmjetëm të ruajtjes, i cili më pas lejon akses shumë të shpejtë në të dhëna. Një veçori e tillë e arkitekturës bën të mundur, për shembull, kryerjen e vektorizimit automatik më agresiv të kodit të programit.
Përpiluesi gjithashtu merr parasysh sasinë e shtuar të memories cache në nivelin e parë dhe të dytë.
3. Mbështetje e përmirësuar për teknologjinë Hyper-Threading. Ky artikull mund të lidhet fare mirë me atë të mëparshëm - ndryshimet mikroarkitekturore dhe përdorimin e tyre në përpilues. Për shembull, një bibliotekë kohëzgjatjeje që mbështet specifikimin e industrisë OpenMP është optimizuar për të ekzekutuar në procesorin e ri.
Performanca
Përdorimi i përpiluesve është një mënyrë e lehtë dhe efikase për të përfituar nga arkitekturat e procesorëve Intel. Më poshtë, dy mënyra të përdorimit të kompajlerëve janë theksuar me kusht (shumë): a) ripërpilimi i programeve me ndryshim i mundshëm cilësimet e përpiluesit, b) ripërpilimi me një ndryshim si në cilësimet e përpiluesit ashtu edhe në tekstin burimor, si dhe duke përdorur diagnostikimin e përpiluesit për optimizime të vazhdueshme dhe përdorimin e mundshëm të të tjerëve mjete softuerike(për shembull, profiluesit).1.1 Optimizimi i programeve duke rikompiluar dhe ndryshuar cilësimet e përpiluesit
Shpesh, hapi i parë në migrimin në një përpilues të ri optimizues është përdorimi i tij me cilësimet e paracaktuara. Hapi tjetër logjik është përdorimi i opsioneve për optimizim më agresiv. Figurat 1, 2, 3 dhe 4 tregojnë efektin e kalimit në versionin 8.0 të përpiluesit Intel në krahasim me përdorimin e produkteve të tjera kryesore në industri (-O2 - cilësimet e paracaktuara të përpiluesit, bazë - cilësimet në performancën maksimale). Krahasimi është bërë në arkitekturat Intel 32-bit dhe 64-bit. Aplikacionet nga SPEC CPU2000 përdoren si grup testimi.
Foto 1
Figura 2
Figura 3
Figura 4
Disa nga opsionet janë renditur më poshtë (në tekstin e mëtejmë, opsionet janë për familjen Windows OS; për familjen Linux OS, ka opsione me të njëjtin efekt, por emri mund të ndryshojë; për shembull, -Od ose QxK për Windows kanë një efekt i ngjashëm me -O0 ose -xK për Linux respektivisht, më shumë informacion i detajuar mund të gjendet në manualin e përpiluesit) të mbështetur nga përpiluesi Intel.
Kontrolli i niveleve të optimizimit: Opsionet -Od (pa optimizime; përdoret për programet e korrigjimit), -O1 (shpejtësia maksimale duke minimizuar madhësinë e kodit), -O2 (optimizimi për shpejtësinë e ekzekutimit të kodit; përdoret si parazgjedhje), -O3 (mundëson optimizimet më agresive për ekzekutimin e kodit shpejtësia ; në disa raste mund të çojë në efektin e kundërt, pra në një ngadalësim; duhet theksuar se në IA-64 përdorimi i -O3 çon në përshpejtim në shumicën e rasteve, ndërsa efekti pozitiv në IA-32 është më pak i theksuar. ). Shembuj të optimizimeve të aktivizuara nga -O3 janë ndërrimi i lakut, bashkimi i lakut, shpërndarja e lakut (optimizimi i bashkimit të ciklit të kundërt), marrja paraprake e të dhënave nga softueri. Arsyeja pse ngadalësia është e mundur kur përdoret -O3 mund të jetë se përpiluesi përdori një qasje heuristike për të zgjedhur optimizimin agresiv për rast specifik, pa pasur informacion të mjaftueshëm në lidhje me programin (për shembull, gjenerohen udhëzime për marrjen paraprake për të dhënat e përdorura në lak, duke besuar se cikli ekzekutohet një numër i madh herë, kur në fakt ka vetëm disa përsëritje). Optimizimi i profilizimit ndërprocedural, si dhe një sërë "indikacionesh" të programuesit (shih seksionin 3.2) mund të ndihmojnë në këtë situatë.
Optimizimi ndërprocedural: -Qip (brenda një skedari të vetëm) dhe -Qipo (brenda disa ose të gjithë skedarëve të projektit). Përfshin optimizime të tilla si, për shembull, zëvendësimi inline i kodit të përdorur shpesh (duke ulur koston e thirrjes së një funksioni/procedure). Përfaqëson informacionin në fazat e tjera të optimizimit - për shembull, informacion në lidhje me kufirin e sipërm të ciklit (të themi, nëse është një konstante e kohës së përpilimit të përcaktuar në një skedar, por përdoret në shumë) ose informacione rreth shtrirjes së të dhënave në memorie (shumë MMX Komandat \SSE\SSE2\SSE3 funksionojnë më shpejt nëse operandët janë të rreshtuar në memorie në një kufi 8 ose 16 bajt). Analiza e procedurave të alokimit të memories (të zbatuara/të thirrura në një nga skedarët e projektit) u kalohet atyre funksioneve/procedurave ku përdoret kjo memorie (kjo mund të ndihmojë kompajlerin të braktisë supozimin konservator se të dhënat nuk janë të lidhura siç duhet në memorie; dhe supozimi duhet të jetë konservator kur nuk ka informacion shtesë). Shpjegimi, analiza e alisimit të të dhënave mund të shërbejë si një shembull tjetër: në mungesë të informacionit shtesë dhe pamundësisë për të provuar mungesën e kryqëzimeve, përpiluesi rrjedh nga supozimi konservator se ka kryqëzime. Një vendim i tillë mund të ndikojë negativisht në cilësinë e optimizimeve të tilla si, për shembull, vektorizimi automatik në IA-32 ose tubacioni i softuerit (pipelinimi i softuerit ose SWP) në IA-64. Optimizimi ndërprocedural mund të ndihmojë në analizimin e prezencës së kryqëzimeve të kujtesës.
Optimizimi i Profilizimit: Përfshin tre faza. 1) gjenerimi i kodit të instrumentuar duke përdorur opsionin -Qprof_gen. 2) kodi që rezulton ekzekutohet në të dhëna përfaqësuese, ndërsa ekzekutohet, mblidhen informacione rreth karakteristikave të ndryshme të ekzekutimit të kodit (për shembull, probabilitetet e tranzicionit ose një vlerë tipike për numrin e përsëritjeve të ciklit). 3) Rikompilimi me opsionin -Qprof_use, i cili siguron që përpiluesi të përdorë informacionin e mbledhur në hapin e mëparshëm. Kështu, përpiluesi ka aftësinë të përdorë jo vetëm vlerësime statike të karakteristikave të rëndësishme të programit, por edhe të dhëna të marra gjatë një ekzekutimi real të programit. Kjo mund të ndihmojë në zgjedhjen e mëvonshme të disa optimizimeve (për shembull, një rregullim më efikas në kujtesën e degëve të ndryshme të programit, bazuar në informacionin se cilat degë janë ekzekutuar në çfarë frekuence; ose aplikimi i një optimizimi në një lak bazuar në informacionin rreth numri tipik i përsëritjeve në të) . Optimizimi i profilizimit është veçanërisht i dobishëm kur është e mundur të zgjidhet një grup i vogël por përfaqësues i të dhënave (për hapin #2) që ilustron mirë rastet më tipike të përdorimit të programit në të ardhmen. Në disa fusha lëndore, zgjedhja e një grupi të tillë përfaqësues është mjaft e mundur. Për shembull, optimizimi i profilizimit përdoret nga zhvilluesit e DBMS.
Optimizimet e listuara më sipër janë të tipit gjenerik, d.m.th. kodi i gjeneruar do të funksionojë në të gjithë procesorët e ndryshëm të familjes (të themi, në rastin e një arkitekture 32-bitësh, në të gjithë procesorët e mëposhtëm: Intel Pentium-III, Pentium 4, duke përfshirë bërthamën Prescott, Intel Pentium M). Ekzistojnë gjithashtu optimizime për një procesor specifik.
Optimizimet specifike të procesorit: -QxK (Pentium-III; përdorimi i komandave SSE, specifikat e mikroarkitekturës), -QxW dhe -QxN (Pentium 4; përdorimi i komandave SSE dhe SSE2, specifikat e mikroarkitekturës), -QxB (Pentium M; përdorimi i komandave SSE dhe SSE2, specifikat e mikroarkitekturës) ), QxP (Prescott; përdorimi i komandave SSE, SSE2 dhe SSE3, veçoritë e mikroarkitekturës). Në këtë rast, kodi i krijuar duke përdorur këto opsione mund të mos funksionojë në përfaqësues të tjerë të familjes së procesorëve (për shembull, kodi -QxW mund të rezultojë në ekzekutimin e një komande të pavlefshme nëse ekzekutohet në një sistem të bazuar në një Intel Pentium-III procesor). Ose punoni jo me efikasitet maksimal (për shembull, kodi -QxB në një procesor Pentium 4 për shkak të dallimeve në mikroarkitekturë). Me këto opsione, është gjithashtu e mundur të përdoren bibliotekat e funksionimit të optimizuara për një procesor specifik duke përdorur grupin e tij të udhëzimeve. Për të kontrolluar që kodi është ekzekutuar në të vërtetë në procesorin e synuar, zbatohet një mekanizëm dispeçues (cpu-dispatch): kontrollimi i procesorit gjatë ekzekutimit të programit. Në situata të ndryshme, ky mekanizëm mund të aktivizohet ose jo. Dispatch përdoret gjithmonë nëse përdoret variacioni i opsionit -Qax(KWNP). Në këtë rast, gjenerohen dy versione të kodit: i optimizuar për një procesor specifik dhe "i përgjithshëm" (gjenerik), zgjedhja ndodh gjatë ekzekutimit të programit. Kështu, duke rritur madhësinë e kodit, është e mundur të arrihet ekzekutimi i programit në të gjithë procesorët e linjës dhe ekzekutimi optimal në procesorin e synuar. Një opsion tjetër është përdorimi i optimizimit të kodit për përfaqësuesin e mëparshëm të linjës dhe përdorimi i këtij kodi në këtë dhe procesorët pasues. Për shembull, kodi -QxN mund të funksionojë në një Pentium 4 me bërthama Northwood dhe Prescott. Nuk ka rritje në madhësinë e kodit. Me këtë qasje, ju mund të merrni performancë të mirë, por ende jo optimale në një sistem me një procesor Prescott (sepse SSE3 nuk përdoret dhe dallimet në mikroarkitekturë nuk merren parasysh) me performancë optimale në Northwood. Opsione të ngjashme ekzistojnë edhe për procesorët e arkitekturës IA-64. Aktiv ky moment ka dy prej tyre: -G1 (Itanium) dhe -G2 (Itanium 2; opsioni i paracaktuar).
Grafiku më poshtë (Figura 5) tregon përshpejtimin (bazuar në një - pa përshpejtim) nga përdorimi i disa prej optimizimeve të listuara më sipër (domethënë -O3 -Qipo -Qprof_use -Qx(N,P)) në një procesor Prescott krahasuar me cilësimet e paracaktuara (-O2). Përdorimi i -QxP ndihmon në disa raste për të përshpejtuar në krahasim me -QxN. Shpejtësia më e madhe arrihet në aplikacionin 168.wupwise të përmendur tashmë në seksionin e mëparshëm (për shkak të optimizimit intensiv të aritmetikës komplekse duke përdorur udhëzimet SSE3).
Figura 5
Figura 6 më poshtë tregon raportin (në kohë) të shpejtësisë së kodit me cilësimet optimale krahasuar me kodin plotësisht të paoptimizuar (-Od) në procesorët Pentium 4 dhe Itanium 2. Mund të shihet se Itanium 2 varet shumë më tepër nga cilësia e optimizimit. Kjo është veçanërisht e theksuar për llogaritjet me pikë lundruese (FP), ku raporti është rreth 36 herë. Llogaritjet me pikë lundruese janë pikë e fortë Arkitekturat IA-64, por duhet pasur kujdes që të përdoren cilësimet më efikase të përpiluesit. Fitimi që rezulton në produktivitet paguan për punën e shpenzuar për gjetjen e tyre.
Figura 6. Përshpejtimi kur përdoren opsionet më të mira të optimizimit SPEC CPU200
Përpiluesit e Intel mbështesin specifikimet e industrisë OpenMP për ndërtimin e aplikacioneve me shumë fije. Mbështetet paralelizimi eksplicit (opsioni -Qopenmp) dhe automatik (-Qparallel). Në rastin e modalitetit eksplicit, programuesi është përgjegjës për përdorimin korrekt dhe efikas të standardit OpenMP. Në rastin e paralelizimit automatik, kompajleri ka një ngarkesë shtesë që lidhet me analizën e kodit të programit. Për këtë arsye, aktualisht, paralelizimi automatik funksionon në mënyrë efektive vetëm në kode mjaft të thjeshta.
Grafiku në figurën 7 tregon përshpejtimin nga përdorimi i paralelizimit të qartë në një sistem mostër inxhinierik (para-prodhimi) bazuar në një procesor Intel Pentium 4 (Prescott) me mbështetje të teknologjisë Hyper-Threading: 2.8 GHz, 2 GB RAM, 8K L1-Cache, 512K L2-Cache. SPEC OMPM2001 përdoret si një grup testimi. Ky grup fokusohet në sistemet SMP të vogla dhe të mesme, konsumi i memories është deri në dy gigabajt. Aplikacionet u përpiluan duke përdorur Intel 8.0 C/C++ dhe Fortran me dy grupe opsionesh: -Qopenmp -Qipo -O3 -QxN dhe -Qopenmp -Qipo -O3 -QxP, me secilën prej të cilave aplikacionet filluan me Hyper-Threading të aktivizuar dhe çaktivizuar. . Vlerat e përshpejtimit në grafik normalizohen në performancën e versionit me një fillesë me Hyper-Threading të çaktivizuar.
Figura 7: Aplikime nga grupi SPEC OMPM2001 në një procesor Prescott
Mund të shihet se në 9 nga 11 raste, përdorimi i paralelizimit të qartë duke përdorur OpenMP jep një rritje të performancës kur aktivizohet teknologjia Hyper-Threading. Një aplikacion (312.swim) po përjeton ngadalësim. Është një fakt i njohur se ky aplikacion karakterizohet nga një shkallë e lartë e varësisë gjerësia e brezit memorie. Ashtu si me SPEC CPU2000, wupwise përfiton shumë nga optimizimet e Prescott (-QxP).
1.2 Optimizimi i programeve me ndryshime në kodin burimor dhe përdorimi i diagnostikimit të përpiluesit
Në seksionet e mëparshme, ne shqyrtuam ndikimin e përpiluesit (dhe cilësimet e tij) në shpejtësinë e ekzekutimit të kodit. Në të njëjtën kohë, përpiluesit e Intel ofrojnë më shumë mundësi për optimizimin e kodit sesa thjesht ndryshimin e cilësimeve. Në veçanti, përpiluesit i lejojnë programuesit të bëjë "hincime" në kodin e programit, të cilat lejojnë gjenerimin e kodit më efikas për sa i përket performancës. Më poshtë janë disa shembuj për gjuhën C/C++ (ka mjete të ngjashme për gjuhën Fortran, që ndryshojnë vetëm në sintaksë).
#pragma ivdep (ku ivdep do të thotë injoro varësitë e vektorit) përdoret përpara ciklit të programit për t'i treguar kompajlerit se nuk ka varësi të dhënash brenda. Ky aludim funksionon kur përpiluesi (bazuar në analizë) supozon në mënyrë konservative se varësi të tilla mund të ekzistojnë (nëse përpiluesi mund të provojë se varësia ekziston si rezultat i analizës, atëherë "hindja" nuk ka efekt), ndërsa autori i kodit e di se varësi të tilla nuk mund të lindin. Me këtë sugjerim, përpiluesi mund të gjenerojë kode më efikase: vektorizim automatik për IA-32 (duke përdorur udhëzime vektoriale nga grupet MMX\SSE\SSE2\SSE3 për ciklin e programit C/C++ dhe Fortran; mund të mësoni më shumë rreth kësaj teknike, për shembull, në vazhdim artikull në Intel Technology Journal), tubacioni i softuerit (SWP) për IA-64.
Vektori #pragma përdoret gjithmonë për të detyruar përpiluesin të ndryshojë vendimin në lidhje me joefikasitetin e vektorizimit të lakut (si automatikisht për IA-32 ashtu edhe SWP për IA-64), bazuar në një analizë të karakteristikave sasiore dhe cilësore të punës në secilin përsëritje.
#pragma novector bën gjithmonë të kundërtën e vektorit #pragma.
#pragma vector aligned përdoret për t'i treguar kompajlerit se të dhënat e përdorura në lak janë rreshtuar në një kufi prej 16 bajt. Kjo ju lejon të gjeneroni kode më efikase dhe/ose kompakte (për shkak të mungesës së kontrolleve të kohës së funksionimit).
Vektori #pragma i palinjuar bën të kundërtën e #pragma aligned. Është e vështirë të flasim për përfitime të performancës në këtë rast, por mund të mbështeteni në një kod më kompakt.
Pika e shpërndarjes #pragma përdoret brenda ciklit të programit në mënyrë që përpiluesi të mund të ndajë qarkun e shpërndarjes në këtë pikë në disa më të vogla. Për shembull, një "hinc" i tillë mund të përdoret kur përpiluesi nuk arrin të vektorizojë automatikisht qarkun e burimit (për shembull, për shkak të një varësie të të dhënave që nuk mund të injorohet as me #pragma ivdep), ndërsa secili (ose një pjesë) e rishtas ciklet e formuara mund të vektorizohen në mënyrë efikase.
#pragma loop count (N) përdoret për t'i thënë përpiluesit se vlera më e mundshme për numrin e përsëritjeve të ciklit do të jetë N. Ky informacion ndihmon për të vendosur mbi optimizimin më efektiv për këtë cikli (për shembull, nëse do të zhbëhet , nëse do të bëni SWP ose vektorizim automatik, nëse do të përdorni komandat e marrjes paraprake të të dhënave të softuerit, ...)
"Hint" _assume_aligned(p, bazë) përdoret për t'i treguar kompajlerit se rajoni i memories i lidhur me treguesin p është rreshtuar në një kufi bazë = 2^n bajt.
Kjo është larg nga listën e plotë"sugjerime" të ndryshme për kompajlerin, të cilat mund të ndikojnë ndjeshëm në efikasitetin e kodit të gjeneruar. Mund të lindë pyetja se si të përcaktohet se përpiluesi ka nevojë për një sugjerim.
Së pari, mund të përdorni diagnostifikimin e përpiluesit në formën e raporteve që ai i ofron programuesit. Për shembull, duke përdorur opsionin -Qvec_reportN (ku N varion nga 0 në 3 dhe përfaqëson nivelin e detajeve) mund të merrni një raport automatik vektorizimi. Programuesi do të ketë akses në informacionin se cilat sythe janë vektorizuar dhe cilat jo. Përndryshe, përpiluesi raporton arsyet pse dështoi vektorizimi. Le të supozojmë se shkaku ishte një varësi e supozuar në mënyrë konservative nga të dhënat. Në këtë rast, nëse programuesi është i sigurt se varësia nuk mund të ndodhë, atëherë mund të përdoret #pragma ivdep. Përpiluesi ofron aftësi të ngjashme (në krahasim me Qvec_reportN për IA-32) në IA-64 për të kontrolluar praninë dhe efektivitetin e SWP. Në përgjithësi, përpiluesit Intel ofrojnë mundësi të shumta për diagnostikimin e optimizimeve.
Së dyti, produkte të tjera softuerike (siç është profili Intel VTune) mund të përdoren për të gjetur pengesat e performancës në kod. Rezultatet e analizës mund ta ndihmojnë programuesin të bëjë ndryshimet e nevojshme.
Ju gjithashtu mund të përdorni listën e kodit të asamblerit të krijuar nga përpiluesi për analizë.
Figura 8
Figura 8 më sipër tregon procesin hap pas hapi të optimizimit të një aplikacioni duke përdorur një përpilues (dhe të tjera produkte softuerike) Intel në gjuhën Fortran për arkitekturën IA-64. Si shembull, konsiderohet një skemë jo-adiabatike e parashikimit rajonal për 48 orë të Roshydrometcenter (mund të lexoni për të, për shembull, në këtë artikull. Artikulli flet për kohën e llogaritjes prej rreth 25 minutash, por ndryshime të rëndësishme kanë ndodhur Që kur është shkruar. Performanca e kodit merret si pikënisje në një sistem Cray-YMP Kodi i pamodifikuar me opsionet e paracaktuara të përpiluesit (-O2) tregoi një rritje të performancës prej 20% në një sistem me 4 drejtime të bazuar në një Intel Itanium 2 900 MHz procesori Aplikimi i optimizimit më agresiv (-O3) rezultoi në një përshpejtim ~ 2,5x pa ndryshuar kodin kryesisht për shkak të analizës SWP dhe marrjes paraprake të të dhënave duke përdorur diagnostikimin e përpiluesit dhe profiluesi Intel VTune zbuloi disa pengesa Për shembull, përpiluesi nuk përpiloi në mënyrë programore disa performanca- sythe kritike, duke raportuar në raport që sugjeron varësinë e të dhënave. Ndryshimet e vogla në kod (direktiva ivdep) ndihmuan për të arritur efektin transmetim aktiv. Duke përdorur profiluesin VTune, u zbulua (dhe raporti i përpiluesit e konfirmoi këtë) se përpiluesi nuk e ndryshoi rendin e sytheve të mbivendosur (këmbimi i lakut) për përdorim më efikas të memories së memories. Arsyeja ishin përsëri supozimet konservatore për varësinë nga të dhënat. Janë bërë ndryshime në kodin burimor të programit. Si rezultat, arritëm të arrijmë një përshpejtim 4-fish në raport me versionin fillestar. Përdorimi i paralelizimit të qartë me direktivat OpenMP, dhe më pas kalimi në një sistem me më shumë se Frekuencë e lartë lejoi të reduktonte kohën e llogaritjes në më pak se 8 minuta, gjë që dha më shumë se 16 herë më shumë shpejtësi në krahasim me versionin fillestar.
Intel Visual Fortran
Intel Visual Fortran 8.0 përdor pjesën e përparme (pjesë e përpiluesit përgjegjës për konvertimin e programit nga teksti në gjuhën e programimit në përfaqësimin e brendshëm të përpiluesit, i cili është kryesisht i pavarur nga gjuha e programimit ose nga makina e synuar), përpiluesi CVF teknologjitë dhe komponentët e përpiluesit Intel, përgjegjës për një sërë optimizimesh dhe gjenerimi të kodeve.Figura 9
Figura 10
Figurat 9 dhe 10 tregojnë grafikët e krahasimit Performanca e Intel Visual Fortran 8.0 me versionin e mëparshëm të Intel Fortran 7.1 dhe me përpilues të tjerë të famshëm në industri nga kjo gjuhë që funksionojnë nën sistemin operativ Familjet e Windows dhe Linux. Për krahasim, u përdorën teste, tekstet burimore të të cilave, duke përmbushur standardet F77 dhe F90, janë në dispozicion në http://www.polyhedron.com/. Në të njëjtin sajt, disponohet informacion më i detajuar për krahasimin e performancës së përpiluesit (Krahasimet e përpiluesit Win32 -> Fortran (77, 90) Standardet e kohës së ekzekutimit dhe krahasimet e përpiluesit Linux -> Fortran (77, 90) Standardet e kohës së ekzekutimit): më shumë përpilues të ndryshëm janë tregohet, dhe mesatarja gjeometrike jepet në lidhje me rezultatet individuale për çdo test.
Në numrin e mëparshëm të revistës, ne diskutuam produktet e familjes Intel VTune Performance Analyzer - mjete të analizës së performancës që janë mjaft të njohura me zhvilluesit e aplikacioneve dhe ju lejojnë të zbuloni në kod aplikacionet e ekipit, i cili konsumon shumë burime procesori, gjë që u jep zhvilluesve mundësinë për të identifikuar dhe eliminuar pengesat e mundshme që lidhen me seksione të tilla të kodit, duke përshpejtuar kështu procesin e zhvillimit të aplikacionit. Megjithatë, vini re se performanca e aplikacioneve varet kryesisht nga sa efikasë janë përpiluesit e përdorur në zhvillimin e tyre dhe cilat veçori harduerike përdorin kur gjenerojnë kodin e makinës.
Përpiluesit më të fundit të Intel C++ dhe Intel Fortran për Windows dhe Linux ofrojnë deri në 40% përfitime në performancën e aplikacionit për sistemet e bazuara në procesorët Intel Itanium 2, Intel Xeon dhe Intel Pentium 4 mbi përpiluesit ekzistues nga shitës të tjerë duke përdorur këto veçori të këtyre procesorë, si teknologjia Hyper-Threading.
Dallimet që lidhen me optimizimin e kodit nga kjo familje përpiluesish përfshijnë përdorimin e një pirg për të kryer operacione me pikë lundruese, optimizimin ndërprocedural (Optimizimi ndërprocedural, IPO), optimizimin në përputhje me profilin e aplikacionit (Optimizimi i udhëhequr nga profili, PGO), ngarkimi paraprak i të dhënave në cache (Data prefetching), i cili shmang vonesën që lidhet me aksesin në kujtesë, mbështetje për veçoritë karakteristike të procesorëve Intel (për shembull, shtesat për përpunimin e të dhënave të transmetimit Intel Streaming SIMD Extensions 2, specifike për Intel Pentium 4), paralelizimi automatik i ekzekutimit të kodit , krijimi i aplikacioneve, që funksionojnë në të shumëfishta tipe te ndryshme procesorët kur optimizohen për njërën prej tyre, mjetet e "parashikimit" të kodit pasues (parashikimi i degës), mbështetje e zgjeruar për të punuar me fijet e ekzekutimit.
Vini re se përpiluesit Intel përdoren në kompani të tilla të njohura si Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Bazuar në testimin e pavarur nga një numër kompanish, performanca e përpiluesve Intel tejkalon ndjeshëm përpiluesit nga prodhuesit e tjerë (shih, për shembull, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).
Më poshtë do të shikojmë disa nga veçoritë versionet e fundit Përpiluesit Intel për desktop dhe server sistemet operative.
Përpiluesit për platformën Microsoft Windows
Përpiluesi Intel C++ 7.1 për Windows
Intel C++ Compiler 7.1 është një përpilues i lëshuar në fillim të këtij viti që ju lejon të arrini shkallë të lartë optimizimet e kodit për procesorët Intel Itanium, Intel Itanium 2, Intel Pentium 4 dhe Intel Xeon, si dhe për procesorin Intel Pentium M duke përdorur Teknologjia Intel Centrino dhe i projektuar për përdorim në pajisjet mobile.
Përpiluesi i specifikuar është plotësisht i pajtueshëm me mjetet e zhvillimit të Microsoft Visual C++ 6.0 dhe Microsoft Visual Studio .NET: Mund të ndërtohet në mjedise të përshtatshme zhvillimi.
Ky përpilues mbështet standardet ANSI dhe ISO C/C++.
Intel Fortran Compiler 7.1 për Windows
Intel Fortran Compiler 7.1 për Windows, i lëshuar gjithashtu në fillim të këtij viti, ju lejon të krijoni kod të optimizuar për procesorët Intel Itanium, Intel Itanium 2, Intel Pentium 4 dhe Intel Xeon, Intel Pentium M.
Ky përpilues është plotësisht i pajtueshëm me mjetet e zhvillimit të Microsoft Visual C++ 6.0 dhe Microsoft Visual Studio .NET, domethënë mund të integrohet në mjediset përkatëse të zhvillimit. Përveç kësaj, ky përpilues ju lejon të zhvilloni aplikacione 64-bit për sistemet operative që funksionojnë në procesorët Itanium / Itanium 2, me ndihmë nga Microsoft Visual Studio në një procesor Pentium 32-bit duke përdorur përpiluesin 64-bit Intel Fortran. Kur korrigjoni kodin, ky përpilues ju lejon të përdorni korrigjuesin për platformën Microsoft .NET.
Nëse keni të instaluar Compaq Visual Fortran 6.6, mund të përdorni përpiluesin Intel Fortran 7.1 në vend të përpiluesit origjinal sepse këta përpilues janë të përputhshëm në nivelin e kodit burimor.
Intel Fortran Compiler 7.1 për Windows është plotësisht në përputhje me standardin ISO Fortran 95 dhe mbështet ndërtimin dhe korrigjimin e aplikacioneve dygjuhëshe C dhe Fortran.
Përpiluesit për platformën Linux
Përpiluesi Intel C++ 7.1 për Linux
Një përpilues tjetër i lëshuar në fillim të vitit, Intel C++ Compiler 7.1 për Linux, ju lejon të arrini një shkallë të lartë të optimizimit të kodit për procesorët Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Ky përpilues është plotësisht i pajtueshëm me përpiluesin GNU C në nivelin e kodit burimor dhe moduleve të objektit, duke lejuar që aplikacionet e ndërtuara me GNU C të migrohen në të pa kosto shtesë. sistemet operative SCO, versionet e hershme të Sun Solaris, etj.), që do të thotë përputhshmëri e plotë me përpiluesi gcc 3.2 në nivelin binar. Më në fund, me përpiluesin Intel C++ 7.1 për Linux, mund të rikompiloni edhe kernelin Linux me disa ndryshime të vogla në kodin e tij burimor.
Përpiluesi Intel Fortran 7.1 për Linux
Përpiluesi Intel Fortran Compiler 7.1 për Linux ju lejon të krijoni kod të optimizuar për procesorët Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Ky përpilues është plotësisht i pajtueshëm me përpiluesin Compaq Visual Fortran 6.6 në nivelin e kodit burimor, duke lejuar ju të rikompiloni aplikacionet me të të krijuara me Compaq Visual Fortran, duke përmirësuar kështu performancën e tyre.
Për më tepër, përpiluesi i specifikuar është i pajtueshëm me programet e përdorura nga zhvilluesit, të tilla si redaktuesi i emacs, korrigjuesi i gabimeve gdb dhe mjeti për ndërtimin e aplikacionit make.
Ashtu si versioni Windows i këtij përpiluesi, Intel Fortran Compiler 7.1 për Linux është plotësisht i pajtueshëm me standardin ISO Fortran 95 dhe mbështet krijimin dhe korrigjimin e aplikacioneve që përmbajnë kod në dy gjuhë C dhe Fortran.
Duhet të theksohet se një kontribut i rëndësishëm në krijimin e përpiluesve të listuar Intel u dha nga specialistë Qendra Ruse Intel për zhvillimin e softuerit në Nizhny Novgorod. Më shumë informacion rreth përpiluesve Intel mund të gjenden në faqen e internetit të Intel në: www.intel.com/software/products/.
Pjesa e dytë e këtij artikulli do t'i kushtohet përpiluesve Intel që krijojnë aplikacione për pajisjet mobile.