Intel-kääntäjät. Miksi uusia kääntäjiä tarvittiin?

Intel C++- ja Fortran-kääntäjät ja MKL-kirjasto

Linuxille tarkoitettujen standardien GNU-kääntäjien lisäksi NIVC-laskentakompleksin klustereihin on asennettu Intel C++- ja Fortran-kääntäjät. Tällä hetkellä (vuoden 2006 alusta) kääntäjien versio 9.1 on asennettu kaikkiin klustereihin. Tämä sivu on omistettu kuvaamaan näiden kääntäjien tärkeimmät valinnat ja asetukset sekä niiden tärkeimmät erot GNU-kääntäjiin verrattuna. Sivu on suunnattu pääasiassa MSU Research Computing Center -klusterien käyttäjille, mutta voi olla hyödyllinen myös muille venäjänkielisille käyttäjille. Tässä ei käsitellä IA-64-alustan kokoamiseen liittyviä kysymyksiä.

Lisäksi Intel-kirjasto on asennettu kaikkiin klustereihin Ytimen matemaattinen kirjasto(MKL) versio 8.0.2. Kirjasto sijaitsee /usr/mkl-hakemistossa. Huomaa, että alihakemistot 32, 64 ja em64t ovat saatavilla lib-hakemistossa. Ant-klusterissa on käytettävä kirjastoja em64t-alihakemistosta ja muissa klustereissa - alihakemistosta 32. Kaikki tarvittava dokumentaatio ja esimerkit löytyvät hakemistosta /usr/mkl/doc.

Miksi uusia kääntäjiä tarvittiin?

Uusien kääntäjien tarve syntyi lähinnä a) ohjelmoinnin tukemiseksi Fortran 90:ssä ja myös b) Fortran-ohjelmien tehokkaampaan optimointiin kuin mitä tarjoaa g77-kääntäjä, joka käyttää käännöstä C:ksi ja sitten kääntämistä gcc:n avulla.

Myös PGI (Portland Group) -kääntäjät täyttävät nämä vaatimukset, mutta kehittäjäyritys kieltäytyi toimittamasta niitä Venäjälle.

Kuinka käyttää?

Intel-kääntäjät kutsutaan komentojen avulla icc(C tai C++), icpc(C++) ja ifort(Fortran 77/90). MPI-ohjelmien kääntämiseen ja kokoamiseen tarkoitetut mpicc-, mpiCC- ja mpif77-komennot on myös määritetty käyttämään Intelin kääntäjiä.

On myös mahdollista käyttää GNU-kääntäjiä käyttämällä mpigcc-, mpig++- ja mpig77-komentoja (Fortran 90:tä ei tueta).

Syötä tiedostot

Oletuksena tiedostot, joilla on tunniste .cpp Ja .cxx katsotaan lähdeteksteiksi C++-kielellä, tiedostot, joiden tunniste on .c- C-lähdekoodi, ja icpc-kääntäjä kääntää myös .c-tiedostot C++-lähdekoodiksi.

Tiedostot laajennuksilla .f, .ftn Ja .for tunnistetaan lähdeteksteiksi Fotran-kielellä, kiinteällä merkintämuodolla, ja tiedostot .fpp Ja .F lisäksi läpäissyt Fortran-kielen esiprosessorin. Tiedostot, joissa on laajennus .f90 katsotaan Fortran 90/95 lähdeteksteiksi vapaamuotoisilla merkinnöillä. Voit nimenomaisesti määrittää kiinteän tai vapaan merkintämuodon Fortran-ohjelmille vaihtoehtojen avulla -FI Ja -FR vastaavasti.

Tiedostot, joissa on laajennus .s tunnustettu konekielikoodiksi IA-32:lle.

Intel-kääntäjän ominaisuudet

Tässä esittelemme Intel-kääntäjien ominaisuudet, jotka kehittäjä on ilmoittanut käyttöohjeessa ja joihinkin kommentteihimme.

  • Merkittävä optimointi
    Ilmeisesti tämä tarkoittaa koodin optimointia korkealle tasolle, ts. ensinnäkin erilaisia ​​silmukkamuunnoksia, joita lähes kaikki kääntäjät tekevät suuremmalla tai vähemmän menestyksellä
  • Liukulukuoptimointi
    Ilmeisesti tämä tarkoittaa ennen kaikkea laitteistotasolla toteutettujen komentojen maksimaalista käyttöä
  • Proseduurienväliset optimoinnit
    nuo. koko ohjelman globaali optimointi, toisin kuin tavallinen optimointi, joka vaikuttaa vain tiettyjen toimintojen koodiin
  • Profiilipohjainen optimointi
    nuo. kyky suorittaa ohjelmaa testitilassa, kerätä tietoja ajasta, joka kuluu tiettyjen koodinpätkien välittämiseen usein käytettyjen funktioiden sisällä, ja käyttää näitä tietoja sitten optimointiin
  • Tuki SSE-käskysarjalle Pentium III -suorittimissa
    huomautus: laskentatehtävissä SSE2-komennot ovat kiinnostavampia, ts. vektorikomennot yli 64-bittisten reaalilukujen, mutta niitä tuetaan vain Pentium 4 -prosessoreissa, joita meillä ei vielä ole käytössämme
  • Automaattinen vektorointi
    nuo. jälleen käyttämällä SSE- ja SSE2-komentoja, jotka kääntäjä lisää automaattisesti
  • OpenMP-tuki ohjelmointiin SMP-järjestelmissä
    huomautus: klusterissa on suositeltavaa käyttää ensisijaisesti MPI-liitäntää; OpenMP:n laajaa käyttöä klusterissa ei odoteta, eikä tällaisia ​​kokeita ole vielä tehty; mutta luultavasti on järkevää käyttää kirjastoja (BLAS jne.), jotka on rinnakkaista jaettua muistia varten.
  • Datan esihaku
    nuo. Ilmeisesti esilatauskomentojen käyttö muistista tietovälimuistiin, joita tarvitaan jonkin ajan kuluttua
  • "Lähetys" koodi eri prosessoreille
    nuo. kyky luoda koodia eri prosessoreille yhdessä suoritettavassa tiedostossa, jonka avulla voit hyödyntää uusimmat prosessorit saavuttaakseen niissä parhaan suorituskyvyn säilyttäen samalla ohjelmien binaariyhteensopivuuden aikaisempien prosessorien kanssa; Meidän klusterissamme tällä ei ole vielä merkitystä, koska käytetään vain Pentium III -prosessoreita, eikä klusteriin koottuja ohjelmia ole tarkoitus siirtää ja suorittaa muilla koneilla

Kääntäjän perusasetukset

Mielenkiintoisimpia ovat tietysti koodin optimointivaihtoehdot. Useimmat vaihtoehdot ovat yhteisiä C++- ja Fortran-kääntäjille. Lisää Yksityiskohtainen kuvaus vaihtoehdot englanninkielisissä käyttöoppaissa.

Optimointitasot
VaihtoehtoKuvaus
-O0Poistaa optimoinnin käytöstä
-O1 tai -O2Perusoptimointi nopeudelle. Kirjastotoimintojen rivin lisäys on poistettu käytöstä. C++-kääntäjälle nämä valinnat tarjoavat saman optimoinnin; Fortran-kääntäjälle vaihtoehto -O2 on parempi, koska sisältää myös pyöräilyn edistämisen.
-O3Tehokkaammat optimoinnit, mukaan lukien silmukkamuunnokset, tietojen esihaku ja OpenMP:n käyttö. Jotkut ohjelmat eivät välttämättä takaa parempaa suorituskykyä verrattuna -O2. On järkevää käyttää yhdessä vektorointivaihtoehtojen kanssa -xK Ja -xW.
-purkaa [n]Mahdollistaa silmukan purkamisen jopa n kertaa.
Optimoinnit tietylle prosessorille
VaihtoehtoKuvaus
-tpp6Optimointi Penitum Pro-, Pentium II- ja Pentium III -prosessoreille
-tpp7Optimointi Penitum 4 -prosessoreille (tämä vaihtoehto on oletuksena käytössä IA-32-kääntäjässä)
-xMKoodin luominen käyttämällä Pentium MMX-, Pentium II- ja myöhemmille prosessoreille ominaisia ​​MMX-laajennuksia
-xKKoodin luominen käyttämällä Pentium III -prosessoreille ominaisia ​​SSE-laajennuksia
-xWKoodin luominen käyttämällä Pentium 4 -prosessoreille ominaisia ​​SSE2-laajennuksia
Proseduurien välinen optimointi
-ipProseduurien välinen optimointi on käytössä yhdessä tiedostossa. Jos määrität vaihtoehdon -ip_no_inlineing, funktioiden lisäykset poistetaan käytöstä.
-ipoMahdollistaa prosessien välisen optimoinnin eri tiedostojen välillä
Optimoinnit profiilien avulla
-prof_genLuodaan "profilointi"-koodi, jota käytetään profilointiin, ts. keräämällä tietoja ohjelman tiettyjen paikkojen ohitustiheydestä
-runsasOptimointi tehdään profilointivaiheessa saatujen tietojen perusteella. On järkevää käyttää sitä yhdessä prosessienvälisen optimointivaihtoehdon kanssa -ipo.
Rinnakkaisu SMP-järjestelmille
-openmpOttaa käyttöön OpenMP 2.0 -standardin tuen
- rinnakkainAutomaattinen silmukan rinnastus on käytössä

Esitys

Ixbt.com-palvelimella julkaistujen SPEC CPU2000 -testien tulosten mukaan Intelin kääntäjien versio 6.0 olivat lähes yleisesti parempia verrattuna gcc-kääntäjien versioihin 2.95.3, 2.96 ja 3.1 sekä PGI-versioon 4.0.2. Nämä testit suoritettiin vuonna 2002 tietokoneella, jossa oli Pentium 4/1,7 GHz -prosessori ja RedHat Linux 7.3.

Polyhedronin suorittamien testien mukaan Intel Fortran -kääntäjän versio 7.0 oli lähes yleisesti parempi kuin muut Fortran 77 -kääntäjät Linuxille (Absoft, GNU, Lahey, NAG, NAS, PGI). Vain joissakin testeissä Intel-kääntäjä on hieman huonompi kuin Absoft-, NAG- ja Lahey-kääntäjät. Nämä testit suoritettiin tietokoneella, jossa oli Pentium 4/1,8 GHz -prosessori ja Mandrake Linux 8.1.

Intel-kääntäjät versio 9.1 ovat myös parempia kuin gcc-kääntäjät, ja niiden suorituskyky on verrattavissa Absoftiin, PathScaleen ja PGI:hen.

Olemme kiitollisia käyttäjille ja lukijoille, jotka lähettävät meille tietoja kääntäjän valinnan (GCC tai Intel) ja optimointivaihtoehtojen vaikutuksesta työn nopeuteen heidän tosielämän ongelmissaan.

Kirjastot

C-kielen kääntäjä käyttää ajonaikaista kirjastoa, joka on kehitetty GNU-projektissa ( libc.a).

Intel C++ -kääntäjän mukana toimitetaan seuraavat kirjastot:

  • libcprts.a- Dinkumwaren kehittämä ajonaikainen C++-kielikirjasto.
  • libcxa.a- ylimääräinen ajonaikainen kirjasto Intelin C++-kehitykseen.
  • libimf.a- Intelin kehittämä matemaattisten funktioiden kirjasto, joka sisältää optimoidut ja erittäin tarkat trigonometristen, hyperbolisten, eksponentiaalisten, erityisten, monimutkaisten ja muiden funktioiden toteutukset (katso lisätietoja funktioluettelosta).
  • libirc.a- Ajonaikainen tuki profiloinnille (PGO) ja koodin lähettämiselle prosessorista riippuen (katso yllä).
  • libguide.a- OpenMP-toteutus.

Tämä lista sisältää staattisia kirjastoja, mutta useimmille niistä on myös dynaamisia, ts. käynnistyksen aikana kytketyt vaihtoehdot ( .niin).

Seuraavat kirjastot toimitetaan Fortran-kääntäjän mukana: libCEPCF90.a, libIEPCF90.a, libintrins.a, libF90.a, käytetään myös matemaattisten funktioiden kirjastoa libimf.a.

Suoritettavan tiedoston rakentaminen

Kirjastot voidaan yhdistää staattisesti (koonnin aikana) tai dynaamisesti (ohjelman käynnistyksen aikana). Dynaamisen lähestymistavan avulla voit pienentää suoritettavan tiedoston kokoa ja jakaa saman kopion kirjastosta muistissa, mutta tätä varten sinun on asennettava täydellinen sarja dynaamisia kirjastoja, joita käytetään jokaiseen solmuun, jossa ohjelmat käynnistetään. .

Jos siis asensit Intel-kääntäjän Linux-koneellesi ja haluat suorittaa käännetyt suoritettavat tiedostot muissa koneissa, sinun on joko käytettävä staattista koontiversiota (mikä on helpompaa) tai kopioida Intelin dynaamiset kirjastot näihin koneisiin (yleensä hakemistoon, kuten /opt/intel /compiler70/ia32/lib) johonkin /etc/ld.so.conf-tiedostossa luetelluista hakemistoista, ja varmista myös, että näihin koneisiin on asennettu sama joukko GNU/Linuxin dynaamisia kirjastoja. .

Oletuksena kaikki Intelin kehityskirjastot (paitsi libcxa.so) linkitetään staattisesti ja kaikki Linux-järjestelmäkirjastot ja GNU-kirjastot linkitetään dynaamisesti. Vaihtoehtoa käyttämällä -staattinen voit pakottaa kerääjän (linkkieditorin) yhdistämään kaikki kirjastot staattisesti (mikä lisää äänenvoimakkuutta). suoritettava tiedosto) ja käyttämällä vaihtoehtoa -i_dynaaminen Voit linkittää dynaamisesti kaikki Intelin kehityskirjastot.

Kun yhdistät lisäkirjastoja käyttämällä näkymävaihtoehtoa -kirjasto saatat joutua käyttämään vaihtoehtoa -Lhakemisto määrittääksesi polun, jossa kirjastot sijaitsevat.

Vaihtoehtojen käyttäminen -Bstaattinen Ja -Bdynaaminen voit erikseen määrittää dynaamisen tai staattisen yhteyden jokaiselle kohdassa määritetylle kirjastolle komentorivi.

Vaihtoehtoa käyttämällä -c suoritettavan tiedoston kokoonpano on poistettu käytöstä ja vain käännös suoritetaan (objektimoduulin luominen).

Moduulien jakaminen Fortranissa ja C:ssä

Jotta voit jakaa Fortranilla ja C:llä kirjoitettuja moduuleja, sinun on sovittava proseduurien nimeämisestä objektimoduuleissa, parametrien välittämisestä ja pääsystä mahdollisiin globaaleihin muuttujiin.

Oletusarvoisesti Intel Fortran -kääntäjä muuntaa toimintojen nimet pieniksi kirjaimille ja lisää alaviivan nimen loppuun. C-kääntäjä ei koskaan muuta funktioiden nimiä. Jos siis haluamme kutsua C-kielellä toteutettua funktiota tai proseduuria FNNAME Fortran-moduulista, niin C-moduulissa sen pitäisi olla nimeltään fnname_.

Fortran-kääntäjä tukee vaihtoehtoa -nus [tiedostonimi], jonka avulla voit poistaa käytöstä alaviivojen lisäämisen sisäisiin toimintojen nimiin. Jos tiedostonimi on määritetty, tämä tehdään vain määritetyssä tiedostossa lueteltujen toimintojen nimille.

Oletusarvoisesti Fortranissa parametrit välitetään viitteellä ja C:ssä ne aina arvon mukaan. Siksi, kun kutsumme Fortran-proseduuria C-moduulista, meidän on välitettävä osoittimet vastaaviin muuttujiin, jotka sisältävät todellisten parametrien arvot parametreina. Kun kirjoitetaan C:ssä funktiota, joka on kutsuttava Fortran-moduulista, meidän on kuvattava muodolliset parametrit osoittimina vastaaviin tyyppeihin.

C-moduuleissa on mahdollista käyttää Fortran-moduulien sisällä määriteltyjä COMMON-lohkoja (katso lisätietoja kohdasta Intel Fortran Compiler User's Guide, luku C:n ja Fortranin sekoittaminen).

Intelin ja GCC:n kääntäjien jakaminen

Intel C++ -kääntäjän tuottamat C-objektimoduulit ovat yhteensopivia GCC-kääntäjän ja GNU C -kirjaston tuottamien moduulien kanssa. Näin ollen näitä moduuleja voidaan käyttää yhdessä yhdessä ohjelmassa, joka on käännetty icc- tai gcc-komennoilla, mutta on suositeltavaa käyttää icc:tä Intel-kirjastojen sisällyttämiseen oikein.

Intel-kääntäjä tukee useita epästandardeja C-kielen laajennuksia, joita GNU-projekti käyttää ja joita GCC-kääntäjä tukee (mutta ei kaikkia, katso lisätietoja täältä).

Käyttöohje ei kerro mitään objektimoduulien yhteensopivuudesta C++- ja Fortran-kielillä; ilmeisesti sitä ei tueta.

Standardien tuki

Intel C++ Compiler 7.0 Linuxille tukee ANSI/ISO C -kielistandardia (ISO/IEC 9899/1990). On mahdollista varmistaa tiukka yhteensopivuus ANSI C -standardin kanssa ( -ansi) tai laajennettu ANSI C murre ( -Xa). Kun käytät vaihtoehtoa -c99

  • Kääntäjän oppaat HTML-muodossa (saatavilla "verkossa" palvelimellamme, mutta vaativat Java-kielen tuen)
    • Intel C++ -kääntäjän käyttöopas.
    • Intel Fortran Compiler -käyttöopas.
  • Kääntäjän käsikirjat Englannin kieli PDF-muodossa (vaatii Acrobat Readerin, sinun on ladattava PDF-tiedostot tietokoneellesi)
    • Intel C++ Compiler User's Guide: Intel C++ Compiler User's Guide (1,3 Mt, 395 sivua).
    • Intel Fortran Compiler -käyttöopas: Intel Fortran Compiler -käyttöopas (1,1 Mt, 285 sivua).
    • Ohjelmoijan opas Fortranissa: Intel Fortran Programmer's Reference (7 Mt, 566 sivua).
    • Viittaus Fortran-kielen kirjastoihin: Intel Fortran Libraries Reference Manual (9,5 Mt, 881 sivua).
  • Intel Application Debugger Guide.
  • SPEC CPU2000 -testien kääntäjien vertailu (artikkeli osoitteessa ixbt.com venäjäksi).
  • Polyhedron-verkkosivustolla on vertailutuloksia eri kääntäjien välillä.
  • Lehden edellisessä numerossa keskustelimme Intel VTune Performance Analyzer -tuoteperheen tuotteista - suorituskyvyn analysointityökaluista, jotka ovat ansaitusti suosittuja sovelluskehittäjien keskuudessa ja mahdollistavat tunnistuksen koodissa. tiimisovelluksia, joka tuhlaa liikaa suoritinresursseja, mikä antaa kehittäjille mahdollisuuden tunnistaa ja poistaa potentiaalia kapeita paikkoja, joka liittyy samanlaisiin koodin osiin, mikä nopeuttaa sovellusten kehitysprosessia. Huomaa kuitenkin, että sovellusten suorituskyky riippuu pitkälti siitä, kuinka tehokkaita niiden kehityksessä käytetyt kääntäjät ovat ja mitä ominaisuuksia laitteisto niitä käytetään konekoodin luomiseen.

    Intel Intel C++- ja Intel Fortran -kääntäjien uusimmat versiot Windows- ja Linux-käyttöjärjestelmille mahdollistavat sovellusten suorituskyvyn parantamisen järjestelmille, jotka perustuvat Intelin prosessorit Itanium 2, Intel Xeon ja Intel Pentium 4 jopa 40 % verrattuna olemassa oleviin muiden valmistajien kääntäjiin, koska prosessoreissa käytetään sellaisia ​​ominaisuuksia kuin Hyper-Threading-tekniikka.

    Tämän kääntäjäperheen koodin optimointiin liittyviä eroja ovat pinon käyttö liukulukuoperaatioiden suorittamiseen, prosessien välinen optimointi (IPO), sovellusprofiilin mukainen optimointi (Profile Guided Optimization (PGO), tietojen esilataus välimuistiin ( Tietojen esihaku), joka välttää muistin käyttöön liittyvän viiveen, tuki Intel-suorittimille ominaisille ominaisuuksille (esim. laajennukset suoratoiston tietojenkäsittelyyn Intel Streaming SIMD Extensions 2, Intel Pentium 4:lle ominaisuus), koodin suorittamisen automaattinen rinnakkaisu, sovellus luominen, käynnissä useilla erilaisia ​​tyyppejä prosessorit optimoitaessa jollekin niistä, työkalut seuraavan koodin "ennustamiseen" (haaraennustus), laajennettu tuki suoritussäikeiden kanssa työskentelylle.

    Huomaa, että Intel-kääntäjiä käytetään sellaisissa tunnetuissa yrityksissä kuin Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Useiden yritysten suorittaman riippumattoman testauksen mukaan Intelin kääntäjien suorituskyky on huomattavasti parempi kuin muiden valmistajien kääntäjien (katso esimerkiksi http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf .pdf).

    Alla tarkastellaan joitain ominaisuuksia uusimmat versiot Intel-kääntäjät pöytäkoneille ja palvelimille käyttöjärjestelmät.

    Kääntäjät Microsoft Windows -alustalle

    Intel C++ Compiler 7.1 Windowsille

    Intel C++ Compiler 7.1 on aiemmin tänä vuonna julkaistu kääntäjä, joka tarjoaa erittäin optimoidun koodin Intel Itanium-, Intel Itanium 2-, Intel Pentium 4- ja Intel Xeon -prosessoreille sekä Intel Pentium M -prosessorille, joka käyttää Intel Centrino -tekniikkaa ja on tarkoitettu käytettäväksi mobiililaitteet.

    Määritetty kääntäjä on täysin yhteensopiva kehitystyökalujen Microsoft Visual C++ 6.0 ja Microsoft Visual Studio .NET kanssa: se voidaan rakentaa vastaaviin kehitysympäristöihin.

    Tämä kääntäjä tukee ANSI- ja ISO C/C++ -standardeja.

    Intel Fortran Compiler 7.1 Windowsille

    Intel Fortran Compiler 7.1 for Windows, joka myös julkaistiin aiemmin tänä vuonna, mahdollistaa optimoidun koodin luomisen Intel Itanium-, Intel Itanium 2-, Intel Pentium 4- ja Intel Xeon-, Intel Pentium M -suorittimille.

    Tämä kääntäjä on täysin yhteensopiva Microsoft Visual C++ 6.0 ja Microsoft Visual Studio .NET -kehitystyökalujen kanssa, eli se voidaan rakentaa vastaaviin kehitysympäristöihin. Lisäksi tällä kääntäjällä voit kehittää 64-bittisiä sovelluksia Itanium/Itanium 2 -prosessoreilla toimiville käyttöjärjestelmille käyttämällä Microsoft Visual Studiota 32-bittisessä Pentium-prosessorissa käyttäen 64-bittistä Intel Fortran Compileria. Virheenkorjauksen aikana tämä kääntäjä antaa sinun käyttää debuggeria Microsoftin alustat.NETTO.

    Jos sinulla on Compaq-tuote asennettuna, Visual Fortran 6.6:ta voidaan käyttää alkuperäisen Intel Fortran Compiler 7.1:n sijasta, koska nämä kääntäjät ovat yhteensopivia. lähdekoodi.

    Intel Fortran Compiler 7.1 for Windows on täysin yhteensopiva ISO Fortran 95 -standardin kanssa ja tukee sellaisten sovellusten luomista ja virheenkorjausta, jotka sisältävät koodia kahdella kielellä: C ja Fortran.

    Kääntäjät Linux-alustalle

    Intel C++ Compiler 7.1 Linuxille

    Toinen vuoden alussa julkaistu kääntäjä, Intel C++ Compiler 7.1 for Linux, mahdollistaa korkeatasoisen koodin optimoinnin Intel Itanium-, Intel Itanium 2-, Intel Pentium 4- ja Intel Pentium M -prosessoreille. yhteensopiva lähdekoodin ja objektimoduulien GNU C -kääntäjän kanssa, jonka avulla voit siirtää GNU C:llä luodut sovellukset siihen ilman lisäkustannuksia Intel C++ -kääntäjä tukee C++ ABI:ta (lisäys Linux-ytimeen, jonka avulla voit ajaa alla Linuxin ohjaus käännetty koodi muille alustoille, kuten varhaisille SCO-käyttöjärjestelmille, varhaiset versiot Sun Solaris jne.), mikä tarkoittaa täydellistä yhteensopivuutta gcc 3.2 -kääntäjän kanssa binäärikooditasolla. Lopuksi, Intel C++ Compiler 7.1 for Linux, voit jopa kääntää Linux-ytimen uudelleen tekemällä muutamia pieniä muutoksia sen lähdekoodiin.

    Intel Fortran Compiler 7.1 Linuxille

    Intel Fortran Compiler 7.1 for Linux mahdollistaa optimoidun koodin luomisen prosessoreille Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Tämä kääntäjä on täysin yhteensopiva Compaq Visual Fortran 6.6 -kääntäjän kanssa lähdekooditasolla, joten voit kääntää uudelleen Compaq Visual Fortranilla luotuja sovelluksia, mikä parantaa niiden suorituskykyä.

    Lisäksi määritetty kääntäjä on yhteensopiva sellaisten kehittäjien käyttämien apuohjelmien kanssa, kuten emacs-editori, gdb-debuggeri ja make application build -apuohjelma.

    Kuten tämän kääntäjän Windows-versio, Intel Fortran Compiler 7.1 for Linux on täysin yhteensopiva ISO Fortran 95 -standardin kanssa ja tukee sellaisten sovellusten luomista ja virheenkorjausta, jotka sisältävät koodia kahdella kielellä: C ja Fortran.

    Erityisesti on korostettava, että Intelin Venäjän ohjelmistokehityskeskuksen Nižni Novgorodissa asiantuntijat antoivat merkittävän panoksen lueteltujen Intel-kääntäjien luomiseen. Lisää yksityiskohtainen tieto Tietoja Intel-kääntäjistä on Intelin Web-sivustossa osoitteessa www.intel.com/software/products/.

    Tämän artikkelin toinen osa on omistettu Intel-kääntäjille, jotka luovat sovelluksia mobiililaitteille.

    Esimerkkejä todellisista hakkeroista: Intel C++ 7.0 Compiler - Arkisto WASM.RU

    ...Intel C++ 7.0 -kääntäjä ladattiin myöhään illalla, noin kello viisi aamulla. Halusin todella nukkua, mutta minua revitti myös uteliaisuus: oliko suojaa vahvistettu vai ei. Päätin, että kunnes keksin suojan, en silti nukahtaisi, avasin uusi konsoli, ja nollaa järjestelmämuuttujat TEMP ja TMP hakemistoon C:\TEMP, kirjoitettu hätäisesti sopimattomasti pitkä nimi asennusohjelma W_CC_P_7.0.073.exe komentorivillä (TEMP- ja TMP-muuttujien asettamisen tarve selittyy sillä, että Windows 2000:ssa ne osoittavat oletuksena erittäin syvälle sisäkkäiseen hakemistoon, ja Intel C++ -asennusohjelma - eikä vain se - ei tue niin suuria polkuja).

    Heti kävi selväksi, että suojauskäytäntöä oli uudistettu radikaalisti ja nyt lisenssin olemassaolo tarkistettiin jo ohjelman asennusvaiheessa (versiossa 5.x asennus sujui ongelmitta). OK, annamme dir-komennon ja katsomme sisältöä, minkä kanssa meidän on nyt taisteltava:

      Kansion C:\TMP\IntelC++Compiler70 sisältö

      17.03.2003 05:10

      html

      17.03.2003 05:11

      x86

      17.03.2003 05:11

      Itanium

      17.03.2003 05:11

      muistiinpanoja

      6.5.2002 10:35 45 056 Autorun.exe

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

      29.10.2002 11:25 2 831 ccompindex.htm

      24.10.2002 08:12 126 976 ChkLic.dll

      18.10.2002 22:37 552 960 chklic.exe

      17.10.2002 16:29 28 663 CLicense.rtf

      17.10.2002 16:35 386 credist.txt

      16.10.2002 17:02 34 136 Crellnotes.htm

      19.03.2002 14:28 4 635 PLSuite.htm

      21.02.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 tiedostoa 2 519 238 tavua

      6 kansiota 886 571 008 tavua ilmaiseksi

    Joo! Setup.exe-asennusohjelma vie vain neljäkymmentä kilotavua. Oikein hyvä! On epätodennäköistä, että pystyt piilottamaan vakavan suojan sellaiseen taltioon, ja vaikka näin olisikin, tämä pieni tiedosto ei ole kokonaisuudessaan analysoimisen arvoinen - disassembler-luettelon viimeiseen tavuun asti. Se ei kuitenkaan ole tosiasia turvakoodi joka sijaitsee tarkalleen setup.exe-tiedostossa, se voi sijaita jossain muussa paikassa, esimerkiksi... ChkLic.dll/ChkLic.exe, jotka yhdessä vievät hieman alle seitsemänsataa kilotavua. Odota, mikä on ChkLic? Onko tämä lyhenne sanoista Check License vai mitä?! Hmm, Intelin kavereilla on ilmeisesti vakavia ongelmia huumorintajun kanssa. Olisi parempi, jos he kutsuisivat tätä tiedostoa "Hack Me" rehellisesti! Okei, äänenvoimakkuuden perusteella päätellen ChkLic on sama FLEX lm, ja olemme jo kohdanneet sen (katso "Intel C++ 5.0 Compiler") ja meillä on karkea käsitys sen rikkomisesta.

    Annamme komennon "dumpbin /EXPORTS ChkLic.dll" tutkiaksemme vietyjä toimintoja ja... pitää kiinni Klavasta, jotta et putoa tuolilta:

      Vedos tiedosto ChkLic.dll

    1. Osa sisältää seuraavat ChkLic.dll-vientit

      0 ominaisuuksia

      3DB438B4 aikapäiväleima ma 21. lokakuuta 21:26:12 2002

    2. 1 määrä toimintoja

      1 määrä nimiä

      järjestysvihje RVA-nimi

      1 0 000010A0 _CheckValidLicense

    Perkele! Suojaus vie vain yhden toiminnon upealla nimellä CheckValidLicense. "Ihana" - koska toiminnon tarkoitus käy selväksi sen nimestä ja on mahdollista välttää huolellinen disassembler-koodin analysointi. No, he ovat menettäneet kaiken kiinnostuksensa... olisi parempi, jos he vievät sen tavallisesti tai jotain, tai ainakin kastaisivat sen jollain uhkaavalla nimellä, kuten DES Decrypt.

    ...haaveilla! Okei, palataan lampaihimme. Ajatelkaamme loogisesti: jos kaikki suojakoodi on keskittynyt suoraan ChkLic.dll-tiedostoon (ja suojauksen "saranoidusta" luonteesta päätellen näin todellakin on), silloin kaikki "suojaus" tarkoittaa CheckValidLicensen kutsumista asennusohjelmasta. exe ja tarkistaa sen palauttaman tuloksen. Siksi "hakkerointiin" riittää, että menetät ChkLic.dll:n, pakottamalla ChekValidLicense-toiminnon aina palaamaan... ja muuten, mitä sen pitäisi palauttaa? Tarkemmin sanottuna: mikä on palautusarvo, joka vastaa onnistunutta lisenssitarkistusta? Ei, älä kiirehdi purkamaan setup.exe-tiedostoa määrittääksesi sen, koska mahdollisia vaihtoehtoja ei enää niin paljon: joko EPÄTOSI tai TOSI. Lyötkö vetoa TOSI? No, tietyssä mielessä tämä on loogista, mutta toisaalta: miksi päätimme, että CheckValidLicense-funktio palauttaa täsmälleen toiminnon onnistumisen lipun, ei virhekoodia? Loppujen lopuksi sen on jotenkin motivoitava syyt kieltäytyä asentamasta kääntäjää: lisenssitiedostoa ei löytynyt, tiedosto on vahingoittunut, lisenssi on vanhentunut ja niin edelleen? Okei, yritetään palauttaa nolla, ja jos se ei auta, palautamme yhden.

    OK, solki kiinni, mennään! Käynnistämme HIEW:n, avaamme tiedoston ChkLic.dll (jos se ei avaudu, muista gopherit kolme kertaa, kopioi se väliaikaisesti juurihakemistoon tai muuhun hakemistoon, jonka nimessä ei ole erikoismerkkejä, joista hiew ei pidä) Sitten siirrymme jälleen dumpbinin avulla saatuun vientitaulukkoon, määritämme CheckValidLicense-funktion osoitteen (tässä tapauksessa 010A0h) ja siirrymme "10A0":n kautta sen alkuun. Nyt leikataan se "live" päälle kirjoittamalla sen päälle. vanha koodi "XOR EAX, EAX/RETN 4". Miksi juuri "REN 4" eikä vain "RET"? Kyllä, koska toiminto tukee stdcall-käytäntöä, jonka voit selvittää katsomalla sen epilogia HIEW"e ( vieritä vain alas disassembler-näyttöä, kunnes tapaat RET).

    Katsotaan... Toimii!!! Lisenssin puutteesta huolimatta asentaja aloittaa asennuksen kysymättä mitään! Siksi puolustus romahti. Voi, emme voi uskoa, että kaikki on niin yksinkertaista, ja jotta emme istuisi tyhmänä tuijottaen näyttöä odottamassa ohjelman asennusprosessin valmistumista, käytämme suosikki IDA disassembler -ohjelmaa setup.exe-sivustolla. Ensimmäinen asia, joka kiinnittää huomiosi, on CheckValidLicensen puuttuminen tuotujen toimintojen luettelosta. Ehkä se jotenkin käynnistää ChkLic.exe-tiedoston? Yritämme löytää vastaavan linkin automaattisesti tunnistettujen rivien joukosta: “~View aNames”, “ChkLic”... joo, riviä “Chklic.exe” ei ole ollenkaan, mutta “Chklic.dll” havaitaan. Joo, ymmärrän, se tarkoittaa, että ChkLic-kirjasto ladataan eksplisiittisellä linkityksellä LoadLibraryn kautta. Ja ristiviittauksen seuraaminen vahvistaa tämän:

      Teksti:0040175D push offset aChklic_dll ; lpLibFileName

      Teksti:00401762 soita ds:LoadLibraryA

      Teksti:00401762 ; lataa ChkLic.dll ^^^^^^^^^^^^^^^^^

      Teksti:00401762 ;

      Teksti:00401768 mov esi, eax

      Teksti:0040176A push offset a_checkvalidlic ; lpProcName

      Teksti:0040176F push esi ; hModule

      Teksti:00401770 soita ds:GetProcAddress

      Teksti:00401770 ; saada CheckValidLicense-toiminnon osoite

      Teksti:00401770 ;

      Teksti:00401776 cmp esi, ebx

      Teksti:00401778 jz loc_40192E

      Teksti:00401778 ; jos sellaista kirjastoa ei ole, poistu asennusohjelmasta

      Teksti:00401778 ;

      Teksti:0040177E cmp eax, ebx

      Teksti:00401780 jz loc_40192E

      Teksti:00401780 ; Jos kirjastossa ei ole tällaista toimintoa, sulje asennus

      Teksti:00401780 ;

      Teksti: 00401786 push ebx

      Teksti: 00401787 soita eax

      Teksti:00401787 ; kutsua ChekValidLicense-funktiota

      Teksti:00401787 ;

      Teksti:00401789 testaa eax, eax

      Teksti:0040178B jnz loc_4019A3

    Teksti:0040178 ; jos funktio palautti nollasta poikkeavan, sulje asennusohjelma

    Uskomatonta, tämä hirvittävän primitiivinen puolustus on rakennettu juuri tällä tavalla! Lisäksi puolen metrin tiedostoa ChkLic.exe ei tarvita ollenkaan! Ja miksi se kannatti vetää se Internetistä? Muuten, jos päätät tallentaa kääntäjäjakelun (huomio: en sanonut "jakaa"!), niin levytilan säästämiseksi ChkLic.* voidaan tyhjentää: joko poistamalla setup.exe, poistamalla se pysyvästi käyttää niitä tai yksinkertaisesti luomalla oma ChkLic.dll, viemällä stdcall-funktion CheckValidLicence muodossa: int CheckValidLicence(int some_flag) ( return 0;)

    No, kun keskustelimme kaikesta tästä, asennusohjelma viimeisteli kääntäjän asennuksen ja suoritti työnsä onnistuneesti. Onko mielenkiintoista alkaako kääntäjä vai onko kaikki hauskuus vasta alkamassa? Menemme kuumeisesti alas haaroittuneessa alikansioiden hierarkiassa, löydämme icl.exe-tiedoston, joka, kuten odottaakin, sijaitsee bin-hakemistossa, napsauta ja... Kääntäjä ei tietenkään käynnisty vedoten siihen, että "icl: error: ei voinut kassata FLEX lm -lisenssiä", jota ilman hän ei voi jatkaa työtään.

    Osoittautuu, että Intel käytti monitasoista suojausta ja ensimmäinen taso osoittautui karkeaksi suojaksi tyhmiä vastaan. Hyvin! Hyväksymme tämän haasteen ja aiemman kokemuksemme perusteella etsimme automaattisesti LMGR*.DLL-tiedoston kääntäjähakemistosta. Hyödytön! Tällä kertaa täällä ei ole sellaista tiedostoa, mutta käy ilmi, että icl.exe on lihonut reilusti yli kuudessadan kilotavun rajan... Stop! Eivätkö kääntäjän kehittäjät linkittäneet tätä samaa FLEX lm:ää staattiseen linkitykseen? Katsotaanpa: Intel C++ 5.0:ssa lmgr327.dll- ja icl.exe-kokojen summa oli 598 kt, ja nyt icl.exe yksin vie 684 kt. Kun otetaan huomioon oikaisu luonnollisen seniilin "lihavuuden" suhteen, luvut ovat hyvin samaa mieltä. Joten loppujen lopuksi FLEX lm! Voi voi! Mutta nyt, ilman symbolisia toimintonimiä, suojan rikkominen on paljon vaikeampaa... Älä kuitenkaan panikoi etukäteen! Mietitäänpä ihan rauhassa! On epätodennäköistä, että kehitystiimi kirjoitti kokonaan uudelleen kaiken koodin, joka on vuorovaikutuksessa tämän "kirjekuoren" suojauksen kanssa. Todennäköisesti sen "parannus" päättyi vain asettelun tyypin muutokseen. Ja jos näin on, mahdollisuudet ohjelman hakkerointiin ovat edelleen suuret!

    Kun muistamme, että viimeksi turvakoodi oli päätoiminnossa, määritimme sen osoitteen, määritimme yksinkertaisesti keskeytyskohdan ja odotamme debuggerin ilmestymistä, jäljitämme tyhmästi koodia, katsoen vuorotellen debuggeria ja sitten ohjelman lähtöä. ikkuna: onko Onko olemassa sanallista viestiä? Samalla merkitsemme kaikki kohtaamamme ehdolliset siirtymät erilliselle paperille (tai laitamme ne omaan muistiimme, jos haluat), unohtamatta ilmoittaa, suoritettiinko jokainen ehdollinen siirtymä vai ei... Stop! Sinä ja minä juttelimme jostain, mutta loukkaava viesti on jo ponnahtanut esiin! okei hyvin! Katsotaanpa mitä ehdollinen siirtymä vastasi sitä. Tietojemme mukaan viimeinen havaittu hyppy oli JNZ-ehdollinen hyppy, joka sijaitsee osoitteessa 0401075h ja "reagoi" sub_404C0E:n palauttamaan tulokseen:

  • Teksti:0040107F loc_40107F: ; KOODI XREF: _main+75^j

    Teksti:0040107F mov eax, offset aFfrps ; "FFrps"

    Teksti:00401084 mov edx, 21h

    Teksti:00401089 soita sub_404C0E

    Teksti:0040108E testi eax, eax

    Teksti:00401090 jnz short loc_40109A

    Ilmeisesti sub_404C0E on erittäin suojaava menettely, joka tarkistaa lisenssin olemassaolon. Kuinka huijata häntä? No, vaihtoehtoja on monia... Ensinnäkin voit harkiten ja tarkasti analysoida sub_404C0E:n sisältöä saadaksesi selville, mitä se tarkalleen tarkastaa ja miten se tarkastaa. Toiseksi, voit yksinkertaisesti korvata JNZ short loc_40107F JZ short loc_40107F tai jopa NOP, NOP. Kolmanneksi paluutulosten tarkistuskomento TEST EAX, EAX voidaan muuttaa nollakomennon muotoon: XOR EAX, EAX. Neljänneksi voit saada sub_404C0E itsensä katoamaan niin, että se palauttaa aina nollan. En tiedä teistä, mutta pidin menetelmästä numero kolme eniten. Muutamme kaksi tavua ja käynnistämme kääntäjän. Jos suojauksessa ei ole muita "lisensoinnin" tarkistuksia, ohjelma toimii ja vastaavasti päinvastoin. (Kuten muistamme, viidennessä versiossa oli kaksi tällaista tarkistusta). Hämmästyttävää kyllä, kääntäjä ei enää valittaa ja toimii!!! Todellakin, kuten odottaa, sen kehittäjät eivät vahvistaneet suojaa ollenkaan, vaan päinvastoin jopa heikensivät sitä! Chris Kaspersky

  • Et ole orja!
    Suljettu koulutuskurssi eliitin lapsille: "Maailman todellinen järjestely."
    http://noslave.org

    Materiaali Wikipediasta - vapaasta tietosanakirjasta

    Intel C++ -kääntäjä
    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).
    Tyyppi
    Tekijä

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Kehittäjä
    Kehittäjät

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    kirjoitettu

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Käyttöliittymä

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    käyttöjärjestelmä
    Käyttöliittymäkielet

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Ensimmäinen painos

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Laitteistoalusta
    Uusin versio
    Vapauta ehdokas

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Beta-versio

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Alfa versio

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Testiversio

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Luettavat tiedostomuodot

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Luodut tiedostomuodot

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Osavaltio

    Lua-virhe Module:Wikidatassa rivillä 170: yritys indeksoida kenttä "wikibase" (nolla-arvo).

    Lisenssi

    Pääpiirteet:

    • Vektorisointi SSE:lle, SSE2:lle, SSE3:lle, SSE4:lle

    Kääntäjä tukee OpenMP 3.0 -standardia rinnakkaisten ohjelmien kirjoittamiseen. Sisältää myös OpenMP:n muunnelman nimeltä Cluster OpenMP, jolla voit ajaa OpenMP:n mukaisesti kirjoitettuja sovelluksia MPI:tä käyttävillä klustereilla.

    Intel C++ Compiler käyttää Edison Design Groupin käyttöliittymää (kääntäjän osaa, joka jäsentää käännetyn ohjelman). Samaa käyttöliittymää käyttävät SGI MIPSpro-, Comeau C++- ja Portland Group -kääntäjät.

    Tätä kääntäjää käytetään laajasti SPEC-suorittimen vertailuarvojen kääntämiseen.

    Intelillä on 4 tuotesarjaa, jotka sisältävät kääntäjän:

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

    Kääntäjän Linux-version haittoja ovat osittainen yhteensopimattomuus C-kielen GNU-laajennusten kanssa (jota tukee GCC-kääntäjä), mikä voi aiheuttaa ongelmia joidenkin ohjelmien kääntämisessä.

    Kokeelliset vaihtoehdot

    Kääntäjästä julkaistiin seuraavat kokeelliset versiot:

    • Intel STM Compiler Prototype Edition, päivätty 17. syyskuuta 2007. Software Transaction Memory (STM) -tuki. Julkaistu Linuxille ja Windowsille, vain IA-32:lle (x86-suorittimet);
    • Intel Concurrent Collections for C/C++ 0.3 syyskuusta 2008 alkaen. Sisältää mekanismeja, jotka helpottavat rinnakkaisten C++-ohjelmien kirjoittamista.

    Perusliput

    Windows Linux, MacOSX Kuvaus
    /Od -O0 Poista optimoinnit käytöstä
    /O1 -O1 Optimoi suoritettavan tiedoston koon minimoimiseksi
    /O2 -O2 Optimoi nopeuden mukaan. Mukana joitain optimointeja
    /O3 -O3 Ota kaikki optimoinnit käyttöön O2:sta. Suorita myös intensiivisiä syklien optimointeja
    /Oip -Oip Ota käyttöön tiedostokohtainen prosessien välinen optimointi
    /Oipo -Oipo Ota käyttöön yleinen prosessien välinen optimointi
    /QxO -xO Salli SSE3-, SSE2- ja SSE-laajennusten käyttö minkä tahansa yrityksen valmistamille prosessoreille
    /nopeasti -nopeasti "Nopea tila". Vastaa vaihtoehtoja "/O3 /Qipo /QxHost /no-prec-div" Windowsissa ja "-O3 -ipo -static -xHOST -no-prec-div" Linuxissa. Huomaa, että "-xHOST" -lippu tarkoittaa optimointia prosessorille, jossa kääntäjä on käynnissä.
    /Qprof-gen -prof_gen Luo ohjelmasta instrumentoitu versio, joka kokoaa suoritusprofiilin
    /Qprof-käyttö -runsas Käytä prof_gen-lipulla kerättyjä ohjelmien julkaisujen profiilitietoja.

    Kirjoita arvostelu artikkelista "Intel C++ -kääntäjä"

    Huomautuksia

    Katso myös

    Linkit

    Ote, joka kuvaa Intel C++ -kääntäjää

    Ja myös, hän palasi näkemään Valkoisen Maguksen viimeisen kerran... Hänen miehensä ja todellisin ystävänsä, jota hän ei voinut koskaan unohtaa. Sydämissään hän antoi hänelle anteeksi. Mutta hänen suureksi valituksekseen hän ei voinut antaa hänelle Magdalenan anteeksiantoa... Joten, kuten näette, Isidora, suuri kristitty satu "anteeksiantamisesta" on vain lapsellinen valhe naiiveille uskoville, jotta he voisivat sallia heidän tehdä mitä tahansa pahaa, tietäen, että riippumatta siitä, mitä he tekevät, he saavat lopulta anteeksi. Mutta voit antaa anteeksi vain sen, mikä todella ansaitsee anteeksiannon. Ihmisen täytyy ymmärtää, että hänen on vastattava kaikesta tekemästään pahasta... Eikä jonkin salaperäisen Jumalan edessä, vaan itsensä edessä, pakottamalla itsensä kärsimään julmasti. Magdalena ei antanut anteeksi Vladykalle, vaikka hän kunnioitti ja rakasti häntä syvästi. Aivan kuten hän ei antanut meille kaikille anteeksi Radomirin kauheaa kuolemaa. Loppujen lopuksi HÄN ymmärsi paremmin kuin kukaan muu - olisimme voineet auttaa häntä, olisimme voineet pelastaa hänet julmalta kuolemalta... Mutta emme halunneet. Koska Valkoisen Maguksen syyllisyys oli liian julma, hän jätti hänet elämään tämän syyllisyyden kanssa, unohtamatta sitä hetkeksikään... Hän ei halunnut antaa hänelle helppoa anteeksiantoa. Emme nähneet häntä enää koskaan. Aivan kuten he eivät koskaan nähneet lapsiaan. Yhden temppelinsä ritarin - velhomme - Magdalena välitti vastauksen Vladykalle hänen pyyntöönsä palata luoksemme: "Aurinko ei nouse kahdesti samana päivänä... Maailmanne ilo (Radomir) älä koskaan palaa luoksesi, aivan kuten en palaa sinun luoksesi ja minä... Löysin USKONI ja TOTUUKSENI, he ovat ELÄVÄT, mutta sinun on KUOLLUT... Suru poikiasi - he rakastivat sinua. En koskaan anna sinulle anteeksi heidän kuolemaansa, kun olen elossa. Ja olkoon syyllisyytesi kanssasi. Ehkä hän jonain päivänä tuo sinulle Valoa ja Anteeksiantoa... Mutta ei minulta." Magus Johnin päätä ei tuotu Meteoraan samasta syystä - kukaan Temppelin ritari ei halunnut palata luoksemme... Menetimme heidät, kuten olemme menettäneet monia muitakin useammin kuin kerran, jotka eivät halunneet palata luoksemme... Ymmärrä ja hyväksy uhrimme... Kuka teki aivan kuten sinä - he lähtivät tuomitsemalla meidät.
    Pääni pyöri!... Kuten janoinen, sammuttaen ikuista tiedonnälkääni, otin ahneesti vastaan ​​pohjoisen anteliaasti antaman hämmästyttävän tiedon virtauksen... Ja halusin paljon muuta!.. Halusin tietää kaiken loppu. Se oli tuulahdus raikasta vettä kivun ja vaikeuksien polttamassa autiomaassa! Ja en voinut saada tarpeekseni siitä...
    – Minulla on tuhansia kysymyksiä! Mutta aikaa ei ole jäljellä... Mitä minun pitäisi tehdä, Pohjoinen?...
    - Kysy, Isidora!... Kysy, yritän vastata sinulle...
    – Kerro minulle, Sever, miksi minusta näyttää siltä, ​​että tässä tarinassa yhdistyy kaksi samankaltaisiin tapahtumiin kietoutunutta elämäntarinaa ja ne esitetään yhden ihmisen elämänä? Vai enkö ole oikeassa?
    – Olet aivan oikeassa, Isidora. Kuten sanoin aiemmin, "tämän maailman voimat", jotka loivat ihmiskunnan väärän historian, "asuivat" Kristuksen todelliseen elämään juutalaisen profeetan Joosuan vieraan elämän, joka eli puolitoista tuhatta vuotta sitten ( pohjoisen tarinan ajoilta). Eikä vain hän itse, vaan myös hänen perheensä, hänen sukulaisensa ja ystävänsä, hänen ystävänsä ja seuraajansa. Loppujen lopuksi se oli profeetta Joosuan vaimo, juutalainen Maria, jolla oli sisar Martha ja veli Lasarus, hänen äitinsä Maria Yakoben sisar ja muita, jotka eivät koskaan olleet lähellä Radomiria ja Magdalenaa. Aivan kuten heidän vieressään ei ollut muita "apostoleja" - Paavali, Matteus, Pietari, Luukas ja muut...
    Se oli profeetta Joshuan perhe, joka muutti puolitoista tuhatta vuotta sitten Provenceen (jota tuohon aikaan kutsuttiin Transalpine Galliaksi), kreikkalaiseen Massalian kaupunkiin (nykyinen Marseille), koska Massalia oli tuolloin "portti" Euroopan ja Aasian välillä, ja se oli helpoin tapa kaikille "vainotuille" välttää vaino ja ongelmat.



    
    Yläosa