internetul Windows. Android

Intel compilatoare. Partajarea compilatoarelor Intel și GCC

Problema anterioară a revistei, am discutat despre produsele de analiză a performanței Intel Vtune, care sunt onorate cu dezvoltatorii de aplicații și permițând detectarea în Codul de aplicare a aplicației la care sunt cheltuite prea multe resurse de procesor, ceea ce dă Dezvoltatorii posibilitatea de a identifica și elimina blocajele potențiale asociate cu secțiuni similare ale codului, accelerând procesul de dezvoltare a aplicațiilor. Observăm totuși că performanța aplicațiilor depinde în mare măsură de modul în care se aplică compilatoarele eficiente la dezvoltarea acestora și ce caracteristici ale hardware-ului sunt utilizate la generarea codului mașinii.

Cele mai recente versiuni ale compilatoarelor Intel Intel Intel C ++ și Intel Fortran pentru Windows și Linux vă permit să câștigați câștiguri în performanța aplicațiilor pentru procesoare Intel Itanium 2 2, Intel Xeon și Intel Pentium 4 până la 40% comparativ cu compilatoarele existente de la Alți producători prin utilizarea unor astfel de caracteristici ale procesoarelor specificate cum ar fi tehnologia hiper-filetare.

La distincția asociată cu optimizarea codului de către această familie de compilatoare, aplicarea unui stack pentru efectuarea operațiunilor de puncte plutitoare, optimizarea interprovizionării (optimizare interprocedurală, IPO), optimizarea în conformitate cu optimizarea ghidată de profil, PGO), preîncărcarea Datele în memoria cache (prefabricarea datelor), care evită o întârziere asociată cu accesul la memorie, susținând caracteristicile caracteristice ale procesoarelor Intel (de exemplu, extensiile pentru extensiile Simd Intel Simd 2 Streaming de date, caracteristica Intel Pentium 4), paralelizarea automată a codului Execuție, creație de aplicare, efectuarea pe mai multe tipuri diferite Procesoarele atunci când optimizează unul dintre ele, instrumente de predicție a codului ulterior (predicție a sucursalelor), suport avansat pentru fluxurile de rulare.

Rețineți că compilatoarele Intel sunt utilizate în astfel de companii celebre ca Alias \u200b\u200b/ Wavefront, Oracle, Fujitsu Siemens, Abaqus, Grafică Silicon, IBM. Conform testelor independente efectuate de o serie de companii, performanța compilatoarelor Intel depășește în mod semnificativ performanța compilatoarelor de la alți producători (vezi, de exemplu, http://inte.com/software/products/compilers/techtopics/compiler_gnu_perf. PDF).

Mai jos vom analiza unele caracteristici ale celor mai recente compilatoare Intel pentru desktop și server sisteme de operare.

Compilatoare pentru platforma Microsoft Windows

Intel C ++ Compiler 7.1 pentru Windows

Intel C ++ Compiler 7.1 este un compilator eliberat la începutul acestui an, care vă permite să obțineți un grad ridicat de optimizare a codului pentru procesoare Intel Itanium, Intel Itanium 2, Intel Pentium 4 și Intel Xeon, precum și pentru procesor Intel Pentium M utilizând tehnologia Intel Centrino și destinată utilizării în dispozitivele mobile.

Compilatorul specificat este pe deplin compatibil cu Microsoft Visual C ++ 6.0 și Microsoft Studio vizual. .NET: Poate fi integrată în mediile de dezvoltare corespunzătoare.

Acest compilator acceptă standardele ANSI și ISO C / C ++.

Intel Fortran Compiler 7.1 pentru Windows

Compilerul Intel Fortran 7.1 pentru Windows, eliberat și la începutul acestui an, vă permite să creați un cod optimizat pentru procesoare Intel Itanium, Intel Itanium 2, Intel Pentium 4 și Intel Xeon, Intel Pentium M.

Acest compilator este complet compatibil cu Microsoft Visual C ++ 6.0 și Microsoft Visual Studio .NET, adică poate fi încorporat în mediile de dezvoltare corespunzătoare. În plus, acest compilator vă permite să dezvoltați aplicații pe 64 de biți pentru sistemele de operare care rulează pe procesoare Itanium / Itanium 2 utilizând Microsoft Visual Studio pe un procesor Pentium de 32 de biți utilizând un compilator de compilator Intel Fortran. La depanarea codului, acest compilator vă permite să aplicați un debugger pentru platforma Microsoft .NET.

În prezența produsului instalat Compaq Visual Fortran 6.6, acesta poate fi utilizat în locul compilatorului Intel Fortran 7.1, deoarece compilatoarele specificate sunt compatibile la nivelul codului sursă.

Compilerul Intel Fortran 7.1 pentru Windows este complet compatibil cu standardul ISO FORTRAN 95 și sprijină crearea și depanarea aplicațiilor care conțin cod în două limbi - C și Fortran.

Compilatoare pentru platforma Linux

Intel C ++ Compiler 7.1 pentru Linux

Un alt compilator care a văzut lumina la începutul anului, compilatorul Intel C ++ 7.1 pentru Linux, vă permite să obțineți un grad ridicat de optimizare a codului pentru procesoare Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Acest compilator este complet compatibil cu compilatorul GNU C C la nivelul codului sursă și modulele de obiect, care, fără costuri suplimentare, vă permite să migrați aplicațiile create utilizând GNU C. Compilatorul compilatorului Intel C ++ suportă C ++ Abi (adăugați Kernelul Linux, permițându-vă să rulați un cod compilat pentru alte platforme, cum ar fi sistemele de operare SCO timpurie, versiunile Suslaris timpurie etc.), ceea ce înseamnă compatibilitate completă cu compilatorul GCC 3.2 la nivel cod binar. În cele din urmă, utilizând compilatorul Intel C ++ 7.1 pentru Linux, puteți chiar să recompilați kernelul Linux făcând mai multe modificări minore la acesta. cod sursa.

Intel Fortran Compiler 7.1 pentru Linux

Compilerul Intel Fortran 7.1 pentru Linux vă permite să creați un cod optimizat pentru procesoarele Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Acest compilator este complet compatibil cu compilatorul Compaq Visual Fortran 6.6 la nivelul codului sursă, Vă permite să efectuați o recompirare a aplicației creată utilizând Compaq Visual Fortran, sporind astfel performanța acestora.

În plus, compilatorul specificat este compatibil cu dezvoltatorii utilizați utilizați de utilități precum EMACS Editor, Debugger GDB, utilitatea pentru asamblarea aplicațiilor Make.

Ca versiunea Windows a acestui compilator, Intel Fortran Compiler 7.1 pentru Linux este complet compatibil cu standard ISO. FORTRAN 95 și sprijină crearea și depanarea cererilor care conțin codul în două limbi - C și Fortran.

Trebuie subliniat faptul că specialiștii Centrului Rusiei Intel privind dezvoltarea de software din Nizhny Novgorod au fost o contribuție semnificativă la crearea de compilatoare enumerate Intel. Mai multe informații despre Intel Compilor pot fi găsite pe site-ul Intel la adresa www.intel.com/software/products/.

A doua parte a acestui articol va fi dedicată compilatorilor Intel care creează aplicații pentru dispozitivele mobile.

Exemple de hacking real: Intel C ++ 7.0 Compiler - Arhiva Wasm.ru

... Intel C ++ 7.0 compilatorul a protestat profund Noaptea, undeva mai oră în a cincea în dimineața. Am vrut să dorm incredibil, dar, de asemenea, curiozitatea: dacă protecția a fost consolidată sau nu, de asemenea, buruieni. Dacă nu am reușit să mă ocup de apărarea, încă nu pot să adorm, eu, deschizând o nouă consolă și reinstalarea variabilelor de sistem TMP și TMP la directorul C: \\ Temp, Naskoro a început numele lung de instalare în W_CC_P_7.07.073.exe linie de comanda (Necesitatea de a instala variabilele TMP și TMP este explicată prin faptul că în Windows 2000 acestea indică un director foarte supărat și instalatorul Intel C ++ - și nu numai că nu acceptă căile unei astfel de mărimi imense) .

Imediat sa dovedit că politica de protecție a fost revizuită în mod radical, iar acum licența a fost verificată deja în faza de instalare a programului (în versiunea 5.x, instalarea a fost efectuată fără probleme). Ok, lăsați comanda dir și uitați-vă la conținutul a ceea ce trebuie să luptăm cu:

    Folder de conținut C: \\ tmp \\ Intelc ++ Compiler70

    17.03.2003 05:10

    HTML.

    17.03.2003 05:11

    X86.

    17.03.2003 05:11

    Itanium.

    17.03.2003 05:11

    Note.

    05.06.2002 10:35 45 056 Autorun.exe

    07/10/2001 12:56 27 Autorun.inf

    10.29.2002 11:25 2 831 Ccompindex.htm

    10/24/2002 08:12 126 976 chklic.dll

    10/18/2002 22:37 552 960 chklic.exe

    10/17/2002 16:29 28 663 Clicens.rtf

    10/17/2002 16:35 386 credist.txt

    10/16/2002 17:02 34 136 Creelnotes.htm

    03/19/2002 14:28 4 635 Plsuite.htm

    02/21/2002 12:39 2 478 Register.htm

    02.10.2002 14:51 40 960 Setup.exe

    02.10.2002 10:40 151 Setup.ini

    07/10/2001 12:56 184 Setup.mwg

    19 Fișiere 2 519 238 Byte

    6 Dosare 886 571 008 Byte GRATUIT

Da! Programul de instalare setup.exe ocupă doar patruzeci de la Kilobyte Pony. Foarte bun! Într-un astfel de volum, protecția gravă este puțin probabil să se ascundă și chiar așa - acest fișier mic nu ar trebui analizat în întregime - la ultimul octet al listei de dezasamblare. Cu toate acestea, nu este un fapt că cod de securitate Situat în Setup.exe, poate atât într-un alt loc, de exemplu ... chklic.dll / chklic.exe, angajat în agregat puțin mai puțin de șapte kilobytes. Așteptați, care este un astfel de chklic? Este o tăietură de la licența de verificare sau ce?! Um, băieții de la Intel, în mod evident, probleme serioase, cu un simț al umorului. Ar fi mai bine ca ei să numească acest fișier "mă hack mele" cuvânt cinstit! Bine, judecând cu volumul, Chclicul este același Flex LM și acolo, iar cu el am întâlnit-o deja (vezi "Intel C ++ 5.0 Compiler") și, aproximativ imaginați cum să o spargeți.

Lăsați echipa "Dumpbin / Exports Chclic.dll" pentru studiul funcțiilor exportate și ... HOLD greu pentru clase, pentru a nu cădea de pe președinte:

    Dumpul de fișier chklic.dll

  1. Secțiunea conține următoarele exporturi pentru chklic.dll

    0 caracteristici

    3DB438B4 Ora Data Stamp Luni 21 octombrie 2002 21:26:12

  2. 1 Număr de funcții

    1 Număr de nume

    numele ORDINAL HINT RVA

    1 0 000010A0 _Checkvalidlicense

La naiba! Protecția exportă doar o singură caracteristică cu numele minunat de verificare. „Minunat“ - deoarece scopul funcției devine clară a numelui său și posibilitatea de a evita analiza amanuntita a apare codul dezasamblor. Ei bine, ei au bătut tot interesul ... ar fi mai bine dacă ar fi exportat-o \u200b\u200bla ordinari dacă sau cel puțin au numit-o în vreun fel dacă numele tipului des decriptare ar fi.

... s-a căsătorit! Bine, înapoi la ramurile noastre. Să vorbim logic: dacă întregul cod de protecție este concentrat direct în chklic.dll (și, judecând după caracterul "montat" de protecție, acest lucru este adevărat), atunci toată "protecția" se referă la apelul de la Setup.exe și verificarea rezultatului. Prin urmare, pentru "hacking" este suficient doar să dispară chklic.dll, forțând funcția Chekvalidlicense să se întoarcă mereu ... Da, apropo, ce ar trebui să se întoarcă? Mai precis: ce fel de valoare de returnare este verificarea de succes a licenței? Nu, nu vă grăbiți să setup.exe dezasamblat pentru a determina, deoarece nu există opțiuni posibile pentru orice alte opțiuni posibile: fie false sau adevărate. Pariați pe adevărat? Ei bine, într-un anumit sens este logic, dar, pe de altă parte: de ce am hotărât de fapt că funcția de verificareLilidlicense returnează tocmai steagul succesului operației și nu codul de eroare? La urma urmei, ar trebui să motiveze cumva motivele eșecului de instalare a compilatorului: Fișierul cu licența nu este găsit, fișierul este deteriorat, licența este întârziată și așa mai departe? Ei bine, să încercăm să ne întoarcem la zero și dacă nu călătoresc, vom rambursa unitatea.

OK, Fix, du-te! Noi rulăm HieW, deschideți fișierul chklic.dll (dacă nu se deschide - aruncarea de trei ori, vom copia temporar la rădăcină sau orice alt director care nu conține în numele dvs. de specialiști care nu-i plac la Hiew „. y) Apoi, prin contactarea din nou la masa de export obținute cu ajutorul DUMPBIN, determină adresa funcției checkvalidlicense (în acest caz, 010a0h) și prin«10a0»du - te la început acum, -. tăiat pe«viu» , suprascrierea peste vechiul cod „XOR EAX, EAX / RETN 4“. de ce este „Ren 4“, și nu doar“ret«? Da, pentru că funcția susține acordul stdcall, pe care o puteți afla la Hiew» E pe epilog sale (doar parcurge ecranul dezasamblor în jos până când Meet RET).

Verificați ... funcționează! În ciuda lipsei unei licențe, un instalator, fără a pune întrebări suplimentare, începe instalarea! Prin urmare, protecția a scăzut. Oh, nu pot să cred că totul este atât de simplu și să nu stați, să priviți prost la monitor în timp ce așteptați finalizarea procesului de instalare a programului, raray pe setup.exe dezasamblatorul preferat Ida. Primul lucru care se grăbește în ochi, lipsa de verificare de verificare în lista funcțiilor importate. Poate că este un fișier Chclic.exe într-un fel? Încercăm să găsim legătura corespunzătoare între liniile recunoscute automat: "~ Vizualizare anames", "Chcklic" ... Da, liniile "chklic.exe" nu este deloc aici, dar se găsește "chklic.dll". Da, este clar, înseamnă că biblioteca chiclică este încărcată cu un aspect explicit prin loaglibrary. Iar tranziția la legătura încrucișată confirmă acest lucru:

    Text: 0040175D Push offset achklic_dll; LPLIBFILAME.

    Text: 00401762 Apelați DS: Loadlibrary

    Text: 00401762; Încărcăm chklic.dll ^^^^^^^^^^^^^^^^^^

    Text: 00401762;

    Text: 00401768 MOV ESI, EAX

    Text: 0040176A Împingeți offset A_Checkvalidlic; Lpprocame.

    Text: 0040176F împinge ESI; Hmodul.

    Text: 00401770 CALL DS: GetProcaddress

    Text: 00401770; Obținem adresa funcției Checkvalidlicense

    Text: 00401770;

    Text: 00401776 CMP ESI, EBX

    Text: 00401778 jz loc_40192e

    Text: 00401778; Dacă nu există o astfel de bibliotecă, lăsăm instalatorul

    Text: 00401778;

    Text: 0040177E CMP EAX, EBX

    Text: 00401780 jz loc_40192e

    Text: 00401780; Dacă nu există o astfel de funcție în bibliotecă, lăsăm instalarea

    Text: 00401780;

    Text: 00401786 PUSH EBX

    Text: 00401787 Call EAX

    Text: 00401787; Apelați funcția Chekvalidlicense

    Text: 00401787;

    Text: 00401789 Test EAX, EAX

    Text: 0040178B jnz loc_4019a3

Text: 0040178; Dacă funcția nu a returnat zero, plecăm din programul de instalare

Incredibil, dar acest lucru la protecția primitivă de groază a fost construită exact așa! Mai mult decât atât, fișierul chklic.exe semi-metru nu este necesară la toate! Și de ce merită să o tragi de pe Internet? Apropo, dacă vă decideți să păstrați distribuitorul compilatorului (atenție: nu am spus "Distribuiți"!), Pentru a salva spațiul de disc Chclic. * Puteți șterge: fie prin a gestiona setup.exe, după ce ați studiat-o de contact le, sau pur și simplu a crea propria dvs. Chklic.dll, Exportul stdcall Funcția Checkvalidlicense View: Int Checkvalidlicense (int some_flag) (return 0;)

Deci, în timp ce toți au discutat toate acestea, programul de instalare a terminat instalarea compilatorului și finalizat în totalitate activitatea sa. Este interesant dacă compilatorul va începe sau toate cele mai interesante doar începe? Descânc febră în scăderea ierarhiei ramificate a dosarelor imbricate, găsim ICL.exe, care, după cum era de așteptat, este în catalogul de bin, faceți clic pe și ... compilatorul natural nu pornește, referindu-se la faptul că "ICL: eroare : s -a putut Checkout Flex LM de licență“ , fără de care nu poate continua activitatea sa.

Se pare că Intel a aplicat o protecție mai multe niveluri și primul nivel sa dovedit a fi o protecție brută de proști. Bine! Acceptăm acest apel și, pe baza experienței dvs. anterioare, în căutarea automată a fișierului LMGR * .dll din catalogul compilatorului. Inutil! De data aceasta acest fișier nu se întoarce aici, dar se pare că iCl.exe a adăugat puternic în greutate, trecând marca Kilobyte ... STOP! Și au legat dezvoltatorii compilatoarelor de acest aspect static Flex LM? Ne uităm: în Intel C ++ 5.0 cantitatea de dimensiuni lmgr327.dll și iCl.exe s-au ridicat la 598 kb, iar acum singur este ICL.exe durează 684 kb. Având în vedere amendamentele la "obezitatea" naturală a senilă, numerele sunt foarte bine convergente. Deci, încă flexi lm! Oh! Dar acum, fără nume simbolice de funcții, protecția de rupere va fi mult mai greu ... Cu toate acestea, nu vom panica! Să ne gândim, doar calm! Echipa de dezvoltare este puțin probabil să rescris complet întregul cod care interacționează cu această protecție „plic“. Cel mai probabil, "îmbunătățirea" este doar o schimbare a tipului de aspect și sa încheiat. Și dacă da, atunci șansele de a hacking programul este încă mare!

Manting că ultima dată când codul de protecție este în funcția principală, prin definirea adresei sale, vom instala doar pauza și, așteptând ca estul debuggerului, urmărind stupid codul, uita-te alternativ la debugger, apoi pe fereastra de ieșire a Program: nu a apărut există un mesaj sumară? În același timp, toate tranzițiile condiționate ne întâlnesc, sărbătorim pe o bucată separată de hârtie (sau amâna în memoria noastră, dacă doriți atât de mult), nu uitați să specificați dacă fiecare tranziție condițională sau nu ... STOP! Ceva îmi pare rău că suntem cu tine, dar mesajul creuzetului a sărit deja afară! OK, bine! Să vedem ce tranziție condiționată la el a corespuns. Înregistrările noastre arată că ultima întâlnire cu tranziția a fost tranziția JNZ condiționată situată la 0401075h și "reacția" la rezultat, procedura rezultată sub_404C0E:

  • Text: 0040107F loc_40107F :; Cod Xref: _Main + 75 ^ j

    Text: 0040107F MOV EAX, AFFS offset; "FFRPS"

    Text: 00401084 MOV EDX, 21h

    Text: 00401089 CALL SUB_404C0E

    Text: 0040108E Test EAX, EAX

    Text: 00401090 jnz scurt loc_40109a

    Evident, SUB_404C0E este cel mai procedura de protecție, care efectuează o licență pentru disponibilitatea sa. Cum să o facă? Ei bine, există multe opțiuni ... În primul rând, este posibil, analizând cu grijă și scrupulos conținutul Sub_404C0E pentru clarificare: exact ce verifică exact. În al doilea rând, puteți înlocui pur și simplu jnz scurt loc_40107f pe jz scurt loc_40107f sau chiar nop, nop. În al treilea rând, comandantul rezultatului de returnare al EAX, EAX poate fi transformat într-o comandă de configurare zero: Xor EAX, EAX. În al patrulea rând, puteți dispărea sub_404C0e în sine, astfel încât întotdeauna returnează zero. Nu știu cum, dar mi-a plăcut cel mai mult decât numărul trei. Schimbăm doi octeți și lansați compilatorul. Dacă nu există alte controale în "licențierea" în apărare, atunci programul va funcționa și, în consecință, dimpotrivă. (După cum ne amintim, au existat două în a cincea versiune a acestor verificări). Uimitor, dar compilatorul nu mai jură și funcționează! Într-adevăr, așa cum ar trebui să fie de așteptat, dezvoltatorii săi nu au consolidat apărarea, ci, dimpotrivă, chiar l-au slăbit! Chris Kaspersky.

  • Compilatorii Intel C ++ și Fortran și Biblioteca MKL

    Împreună cu compilatoarele standard GNU pentru Linux, pe clustere ale complexului computațional NIVC, sunt instalate compilatoarele Intel C ++ și Fortran. În prezent (la începutul anului 2006), compilatoarele versiunii 9.1 sunt instalate pe toate clusterele. Această pagină este dedicată descrierii celor mai importante opțiuni și setări ale acestor compilatoare, precum și principalele lor diferențe de la compilatoarele GNU. Pagina este concentrată în principal pe utilizatorii de clustere din NIVZ MSU, dar poate fi utilă pentru alți utilizatori de limbă rusă. Nu există întrebări legate de compilarea platformei IA-64.

    De asemenea, pe toate clusterele este biblioteca Intel Biblioteca matematică a kernelului (MKL) Versiunea 8.0.2. Biblioteca este situată în directorul / USR / MKL. Atragem atenția asupra faptului că catalogul LC este disponibil 32, 64 și subdirectoarele EM64T. Pe clusterul Ant, trebuie să utilizați bibliotecile din subdirectorul EM64T și pe celelalte clustere - de la subdirectorul 32. Toate documentele și exemplele necesare pot fi obținute din directorul / USR / MKL / DOC.

    Ce a cerut noi compilatoare?

    Nevoia de noi compilatoare a provenit în principal, a) de a sprijini programarea în Fortran 90, precum și B) pentru o optimizare mai puternică a programului în Fortran, care oferă un compilator G77 folosind o difuzare în limba C și apoi compilarea folosind GCC.

    Aceste cerințe satisfac, de asemenea, compilatoarele IGP (Grupul Portland), dar compania dezvoltatorului a refuzat să le furnizeze Rusiei.

    Cum se utilizează?

    Compilatoarele Intel sunt numite folosind comenzi. iCC. (C sau C ++) iCPC. (C ++) și ifort. (Fortran 77/90). Comenzile MPICC, MPICC și MPIF77 pentru compilarea și asamblarea programelor MPI sunt, de asemenea, configurate să utilizeze compilatoarele Intel.

    Abilitatea de a utiliza compilatoarele GNU folosind MPIGCC, MPIG ++ și MPIG77 (Fortran 90 nu este acceptată).

    Fișiere de intrare

    Implicit, fișiere de extensie .cpp. și .Cxx. sunt considerate a fi textele sursă în C ++, fișiere cu expansiune .c.c. - textele sursă din limba SI și compilatorul ICPC compilează, de asemenea, fișierele. C ca texte sursă pe C ++.

    Fișiere cu extensii .f., .ftn. și .pentru Recunoscute ca texte sursă într-o limbă foto, cu o formă fixă \u200b\u200bde înregistrare și fișiere .fp. și .F. A trecut suplimentar prin preprocesorul limbii Fortran. Fișiere cu extensie .F90. Se consideră că textele inițiale ale FORTRAN 90/95 cu o formă liberă de înregistrare. Într-o modalitate explicită, puteți specifica o formă fixă \u200b\u200bsau gratuită de înregistrare a programului care utilizează opțiunile. -Fi. și -FR. respectiv.

    Fișiere cu extensie .S.S. Recunoscut ca cod în limba de asamblare pentru IA-32.

    Caracteristicile compilatoarelor Intel

    Aici oferim caracteristicile compilatoarelor Intel, deoarece acestea sunt declarate de către dezvoltator în manualul de utilizare cu unele dintre comentariile noastre.

    • Optimizare semnificativă
      Aparent, aici este menit să optimizeze codul la un nivel ridicat, adică. În primul rând, diverse conversii de cicluri pe care aproape toate compilatoarele le fac cu succes mai mare sau mai puțin
    • Optimizarea calculelor punctelor plutitoare
      Aparent, este în minte în primul rând utilizarea maximă a comenzilor implementate la nivelul hardware
    • Optimizare interponstabilă
      acestea. Optimizarea globală a întregului program, spre deosebire de optimizarea convențională, care afectează numai codul de funcții specifice
    • Optimizarea profilului
      acestea. Abilitatea de a conduce un program în modul de testare, colectați date de timp pentru trecerea acelora sau a altor fragmente de cod în interiorul funcțiilor utilizate frecvent, apoi utilizați aceste date pentru a optimiza
    • Senzarea sistemului de comandă SSE în procesoarele Pentium III
      notă: Comenzile SSE2 sunt mai interesante pentru sarcinile de calcul, adică. Echipele vectoriale peste numere reale pe 64 de biți, dar sunt susținute numai în procesoare Pentium 4, care la dispoziția noastră nu sunt încă
    • Vectorizarea automată
      acestea. Din nou, folosind comenzile SSE și SSE2 introduse de compilatorul automat
    • Suport OpenMP pentru programarea sistemelor SMP
      Notă: Clusterul recomandă să utilizați în mod avantajos interfața MPI; Utilizarea pe scară largă a OpenMP pe cluster nu este asumată și că astfel de experimente nu au fost încă efectuate; Dar probabil are sens să folosiți biblioteci (Blas și colab.), Paralel pentru memoria globală.
    • Poziția de date
      acestea. Aparent, folosind comenzile presetate din memorie la memoria cache, care va fi necesară după un timp
    • Codul "Dispatch" pentru diferite procesoare
      acestea. Abilitatea de a genera cod pentru diferite procesoare într-un fișier executabil, care vă permite să utilizați avantajele cele mai noi procesoare Pentru a obține cea mai mare performanță pe ele, menținând în același timp compatibilitatea binară a programelor cu procesoare anterioare; Pe clusterul nostru nu este încă relevant, pentru că Numai procesoarele Pentium III sunt utilizate și nu trebuie să transmită și să ruleze pe alte mașini compilate pe cluster

    Opțiuni principale compilatoare

    Cea mai interesantă, desigur, sunt opțiunile pentru optimizarea codului. Cele mai multe opțiuni sunt comune pentru compilatoarele C ++ și Fortran. Mai mult descriere detaliata Opțiuni în manualele de utilizare în limba engleză.

    Nivele de optimizare
    OpțiuneDescriere
    -O0.Dezactivează optimizarea
    -O1 sau -O2.Optimizarea de bază pentru viteza. Introducerea inline a funcțiilor bibliotecii este dezactivată. Pentru compilatorul C ++, aceste opțiuni oferă aceeași optimizare, pentru opțiunea compilatorului Fitran -O2 este preferabilă, deoarece Include încă promovarea ciclurilor.
    -O3.Optimizare mai puternică, inclusiv conversii de cicluri, alegeri de date, folosind OpenMP. Unele programe nu pot fi garantate performanțe sporite în comparație cu -O2.. Este logic să se folosească cu opțiunile vectorizării -Xk. și -XW..
    -Nroll [n]Include promovarea ciclurilor la n ori.
    Optimizare pentru un procesor specific
    OpțiuneDescriere
    -TPP6.Optimizarea procesoarelor Penitum Pro, Pentium II și Pentium III
    -TPP7.Optimizarea procesoarelor Penitum 4 (această opțiune este activată în mod implicit pentru compilatorul din IA-32)
    -Xm.Generarea de coduri folosind extensiile MMX specifice procesoarelor Pentium MMX, Pentium II și mai târziu
    -Xk.Generarea de cod utilizând extensiile SSE specifice procesoarelor Pentium III
    -XW.Cod Generation utilizând extensiile SSE2 specifice procesoarelor Pentium 4
    Optimizare interponstabilă
    -Ip.Include optimizarea interdacțională într-un singur fișier. Dacă specificați opțiunea -Ip_no_inlining., Inserțiile inline sunt deconectate.
    -Ipo.Include optimizarea interdistantă între diferite fișiere
    Optimizare folosind profiluri
    -Prof_gen.A generat codul de "profilare" care va fi folosit pentru profilare, adică Colectarea datelor privind frecvența trecerii anumitor locuri în program
    -Prof_useOptimizarea se bazează pe datele obținute în timpul fazei de formare. Este logic să se folosească cu opțiunea de optimizare Interclace -Ipo..
    Paramelizare pentru sistemele SMP
    -Openmp.Suportul OpenMP 2.0 este inclus.
    -ParalelInclude paralelizarea automată a ciclurilor

    Performanţă

    Conform rezultatelor testelor SPEC CPU2000, publicate pe serverul IXBT.com, compilatoarele Intel Version 6.0 aproape peste tot au fost mai bune decât compilatoarele GCC 2.95.3, 2.96 și 3.1 și IPI versiunea 4.0.2. Aceste teste au fost efectuate în 2002 pe un computer cu procesorul Pentium 4 / 1.7 GHz și Redhat Linux 7.3.

    Potrivit rezultatelor testelor efectuate de Polyhedron, Versiunea Intel Fortran Compiler 7.0 aproape pretutindeni sa dovedit a fi mai buna decat alte Fortran 77 compilatoare pentru Linux (Absoft, GNU, Lahey, Nag, NAS, IGI). Numai în unele teste, compilatorul Intel pierde ușor compilatoarele Absoft, Nag și Lahey. Aceste teste au avut loc pe un procesor Pentium 4 / 1.8 GHz și Mandrake Linux 8.1.

    Versiunea Intel 9.1 Compilatoarele depășesc, de asemenea, compiyatorii GCC și arată performanța comparabilă cu Absoft, PathScale și PGI.

    Vom fi recunoscători acelor utilizatori și cititori care ne vor trimite date privind efectul selecției compilatorului (GCC sau Intel) și opțiuni de optimizare pentru viteza de muncă pe sarcinile lor reale.

    Biblioteci

    SI Language Compiler utilizează biblioteca de execuție concepută ca parte a proiectului GNU ( libc.a.).

    Următoarele biblioteci sunt furnizate cu compilator Intel C ++:

    • libcprts.a. - Biblioteca Runtime C ++ Biblioteca de Dezvoltare Dinkumware.
    • libcxa.a. - Biblioteca suplimentară de execuție pentru dezvoltarea Intel C ++.
    • libimf.a. - Biblioteca funcțiilor matematice ale dezvoltării Intel, care include implementări optimizate și de înaltă precizie ale funcțiilor trigonometrice, hiperbolice, exponențiale, complexe și alte funcții (pentru detalii, a se vedea lista de funcții).
    • libirc.a. - codul de susținere a runtime (PGO) și "dispecerizare" în funcție de procesor (vezi mai sus).
    • libguide.a. - Implementarea OpenMP.

    Această listă enumeră bibliotecile statice, dar pentru cele mai multe dintre ele sunt, de asemenea, dinamice, adică. Conectat în timpul opțiunilor de pornire ( .asa de).

    Împreună cu compilatorul Fatran, sunt furnizate următoarele biblioteci: libcepcf90.a., libiepcf90.a., libIntrine.a., libf90.a.De asemenea, folosind Libimf.a Biblioteca Funcții Matematice.

    Asamblarea fișierului executabil.

    Conectarea bibliotecii este posibilă statică (în timpul ansamblului) sau dinamică (în timpul pornirii programului). Abordarea dinamică vă permite să reduceți dimensiunea fișierului executabil, vă permite să separați aceeași copie a bibliotecii în memorie, dar pentru aceasta trebuie să instalați pe fiecare nod unde vor fi lansate programe, un set complet de biblioteci dinamice utilizate .

    Astfel, dacă ați instalat compilatorul Intel pe aparatul dvs. cu Linux și doriți să executați fișierele executabile colectate pe alte mașini, atunci trebuie să utilizați sau să utilizați un ansamblu static (care este mai ușor) sau o copie la aceste mașini dinamice Intel biblioteci (de obicei de la Tipul / Opt / Intel directorul / Compirul70 / IA32 / LIB) la unul dintre directorul afișat în fișierul /etc/ld.so.conf, precum și să aveți grijă ca același set de biblioteci dinamice dinamice GNU / Linux să fie instalate pe aceste mașini.

    În mod implicit, toate bibliotecile de dezvoltare Intel (cu excepția libcxa.so) sunt conectate static, iar toate bibliotecile de sistem Linux și bibliotecile GNU sunt conectate dinamic. Folosind opțiunea -Static Puteți forța colectorul (Link Editor) pentru a conecta toate bibliotecile static (ceea ce va crește cantitatea de fișier executabil) și utilizând opțiunea -I_dynamic. Puteți să vă conectați dinamic toate bibliotecile de dezvoltare Intel.

    Când conectați biblioteci suplimentare utilizând opțiunea Tip -Liberabord Poate fi nevoie să utilizați opțiunea -LinePentru a seta calea în care sunt postate biblioteci.

    Cu opțiuni -Bstatic. și -Bdynamic. Puteți seta în mod explicit conexiunea dinamică sau statică a fiecărei biblioteci specificate pe linia de comandă.

    Folosind opțiunea -C. Adunarea fișierului executabil este dezactivată și se efectuează numai compilarea (generarea modulului obiect).

    Partajarea modulelor pe fortăreață și Si

    Pentru a partaja module scrise în limbile FORTRAN și SI, trebuie să coordonați numele procedurilor din modulele de obiect, să transmiteți parametrii, precum și accesul la variabilele globale dacă există astfel de.

    Implicit, Compilerul Intel Fortran traduce numele procedurii în registrul inferior și adaugă o subliniere la sfârșitul numelui. Compilatorul C nu modifică niciodată numele funcțiilor. Astfel, dacă vrem de la modulul de la Fitran, apelați la funcția sau procedura FNAME implementată pe C, apoi în modulul de pe SI trebuie să fie denumit FNNAME_.

    Firm Compiler acceptă opțiunea -Nu [numele fișierului]care vă permite să dezactivați adăugarea de subliniere la numele intern al procedurilor. Dacă numele fișierului este specificat, acest lucru se face numai pentru numele procedurilor enumerate în fișierul specificat.

    În mod implicit, pe cetate, parametrii sunt transmise prin referință, iar pe C este întotdeauna valoarea. Astfel, atunci când sunați la procedura FORTRANS, trebuie să transmităm indicii la variabilele corespunzătoare care conțin valorile parametrilor reali ca parametri. Când scrieți o funcție care trebuie apelată din modulul din Fortran, trebuie să descriem parametrii formali ca indicatori ai tipurilor corespunzătoare.

    În modulele de pe SI, este posibil să se utilizeze blocuri comune definite în module în FORTRAN (mai multe despre acest lucru, vezi Ghidul utilizatorului Intel Fortran, capitolul C și Fortran).

    Partajarea compilatoarelor Intel și GCC

    Module de obiect în limba SI, obținute prin compilatorul Intel C ++, sunt compatibile cu modulele obținute de compilatorul GCC și biblioteca GNU pentru limba C. Astfel, aceste module pot fi împărțite într-un singur program colectat folosind comenzi ICC sau GCC, dar pentru conectarea corectă a bibliotecilor Intel, se recomandă utilizarea ICC.

    Compilatorul Intel suportă un număr de extensii de limbi străine SI utilizate în cadrul proiectului GNU și susținute de compilatorul GCC (dar nu toate, pentru mai multe detalii, vezi aici).

    Nu este spus compatibilitatea modulelor de obiect în limbile C ++ și Fortran în manualul de utilizare, aparent, nu este acceptată.

    Standarde de sprijin

    Compilerul Intel C ++ 7.0 pentru compilatorul Linux suportă ANSI / ISO (ISO / IEC 9899/1990). Este posibilă instalarea compatibilității stricte cu începutul ANSI C ( -Ansi.) sau un dialect ANSI C extins ( -Xa.). Când utilizați opțiunea -C99.

  • Manuale compilatoare HTML (disponibile în "Online" pe serverul nostru, dar necesită suport de limbă Java)
    • Intel C ++ Ghidul utilizatorului compilatorului.
    • Intel Fortran Compiler "Ghidul utilizatorului.
  • Mâinile cu compilatoare în limba engleză în format PDF (Acrobat Reader este necesar, trebuie să descărcați fișiere PDF pe computer)
    • Intel C ++ Manual de utilizare al compilatorului: Ghidul utilizatorului Intel C ++ Compilator (1,3 MB, 395 de pagini).
    • Intel Fortran: Manualul utilizatorului Intel Fortran: Ghidul lui Intel Fortran Compiler "(1,1 MB, 285 de pagini).
    • Directorul programatorului în Fortran: Referința programatorului Intel Fortran (7 MB, 566 de pagini).
    • FORTRAN Library Directory: Intel Fortran Biblioteci de referință Manual (9,5 MB, 881 Page).
  • Ghidul de depanare de depanare Intel Application.
  • Compilații de comparație pe testele SPEC CPU2000 (articol pe IXBT.com în limba rusă).
  • Site-ul lui Polyhedron prezintă rezultatele unei comparații a diferitelor compilatoare.
  • Introducerea sfârșitului anului 2003, Intel a prezentat o versiune 8.0 a colecției sale de compilatoare. Compilații noi sunt concepuți pentru a îmbunătăți performanța aplicațiilor care rulează pe servere, PC-uri desktop și sisteme mobile (laptop-uri, telefoane mobile și computere de buzunar) bazate pe procesoare Intel. Este plăcut să observăm că acest produs a fost creat cu participarea activă a angajaților Centrului NIZHNY Novgorod Intel cu privire la dezvoltarea software-ului și a specialiștilor Intel din Sarov.

    Noua serie include compilatoarele Intel pentru limbile C ++ și Fortran pentru Windows și Linux, precum și Compilatoare Intel pentru limba C ++ pentru Windows CE .NET. Compilatoarele sunt concentrate pe sisteme bazate pe Intel: Intel Itanium 2, Intel Xeon, Intel Pentium 4, procesoare cu arhitectura de arhitectura Internet Internet Intel pentru telefoane mobile și PC și PC și procesorul Intel Pentium M pentru PC-urile mobile (componenta tehnologică Intel Centrino pentru PC-urile mobile).

    În compilatorul Intel Visual Fortran pentru Windows, o nouă tehnologie de compilare a generării este implementată pentru soluții de calcul de înaltă performanță. Aceasta conectează funcționalitatea limbii Compaq Visual Fortran (CVF) și îmbunătățind performanța care a fost posibilă datorită tehnologiilor de optimizare a compilației și a codului Intel Corporation generează și simplifică problema transferului codului sursă dezvoltat de CVF la Intel Visual Fortran Mediu. În acest compilator, funcțiile CVF sunt implementate pentru prima dată atât pentru sistemele Intel pe 32 de biți, cât și pentru sistemele bazate pe procesoarele familiale Intel Itanium care operează în mediul Windows. În plus, acest compilator vă permite să implementați funcții de limbă CVF pe sistemele care rulează Linux pe baza procesoarelor Intel pe 32 de biți și a procesatorilor de familie Intel Itanium. În 2004, este planificată eliberarea unei versiuni extinse a acestui compilator - compilatorul Intel Visual Fortran Compiler Edition pentru Windows, care va include biblioteca de bibliotecă IMSL FORTRAN 5.0, dezvoltată de Visual Numercs, Inc.


    "Noi compilatoarele suportă, de asemenea, viitoarele procesoare Intel, cunoscute pentru numele codului Prescott, care oferă echipelor noi pentru a crește grafica și performanța video, precum și alte instrumente de productivitate. De asemenea, susțin tehnologie nouă Mobile MMX (TM), crescând în mod similar performanța aplicațiilor grafice, sonore și video pentru telefoanele mobile și PC-urile de buzunar, - notate de directorul Cola al Centrului de Dezvoltare Intel din Nizhny Novgorod, Lockers Alexey. - aceste compilatoare oferă dezvoltatorilor de aplicații un complex unificat de instrumente instrumentale pentru construirea de noi aplicații pentru rețele fără fir Pe baza arhitecturii Intel. Noi compilatoare Intel suportă, de asemenea, tehnologia Hyper-Fileting Intel și Seccov 2.0 specificație, care definește utilizarea directivelor la nivel înalt pentru gestionarea fluxurilor de instrucțiuni în aplicații.

    Printre noile instrumente incluse în compilatoare sunt acoperirea Codului Intel și prioritizarea de testare Intel. Împreună, aceste instrumente vă permit să accelerați dezvoltarea aplicațiilor și să vă îmbunătățiți calitatea prin îmbunătățirea procesului de testare a software-ului.

    Instrumentul de acoperire a codului În timpul aplicării, aplicația oferă informații complete despre utilizarea logicii aplicației și localizarea secțiunilor utilizate în codul sursă al aplicației. Dacă se fac modificări la aplicație sau dacă acest test nu vă permite să verificați o parte din aplicația care este interesată de dezvoltator, instrumentul de prioritizare de testare vă permite să verificați funcționarea zonei selectate a codului programului.

    Noile compilatoare Intel sunt produse în diferite seturi de la 399 până la 1499 $. Acestea pot fi achiziționate astăzi în Intel sau Reselleri din întreaga lume, a cărei listă este situată pe site. http://www.intel.com/software/products/reseseller.htm#rssia..

    Suportul procesorului de prestare

    Suportul procesorului Intel Pentium 4 (Prescott) în cea de-a opta versiune a compilatorului este după cum urmează:

    1. Comenzi SSE3 (sau PNI, PRECOTT NOU INSTRUCTION). Aici merită evidențiază trei moduri:

    dar. Inserții de asamblare (asamblare inline). De exemplu, compilatorul recunoaște următoarea utilizare a comenzii de la setul SSE3 _ASM (addSubPD XMM0, XMM1). Astfel, utilizatorii interesați de optimizarea la nivel scăzut pot obține acces direct la echipele de asamblare.

    b. În compilatorul C / C ++, sunt disponibile noi instrucțiuni la un nivel mai ridicat decât utilizarea inserțiilor de asamblare. Și anume, prin funcții încorporate (funcții intrinseci):

    Funcții încorporate

    Funcție încorporată Echipa generată
    _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_loadDAP_PD. MOVDDUP XMM, M64
    _mm_movedup_pd. MOVDDUP REG, REG
    _MM_LDDQU_SI128. LDDQUE.

    Tabelul prezintă caracteristicile încorporate și comenzile de asamblare corespunzătoare din setul SSE3. Același sprijin există pentru comenzi de la seturile MMX \\ SSE \\ SSE2. Acest lucru permite programatorului să efectueze optimizarea codului la nivel scăzut, fără a recurge la programarea asamblorilor: compilatorul în sine are grijă de afișaj (cartografiere "E) a funcțiilor încorporate la comenzile procesorului corespunzător și utilizarea optimă a registrelor. Programatorul se poate concentra pe crearea unui algoritm care utilizează în mod eficient seturi de comenzi noi.

    în. Generarea automată a compilatorilor noi comenzi. În ultimele două moduri sugerează utilizarea de noi comenzi de către programator. Dar compilatorul este capabil să utilizeze opțiunile corespunzătoare - vezi secțiunea 3 de mai jos) Generați automat comenzi noi din apele SSE3 pentru codul software din limbile C / C ++ și Fortran. De exemplu, o comandă de încărcare neinteligantă optimizată (LDDQU), utilizarea căreia vă permite să obțineți un câștig de performanță de până la 40% (de exemplu, în sarcini de codificare video și audio). Alte echipe din SSE3 SET fac posibilă obținerea unei accelerații semnificative în sarcinile grafice 3D sau sarcinile de decontare utilizând numere complexe. De exemplu, un grafic din secțiunea 3.1 de mai jos arată că pentru aplicarea 168.Wupus dintr-un set de accelerația PC CPU2000 FP obținută din generarea automată a comenzilor SSE3 a fost de ~ 25%. Performanța acestei aplicații depinde în mod semnificativ de viteza numerelor integrat aritmetice.

    2. Utilizarea avantajelor microarhcturale ale procesorului Prescott. La generarea codului, compilatorul ia în considerare modificările microcarhcturale în noul procesor. De exemplu, efectuarea unor operațiuni (cum ar fi schimbările întregi, multiplicarea numerelor între diferite formate de puncte plutitoare din SSE2) accelerate pe un nou procesor în raport cu versiunile anterioare (Să spunem, o schimbare întregă este acum ocupată de un procesor tact împotriva a patru pentru procesorul de versiune anterioară Intel Pentium 4). Utilizarea mai intensă a acestor comenzi face posibilă obținerea unei accelerații semnificative a aplicațiilor.
    Un alt exemplu de modificări microcarhcturale este mecanismul îmbunătățit de redirecționare a magazinului (date rapide de descărcare stocate mai devreme în memorie); Salvarea reală nu este chiar în memoria cache, dar într-un tampon de salvare intermediar, care vă permite să realizați accesul foarte rapid la date. Această caracteristică a arhitecturii face posibilă, de exemplu, să efectuați vectorizarea automată mai agresivă a codului programului.
    Compilatorul ia în considerare, de asemenea, valoarea crescută a cache-ului primului și al doilea nivel.

    3. Îmbunătățirea suportului tehnologiei hiper-filetare. Acest articol poate fi bine atribuit modificărilor anterioare - microcarhcturale și utilizării acestora în compilator. De exemplu, o bibliotecă de timp de execuție, care implementează suportul specificației industriei OpenMP, a fost optimizată pentru execuția unui nou procesor.

    Performanţă

    Utilizarea compilatoarelor este simplă și metoda eficientă. Profitați de arhitecturile Intel Processor. Două moduri de utilizare a compilatoarelor sunt evidențiate mai jos: a) Recompilarea programelor cu o posibilă schimbare a setărilor compilatorului, B) recompularea cu o modificare atât a setărilor compilatorului, cât și a textului sursă, precum și utilizarea diagnosticării compilatorului asupra optimizării și posibilă Utilizarea altor software (de exemplu, profilizatoare).


    1.1 Optimizarea programelor prin recompilarea și modificarea setărilor compilatorului


    Adesea, primul pas în tranziția la un nou compilator de optimizare este utilizarea sa cu setările implicite. Următorul pas logic este de a utiliza opțiuni pentru o optimizare mai agresivă. Figurile 1, 2, 3 și 4 prezintă efectul de tranziție la o versiune Intel Compiler 8.0 în comparație cu utilizarea altor produse care duc la industrie (-O2 - setări implicite, baze - setări pe productivitate maximă). Comparația se efectuează pe arhitecturi Intel 32 și 64 de biți. Aplicațiile din specificul CPU2000 sunt utilizate ca cadran de testare.


    Imaginea 1.




    Figura 2.




    Figura 3.




    Figura 4.


    Unele opțiuni sunt enumerate mai jos (denumite în continuare familia Windows OS; pentru familia Linux OS, există opțiuni cu aceeași acțiune, dar numele poate fi diferit; de exemplu, -OD sau QXK pentru Windows oferă o acțiune similară cu - O0 sau -XK pentru Linux În consecință, mai multe informații pot fi găsite în manualul de utilizare al compilatorului) susținut de compilatorul Intel.


    Controlul nivelurilor de optimizare: Opțiuni - Opțiuni (fără optimizare, aplicată la programe de depanare), -O1 (Viteză maximă la minimizarea dimensiunii codului), -O2 (Optimizare cu viteza executării codului, aplicată în mod implicit), -O3 (include optimizarea cea mai agresivă pentru viteza codului; în unele cazuri, aceasta poate duce la efectul opus, adică la o încetinire; trebuie remarcat faptul că în utilizarea IA-64 -O3 duce la accelerare în majoritatea cazurilor, în timp ce efectul pozitiv asupra iA- 32 este mai puțin pronunțată). Exemple de optimizări incluse în -O3: Permutarea ordinii ciclurilor imbricate (schimb de buclă), fuziune de cicluri (fuziune buclă), separarea ciclului (distribuție buclă; optimizare, fuziune cu buclă inversă), software-ul prefetch date. Motivul pentru care este posibilă o încetinire atunci când se utilizează -O3 poate fi faptul că compilatorul a folosit o abordare euristică a alegerii optimizării agresive pentru un caz specific, fără a avea suficiente informații despre program (de exemplu, au generat comenzile preelectorale pentru datele utilizate în ciclu, crezând că ciclul este executat un numar mare de Odată, în timp ce are doar câteva iterații). Interprocesarea optimizării pentru profilare, precum și o varietate de "solicitări" ale programatorului (vezi pct. 3.2) pot ajuta în această situație.

    Optimizarea interprocesistă: -QIP (într-un singur fișier) și -qipo (în cadrul câtorva sau toate fișierele de proiect). Include optimizarea, cum ar fi, de exemplu, o substituție inimă a codului utilizat frecvent (reducerea costurilor / procedurilor de apeluri). Prezintă informații în alte etape de optimizare - de exemplu, informații despre limita superioară a ciclului (hai să spunem, dacă este o constantă de timp de compilare definită într-un singur fișier și utilizat în multe) sau informații despre alinierea datelor în memorie (multe MMX \\ SSE comenzi \\ sse2 \\ sse3 funcționează mai repede dacă operanzii sunt aliniate în memorie la marginea în 8 sau 16 octeți). Analiza procedurilor de alocare a memoriei (implementată \\ numită într-unul din fișierele de proiect) este transmisă la acele funcții \\ procedurile în care această memorie este utilizată (acest lucru poate ajuta compilatorul să abandoneze ipoteza conservatoare că datele nu sunt aliniate în memorie în mod corespunzător; dar Presupunerea trebuie să fie conservatoare atunci când lipsa de informații suplimentare). Un alt exemplu este analiza intersecțiilor de memorie (dezambiguare, analiza aliasingului de date): în absența unor informații suplimentare și incapacitatea de a dovedi lipsa intersecțiilor, compilatorul provine din ipoteza conservatoare că există o intersecție. O astfel de decizie poate afecta negativ calitatea acestor optimizări, cum ar fi, de exemplu, vectorizarea automată asupra transmiterii IA-32 sau a transportorului de software (pipeling sau SWP) pe IA-64. Optimizarea Interprocessor poate ajuta la analiza prezenței intersecțiilor de memorie.

    Optimizarea profilului: Include trei etape. 1) Generarea codului instrumental utilizând opțiunea -QPROF_GEN. 2) Codul obținut este pornit pe date reprezentative, sunt colectate informații despre diferitele caracteristici ale executării codului (de exemplu, probabilitatea de tranziție sau valoarea tipică pentru numărul de iterații de ciclu). 3) Re-compilarea cu opțiunea -QPROF_USE, care asigură utilizarea compilatorului de informații colectate în etapa anterioară. Astfel, compilatorul are capacitatea de a utiliza nu numai estimări statice ale caracteristicilor importante ale programului, ci și datele obținute în timpul desfășurării reale a programului. Acest lucru poate contribui la alegerea ulterioară a anumitor optimizări (de exemplu, o locație mai eficientă în memoria diferitelor ramuri ale programului, pe baza informațiilor despre care s-au efectuat sucursale la ce frecvență; sau utilizarea optimizării la un ciclu pe baza informațiilor despre numărul tipic de iterații din acesta). Aplicarea optimizării este utilă în special în cazurile în care este posibil să alegeți un set de date mic, dar un reprezentant (pentru etapa nr. 2), care ilustrează cele mai tipice cazuri de utilizare ulterioară a programului. În unele domenii, alegerea unui astfel de set reprezentativ este foarte posibilă. De exemplu, optimizarea profilului este utilizată de dezvoltatorii DBMS.

    Optimizarea enumerată mai sus aparțin tipului general (generic), adică. Codul generat va funcționa la toate procesoarele diferite ale familiei (de exemplu, în cazul arhitecturii pe 32 de biți - la toate procesoarele de mai jos: Intel Pentium-III, Pentium 4, inclusiv kernelul Prescott, Intel Pentium M). Există, de asemenea, optimizate pentru un procesor specific.

    Optimizarea orientată spre procesor specific: -QxK (Pentium-III; utilizând comenzi SSE setate, caracteristici microarhitecturale), -QXW și -QXN (Pentium 4; utilizând comenzile SSE și SSE2, caracteristicile microarhitecturale), -QXB (Pentium M; utilizând comenzi SSE și SSE2, caracteristici microarhitecturale ), QXP (Prescott, folosind comenzile SSE, SSE2 și SSE3, caracteristicile microarchitecturelor). În acest caz, codul generat utilizând astfel de opțiuni nu poate funcționa pe alți reprezentanți ai liniei de procesor (de exemplu, codul -QW poate duce la o comandă inacceptabilă dacă se efectuează pe sistemul procesor Intel Pentium-III). Sau nu pentru a lucra cu o eficiență maximă (de exemplu, codul -QB pe procesorul Pentium 4 în virtutea diferențelor din microarchitectură). Cu astfel de opțiuni, este posibilă, de asemenea, utilizarea bibliotecilor de timp de execuție optimizate pentru un procesor specific utilizând sistemul său de comandă. Pentru a controla faptul că codul este valabil pe procesorul țintă, este implementat mecanismul de expediere (CPU-Dispatch): verificarea procesorului în timpul executării programului. În diferite situații, acest mecanism poate fi implicat sau nu. Expediția este utilizată întotdeauna dacă se aplică opțiunile Variation -QAX (KWNP). În acest caz, sunt generate două versiuni de cod: optimizate pentru un procesor specific și "General" (generic), selecția are loc în timpul executării programului. Astfel, datorită creșterii dimensiunii codului, programul poate fi efectuat pe toate procesoarele liniei și execuția optimă a procesorului țintă. O altă opțiune este utilizarea optimizării codului în cadrul reprezentantului anterior al liniei și utilizând acest cod pe acest proces și procesoare ulterioare. De exemplu, codul -QXN poate fi efectuat pe Pentium 4 cu miezul Northwood și Prescott. Dimensiunea crescută a codului nu apare. Cu această abordare, este posibil să se obțină un bun, dar încă nu este o performanță optimă asupra sistemului cu procesorul Prescott (deoarece SSE3 nu este utilizat și diferențele dintre microarhitectură nu sunt luate în considerare) cu performanțe optime pe Northwood. Pentru procesoarele de arhitectură IA-64 există și opțiuni similare. În prezent există două: -G1 (Itanium) și -G2 (Itanium 2; opțiunea implicită).

    Următorul grafic (Figura 5) prezintă accelerația (pentru începutul referinței primite o unitate - absența oricărei accelerații) de la utilizarea o parte din optimizarea de mai sus (anume -O3-Vipo -Qprof_use -QX (N, P)) Procesorul Prescott comparativ cu setările implicite (-O2). Utilizarea -QXP ajută în unele cazuri obține accelerația comparativ cu -QXN. Cea mai mare accelerare este realizată în apendicele 168.Wupwise, care a fost deja menționată în secțiunea anterioară (datorită optimizării intensive a aritmetice complexe utilizând comenzi SSE3).


    Figura 5.


    Figura 6 de mai jos prezintă raportul (valorile) vitezei codului cu setări optime Comparativ cu codul neautimizat (-od) pe procesoarele Pentium 4 și Itanium 2. Se poate observa că Itanium 2 este mult mai puternic dependent de calitatea optimizării. Acest lucru este deosebit de pronunțat pentru computerele plutitoare (FP), unde raportul este de aproximativ 36 de ori. Calculele punctelor plutitoare sunt rezistența arhitecturii IA-64, dar este necesară abordarea cu atenție a utilizării celor mai eficiente setări compilatoare. Câștigul de performanță rezultat plătește pentru costurile forței de muncă pentru căutarea lor.


    Figura 6. Accelerarea când aplicați cele mai bune opțiuni de optimizare SPEC CPU200


    Compilatorii Intel suportă specificația sectorială OpenMP pentru a crea aplicații multi-filetate. O clare (opțiunea -QOPENMP) și automată (-QPLALEL) este acceptată de modul de paralelizare. În cazul unui mod explicit, programatorul este responsabil pentru utilizarea corectă și eficientă a standardului OpenMP. În cazul paralelizării automate, compilatorul pune o sarcină suplimentară asociată analiza codului programului. Din acest motiv, paralelizarea automată funcționează efectiv pe suficiente coduri simple.

    Graficul din Figura 7 prezintă accelerația din utilizarea paralelizării explicite asupra sistemului de eșantionare de inginerie (pre-producție) pe baza procesorului Intel Pentium 4 (Prescott) cu suport pentru tehnologia de hiper-filetare: 2.8GHz, 2GB RAM, 8K L1- Cache, 512k L2-cache. SPEC OMPM2001 este utilizat ca test de testare. Acest set este axat pe sisteme SMP mici și medii, consumul de memorie este de până la două gigaocteți. Aplicațiile sunt compilate utilizând Intel 8,0 C / C ++ și Fortran cu două seturi de opțiuni: -QXENMP-VIPO -O3 -QXN și -QOPENMP-VIPO -O3 -QXP, fiecare dintre care aplicațiile au început cu hiper- Tehnologie de filetare. Valorile accelerației pe grafic sunt normalizate la performanța versiunii cu un singur filetat atunci când tehnologia hiper-filetare este oprită.


    Figura 7: Aplicații din Spec OMPM2001 SET pe procesorul Prescott


    Se poate observa că în 9 din 11 cazuri, utilizarea paralelizării explicite folosind OpenMP oferă câștig de performanță atunci când tehnologia hiper-filetare este pornită. Într-una din aplicații (312.WIM) există o încetinire. Acesta este un fapt renumit: aceasta aplicație caracterizată printr-un grad ridicat de dependență lățime de bandă Memorie. De asemenea, ca în cazul specului CPU2000, aplicația Wupwise câștigă semnificativ de la utilizarea optimizării Prescott (-QXP).


    1.2 Optimizarea programelor cu modificări ale textului sursă și utilizând diagnosticarea compilatorului


    În secțiunile anterioare, am considerat efectul compilatorului (și setările acestuia) pe viteza codului programului. În același timp, Intel Compilor prezintă mai multe oportunități de optimizare a codului decât modificările pur și simplu ale setărilor. În special, compilatoarele permit programatorului să facă "sugestii" în codul programului, care permit generarea unui cod mai eficient în ceea ce privește performanța. Mai jos sunt câteva exemple pentru limba C / C ++ (pentru limba FORTRAN există mijloace similare care diferă numai prin sintaxă).

    #Pragma Ivvp (unde înseamnă Ivvp ignoră dependențele vectoriale) se aplică ciclurilor software pentru a informa compilatorul pe care în interiorul nu există dependențe de date. Acest vârf funcționează în cazul în care compilatorul (bazat pe analiză) sugerează în mod conservator că pot fi astfel de dependențe (dacă compilatorul poate dovedi ca rezultat al analizei, că dependența există, atunci "vârful" nu are nicio acțiune) , în timp ce autorul codului știe că astfel de dependențe nu pot apărea. Folosind acest sfat, compilatorul poate genera un cod mai eficient: vectorizarea automată pentru IA-32 (folosind comenzi vectoriale din seturile MMX \\ SSE \\ SSE2 \\ SSE3 pentru ciclurile software pe C / C ++ și Fortran; se va familiariza cu acest lucru tehnica în detaliu cu această tehnică, de exemplu, în următoarele articol din Jurnalul Tehnologic Intel), transportare software (SWP) pentru IA-64.

    # Vectorul #pragma întotdeauna este folosit pentru a face compilatorul să schimbe soluția asupra ineficienței vectorizării ciclului (atât automată pentru IA-32 cât și pentru IA-64), pe baza analizei caracteristicilor cantitative și calitative ale lucrărilor la fiecare iterație .

    # Pragma Evector are o acțiune inversă #pragma vector întotdeauna.

    #Pragma vector aliniat este utilizat pentru a informa compilatorul că datele utilizate în ciclu sunt egale la marginea la 16 octeți. Acest lucru vă permite să generați mai eficient și / sau compact (din cauza lipsei de verificări în timpul execuției).

    #Pragma vector nealiniat are o acțiune inversă #pragma aliniată. Este dificil să vorbim despre câștigarea în performanță în acest caz, dar puteți conta pe un cod mai compact.

    Punctul de distribuție #pragma este utilizat în interiorul ciclului de program, astfel încât compilatorul să poată rupe ciclul (distribuția buclă) în acest moment într-unul puțin mai mic. De exemplu, un astfel de "vârf" poate fi utilizat atunci când compilatorul nu reușește să facă vectorizarea automată a ciclului sursă (de exemplu, datorită dependenței de date, care nu poate fi ignorată chiar dacă există un #pragma IVDEP), în timp ce fiecare (sau o parte) din ciclurile nou formate pot fi vectorizate efectiv.

    # Pragma Count Coop (N) este folosit pentru a informa compilatorul că valoarea cea mai probabilă a numărului de iterații de ciclu va fi N. Aceste informații ajută la luarea unei decizii privind optimizarea cea mai eficientă pentru acest ciclu (de exemplu, pentru a face O scanare, trebuie să faceți SWP sau Vectorizarea automată, trebuie să utilizați comenzile preelectorale programului de date, ...)

    "Sfat" _ASUME_ALIED (P, BASE) este utilizat pentru a informa compilatorul că zona de memorie asociată cu pointerul P este egalizată la marginea Bazei \u003d 2 ^ n Byte.

    Este departe de lista plina Diferite compilator "sfaturi", care poate afecta în mod semnificativ eficacitatea codului generat. Poate apărea o întrebare cum să determinați că compilatorul necesită o sugestie.

    În primul rând, puteți utiliza diagnosticarea compilatorului sub formă de rapoarte pe care le oferă programatorului. De exemplu, atunci când utilizați opțiunea -QVEC_REPORTN (unde n variază de la 0 la 3 și înseamnă nivelul detaliilor) puteți obține un raport privind vectorizarea automată. Programatorul va fi informația disponibilă despre care ciclurile au fost vectorizate și care nu sunt. În cazul negativ, compilatorul indică motivele pentru care vectorizarea a eșuat. Să presupunem că motivul a fost dependența estimată conservatoare de date. În acest caz, dacă programatierul este încrezător că nu se poate produce dependențe, atunci este posibilă utilizarea #pragma Ivvvp. Similar (comparativ cu QVEC_REPORTN pentru IA-32) Posibile compilator prezintă pe IA-64 pentru a controla disponibilitatea și eficiența SWP. În general, Intel Compilers prezintă oportunități ample pentru diagnosticarea optimizării.

    În al doilea rând, alte produse software (cum ar fi profilul Intel Vtune) pot fi utilizate pentru a căuta "blocaje" în cod în ceea ce privește performanța. Rezultatele analizei pot ajuta programatierul să facă schimbările necesare.

    De asemenea, puteți utiliza codul de înregistrare de asamblare generată de compilator.


    Figura 8.


    În Figura 8 prezintă un proces de optimizare a aplicației pas cu pas folosind compilatorul (și alte produse software) Intel în limba FORTRAN pentru arhitectura IA-64. De exemplu, schema de prognoză regională non -adiabatică timp de 48 de ore de la Centrul de Roshydromet (puteți citi despre el, de exemplu, în acest articol. Articolul se referă la momentul calculării a aproximativ 25 de minute, dar au schimbările semnificative a avut loc de la scrierea sa. Ca punct de referință, performanța codului pe sistemul CRAY-YMP. Codul neschimbat cu opțiunile compilatorului implicit (-O2) a arătat o creștere a performanței la 20% pe un sistem de patru procesoare bazat pe Intel Itanium 2 900 MHz procesor. Utilizarea optimizării mai agresive (-O3) a condus la accelerarea la ~ 2,5 ori fără a schimba codul în principal datorită pre-alegerii SWP și a datelor. Analiza utilizând diagnosticarea compilatorului și profilul Intel Vtune a dezvăluit unele "blocaje "De exemplu, compilatorul nu a făcut transmiterea programelor mai multor cicluri importante, raportarea în raport, ceea ce implică dependența conform datelor. Coduri mici (Directiva IVDEP) au ajutat la realizarea Efenei Transportarea Kivny. Cu ajutorul profilului VTUNE, a fost posibilă detectarea acestuia (iar raportul compilatorului a confirmat acest lucru) că compilatorul nu a modificat ordinea ciclurilor imbricate (interchange de buclă) pentru o utilizare mai eficientă a memoriei cache. Motivul a fost din nou ipoteze conservatoare despre dependența de date. Schimbările au fost făcute în textul sursă al programului. Ca rezultat, a fost posibilă realizarea unei accelerații de 4 ori în raport cu versiunea inițială. Folosind paralelizarea explicită utilizând directivele standard OpenMP, iar trecerea la sistem cu procesoare de frecvență mai mari a făcut posibilă reducerea timpului de cont la indicatorul mai mic de 8 minute, ceea ce a dat mai mult de 16 ori accelerația comparativ cu versiunea inițială.

    Intel vizual FORTRAN.

    Intel Visual Fortran 8.0 utilizează front-end (parte a compilatorului care este responsabilă pentru transformarea unui program din textul în limba de programare la reprezentarea internă a compilatorului, care în multe privințe nu depinde de limba de programare și nici de la Mașină țintă) Tehnologia compilatorului CVF și componentele compilatorului Intel, responsabil pentru setul de optimizare și generarea de coduri.


    Figura 9.




    Figura 10.


    În Figurile 9 și 10, Grafica de comparare a performanței Intel Visual Fortran 8.0 sunt date cu versiunea anterioară a Intel Fortran 7.1 și cu alte industrii din compilatoarele din industrie din această limbă care rulează ferestre și familii Linux. Pentru comparație, au fost utilizate teste, textele sursă ale căror standarde F77 și F90 sunt disponibile pe site-ul http://www.polyhedron.com/. Informații mai detaliate despre compararea performanței compilatorului sunt disponibile pe același site (Comparați compilatorul Win32 -\u003e FORTRAN (77, 90) Timp de execuție Benchmarks și Comparații de compilare Linux -\u003e FORTRAN (77, 90) Termenul de execuție): Sunt afișate mai multe compilatoare diferite , iar media geometrică este dată în combinație cu rezultatele individuale ale fiecărui test.

    Nu ești sclav!
    Un curs educațional închis pentru copii Elite: "Aranjamentul adevărat al lumii".
    http://noslave.org.

    Wikipedia - Enciclopedie gratuită

    Intel C ++ Compilator
    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).
    Un fel
    Autor

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Dezvoltator
    Dezvoltatori

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Scrisă:

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Interfață

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Sistem de operare
    Limbi de interfață

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Prima editie

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Platformă hardware.
    Ultima versiune
    Candidat la versiuni

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Versiune beta

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Versiunea Alpha.

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Versiunea de testare

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Formate de fișiere lizibile

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Crearea formatelor de fișiere

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    condiție

    Eroare LUA în modul: Wikidata pe șirul 170: Încercați să indexați câmpul "Wikibase" (o valoare Nil).

    Licență

    Caracteristici principale:

    • Vectorizare pentru SSE, SSE2, SSE3, SSE4

    Compilatorul acceptă standardul OpenMP 3.0 pentru scrierea programelor paralele. De asemenea, conține o modificare deschisă numită Cluster OpenMP, cu care puteți rula aplicații scrise în conformitate cu Clusters folosind MPI.

    Compilatorul Intel C ++ utilizează frontal și o parte a compilatorului angajat în analiza sintactică a programului compilat) de la Grupul de design Edison. Același frontal și se utilizează de către SGI MIPSPRO Compilatoare, Comau C ++, Grupul Portland.

    Acest compilator este utilizat pe scară largă pentru a compila criteriile de referință ale CPU.

    Există 4 serii de produse de la Intel care conține compilatorul:

    • Intel C ++ Compiler Edition Professional
    • Intel Cluster Toolkit (Compilator Edition)

    Dezavantajele versiunii Linux a compilatorului includ incompatibilitatea parțială cu GNU-extensii ale limbii Si (susținute de compilatorul GCC), ceea ce poate provoca probleme la compilarea unor programe.

    Opțiuni experimentale

    Au fost publicate următoarele opțiuni de compilator experimental:

    • Ediția Prototype Intel STM compilator la 17 septembrie 2007. Suport memoria tranzacțiilor software (STM). Eliberat pentru Linux și Windows, numai pentru IA-32 (procesoare X86);
    • Colecții Intel Concurente pentru C / C ++ 0.3 din septembrie 2008. Conține mecanisme care facilitează scrierea programelor C ++ paralele.

    Steaguri de bază

    Windows. Linux, MacOSX. Descriere
    / Od. -O0. Dezactivați optimizarea
    / O1. -O1 Optimizați pentru a minimiza dimensiunea fișierului executabil
    / O2. -O2. Optimizați-vă pentru a crește viteza. O anumită optimizare sunt incluse
    / O3. -O3. Activați toate optimizarea de la O2. Efectuați, de asemenea, optimizarea ciclurilor intensive
    / Oip. -. Includeți optimizarea intermediară intermediară
    / OIPO. -OiPo. Activați optimizarea globală intercelace
    / Qxo. -XO. Permiteți utilizarea extensiilor SSE3, SSE2 și SSE pentru procesoarele de producție a oricărei companii
    / Rapid. -Rapid. « Mod rapid." Echivalent cu opțiunile "/ O3 / Qipo / Qxhost / No-Prec-DIF" pe Windows și "-O3 -Po-Static -xHost -Nen-Prec-DIV" pe Linux. Notă, pavilionul "-xost" înseamnă optimizarea procesorului pe care se execută compilatorul.
    / Qprof-gen -Prof_gen. Creați o versiune instrumentală a programului care va colecta profilul de execuție
    / Qprof-utilizare -Prof_use Utilizați informații despre profil de la începutul programului colectat cu steagul Prof_GEN.

    Scrieți o recenzie despre articolul "Intel C ++ Compiler"

    Notează

    Vezi si

    Link-uri

    Un extras care caracterizează compilatorul Intel C ++

    Și sa întors la ultima data Vedeți lupul alb ... soțul / soția și un prieten credincios care nu ar putea uita niciodată. În inima ei ia iertat. Dar, la marele său regret, nu l-au putut aduce iertarea lui Magdalena .... Deci, după cum vedeți, Isidor, marele fabule creștine despre "totul spunând" este doar o minciună a copiilor pentru credincioșii naivi să le permită să creeze orice rău, știind că ceea ce ar face ei, în cele din urmă să fie iertat. Dar puteți ierta numai ce iertare cu adevărat decentă. O persoană trebuie să înțeleagă că pentru orice răul însoțit trebuie să răspundă ... și nu în fața unui dumnezeu misterios, ci în fața lui, forțându-se să sufere sever. Magdalena nu a iertat Vladyko, deși a respectat profund și îl iubește cu sinceritate. Așa cum nu ne-a iertat și pe toți pentru moartea teribilă a lui Radomir. La urma urmei, ea a fost cea mai bună înțeleasă totul - am putea să-l ajutăm, să-l salveze de la moarte crudă ... dar nu au vrut. Având în vedere vinovăția de la Wilts albă prea crudă, ea la lăsat să trăiască cu această vină, nu pentru un minut care nu-l uită ... nu a vrut să-i dea o ușoară iertare. N-am mai văzut-o niciodată. Cum nu și-a văzut niciodată copiii. Printr-unul din cavalerii templului său - Maggdalena noastră a înmânat răspunsul la Vladyka la cererea sa de a ne întoarce la noi: "Soarele se ridică într-o singură zi de două ori ... bucuria lumii voastre (Radomir) nu se va întoarce niciodată la tine, ca Nu mă întorc la tine și eu ... Mi-am găsit credința și adevărul meu, sunt în viață, al tău - morți ... fă-ți fiii - te-au iubit. Nu vă voi ierta niciodată de moartea lor în viață. Și să rămână vinurile tale să rămână cu tine. Poate că într-o zi vă va aduce lumină și iertarea ... dar nu de la mine. Șeful lui Matera din Ioan nu a fost adus la Matera din același motiv - niciunul dintre cavalerii templului nu a vrut să se întoarcă la noi ... Le-am pierdut, câți alții au fost pierduți, care nu au vrut să înțeleagă și să ia victimele noastre ... cine la fel ca tine - la stânga, condamnându-ne.
    Am avut un cap! .. Ca o sete, văzându-vă cunoștințele celebre celebre, am absorbit cu lăcomie fluxul de informații uimitoare, cu generozitate întunecată de nord ... și am vrut mult mai mult! .. Am vrut să știu totul la Sfârșit. A fost o gustare de apa proaspata in durerea ars si dispensa probleme! Și nu am putut să mă îmbăt în nici un fel ...
    - Am mii de întrebări! Dar nu a mai rămas timp ... ce ar trebui să fac, la nord? ..
    - Întreabă, Idor! .. Întreabă, voi încerca să vă răspund ...
    - Spune-mi, nordul, de ce mi se pare că în această poveste, cum ar fi îmbinate două povestiri ale vieții, evenimente similare împletite și sunt prezentate, cum sunt viața unei singure persoane? Sau mă înșel?
    - Sunteți absolut drept, Isidor. Așa cum v-am spus mai devreme, "lumea puternică a acestui lucru", care a creat o istorie falsă a omenirii ", a pus" la adevărata viață a lui Hristos adevărata viață a profetului evreiesc Iosua (Iosua), care a trăit unul și acum jumătate de ani (de la povestea nordului). Și nu numai propria sa, ci și familia sa, rudele și cei dragi, prietenii și adepții săi. La urma urmei, la soția profetului Iosua, evreii Maria, a fost o soră a lunii martie și a fratelui Lazăr, sora mamei sale Maria Iacov și alții care nu au fost niciodată lângă Radomir și Magdalina. Așa cum nu era aproape de ei și "apostoli" alți oameni - Paul, Matthew, Peter, Luke și restul ...
    Familia profetului Iosua, care a mutat acum o jumătate de mii de ani în Provence (care a fost numit Gaul (Grupul Transalpine), în orașul grec Masia (actuala Marseille), din moment ce masia la acea vreme a fost "Porțile" între Europa " și Asia, și a fost cel mai simplu mod pentru toate "persecutate" pentru a evita persecuția și problemele.