Intel kompilatori. Kāpēc bija vajadzīgi jauni kompilatori?

Intel C++ un Fortran kompilatori un MKL bibliotēka

Līdzās standarta GNU kompilatoriem operētājsistēmai Linux, NIVC skaitļošanas kompleksa klasteros ir instalēti Intel C++ un Fortran kompilatori. Pašlaik (2006. gada sākumā) visos klasteros ir instalēta kompilatoru versija 9.1. Šī lapa ir veltīta šo kompilatoru svarīgāko opciju un iestatījumu aprakstam, kā arī to galvenajām atšķirībām no GNU kompilatoriem. Lapa ir paredzēta galvenokārt MSU pētniecības skaitļošanas centra klasteru lietotājiem, taču tā var būt noderīga arī citiem krieviski runājošiem lietotājiem. Šeit nav aplūkotas problēmas, kas saistītas ar kompilāciju platformai IA-64.

Arī Intel bibliotēka ir instalēta visos klasteros Kodola matemātikas bibliotēka(MKL) versija 8.0.2. Bibliotēka atrodas direktorijā /usr/mkl. Lūdzu, ņemiet vērā, ka lib direktorijā ir pieejami apakšdirektoriji 32, 64 un em64t. Ant klasterī ir jāizmanto bibliotēkas no apakšdirektorija em64t, bet citos klasteros - no apakšdirektorija 32. Visu nepieciešamo dokumentāciju un piemērus var iegūt no /usr/mkl/doc direktorijas.

Kāpēc bija vajadzīgi jauni kompilatori?

Nepieciešamība pēc jauniem kompilatoriem galvenokārt radās, lai a) atbalstītu programmēšanu Fortran 90, kā arī b) Fortran programmu jaudīgākai optimizēšanai, nekā to nodrošina kompilators g77, kas izmanto tulkošanu uz C un pēc tam kompilāciju, izmantojot gcc.

Arī PGI (Portland Group) kompilatori atbilst šīm prasībām, taču izstrādātāju kompānija atteicās tos piegādāt Krievijai.

Kā izmantot?

Intel kompilatori tiek izsaukti, izmantojot komandas icc(C vai C++), icpc(C++) un ifort(Fortran 77/90). Komandas mpicc, mpiCC un mpif77 MPI programmu kompilēšanai un montāžai arī ir konfigurētas, lai izmantotu Intel kompilatorus.

Ir iespējams arī izmantot GNU kompilatorus, izmantojot komandas mpigcc, mpig++ un mpig77 (Fortran 90 netiek atbalstīts).

Ievades faili

Pēc noklusējuma faili ar paplašinājumu .cpp Un .cxx tiek uzskatīti par avota tekstiem C++ valodā, faili ar paplašinājumu .c- C avota kods, un icpc kompilators arī apkopo .c failus kā C++ avota kodu.

Faili ar paplašinājumiem .f, .ftn Un .priekš tiek atpazīti kā avota teksti Fotranas valodā ar fiksētu apzīmējumu formu un faili .fpp Un .F papildus iziet cauri Fortran valodas priekšapstrādātājam. Faili ar paplašinājumu .f90 tiek uzskatīti par Fortran 90/95 avota tekstiem ar brīvas formas apzīmējumiem. Izmantojot opcijas, Fortran programmām varat skaidri norādīt fiksētu vai brīvu apzīmējuma formu -FI Un -FR attiecīgi.

Faili ar paplašinājumu .s atzīts par montāžas valodas kodu IA-32.

Intel kompilatora funkcijas

Šeit mēs iepazīstinām ar Intel kompilatoru īpašībām, kā izstrādātājs norādījis lietotāja rokasgrāmatā ar dažiem mūsu komentāriem.

  • Būtiska optimizācija
    Acīmredzot tas nozīmē koda optimizāciju augstā līmenī, t.i. pirmkārt dažādas cilpas transformācijas, kuras ar lielākiem vai mazākiem panākumiem veic gandrīz visi kompilatori
  • Peldošā komata optimizācija
    Acīmredzot tas, pirmkārt, nozīmē maksimālu aparatūras līmenī ieviesto komandu izmantošanu
  • Starpprocedūru optimizācija
    tie. visas programmas globālā optimizācija, pretstatā parastajai optimizācijai, kas ietekmē tikai konkrētu funkciju kodu
  • Profila optimizācija
    tie. iespēja palaist programmu testa režīmā, apkopot datus par laiku, kas nepieciešams, lai nodotu noteiktus koda fragmentus bieži izmantotās funkcijās, un pēc tam izmantot šos datus optimizācijai
  • Atbalsts SSE instrukciju kopai Pentium III procesoros
    piezīme: skaitļošanas uzdevumiem vairāk interesē SSE2 komandas, t.i. vektora komandas virs 64 bitu reāliem skaitļiem, taču tās atbalsta tikai Pentium 4 procesori, kas mūsu rīcībā vēl nav
  • Automātiska vektorizācija
    tie. atkal, izmantojot komandas SSE un SSE2, ko kompilators ievieto automātiski
  • OpenMP atbalsts programmēšanai SMP sistēmās
    piezīme: klasterī ieteicams galvenokārt izmantot MPI saskarni; plaši izplatīta OpenMP izmantošana klasterī nav gaidāma un šādi eksperimenti vēl nav veikti; bet droši vien ir jēga izmantot bibliotēkas (BLAS utt.), kas ir paralēlas koplietošanas atmiņai.
  • Datu sākotnējā ielāde
    tie. Acīmredzot datu kešatmiņā tiek izmantotas iepriekšējas ielādes komandas no atmiņas, kas būs nepieciešamas pēc kāda laika
  • "Nosūtīšanas" kods dažādiem procesoriem
    tie. iespēja ģenerēt kodu dažādiem procesoriem vienā izpildāmā failā, kas ļauj izmantot priekšrocības jaunākie procesori lai sasniegtu tajos augstāko veiktspēju, vienlaikus saglabājot programmu bināro savietojamību ar iepriekšējiem procesoriem; Mūsu klasterī tas vēl nav aktuāli, jo tiek izmantoti tikai Pentium III procesori, un klasterī kompilētās programmas nav paredzēts pārsūtīt un palaist citās iekārtās.

Pamata kompilatora opcijas

Interesantākās, protams, ir koda optimizācijas iespējas. Lielākā daļa opciju ir kopīgas C++ un Fortran kompilatoriem. Vairāk Detalizēts apraksts opcijas angļu valodas lietotāja rokasgrāmatās.

Optimizācijas līmeņi
OpcijaApraksts
-O0Atspējo optimizāciju
-O1 vai -O2Pamata optimizācija ātrumam. Bibliotēkas funkciju iekļautā ievietošana ir atspējota. C++ kompilatoram šīs opcijas nodrošina tādu pašu optimizāciju; Fortran kompilatoram ir vēlama opcija -O2, jo ietver arī cikla veicināšanu.
-O3Jaudīgākas optimizācijas, tostarp cilpas transformācijas, datu iepriekšēja ielāde un OpenMP izmantošana. Dažas programmas var negarantēt labāku veiktspēju salīdzinājumā ar -O2. Ir jēga izmantot kopā ar vektorizācijas opcijām -xK Un -xW.
-atritināt[n]Iespējo cilpas attīšanu līdz n reizēm.
Optimizācija konkrētam procesoram
OpcijaApraksts
-tpp6Optimizācija Penitum Pro, Pentium II un Pentium III procesoriem
-tpp7Optimizācija Penitum 4 procesoriem (šī opcija ir iespējota pēc noklusējuma kompilatoram IA-32)
-xMKodu ģenerēšana, izmantojot MMX paplašinājumus, kas raksturīgi Pentium MMX, Pentium II un jaunākiem procesoriem
-xKKodu ģenerēšana, izmantojot SSE paplašinājumus, kas raksturīgi Pentium III procesoriem
-xWKodu ģenerēšana, izmantojot SSE2 paplašinājumus, kas raksturīgi Pentium 4 procesoriem
Starpprocedūru optimizācija
-ipViena faila ietvaros ir iespējota starpprocedūru optimizācija. Ja norādāt opciju -ip_no_inlining, tad iekļautās funkciju ievietošana ir atspējota.
-ipoIespējo starpprocedūru optimizāciju starp dažādiem failiem
Optimizācija, izmantojot profilus
-prof_genTiek ģenerēts "profilēšanas" kods, kas tiks izmantots profilēšanai, t.i. vācot datus par noteiktu vietu apbraukšanas biežumu programmā
-prof_useOptimizācija tiek veikta, pamatojoties uz datiem, kas iegūti profilēšanas posmā. Ir lietderīgi to izmantot kopā ar starpprocedūru optimizācijas opciju -ipo.
Paralēlizācija SMP sistēmām
-openmpIespējo OpenMP 2.0 standarta atbalstu
- paralēliAutomātiskā cilpas paralēlizācija ir iespējota

Performance

Saskaņā ar SPEC CPU2000 testu rezultātiem, kas publicēti ixbt.com serverī, Intel kompilatoru versija 6.0 bija gandrīz vispārēji labāka salīdzinājumā ar gcc kompilatoru versijām 2.95.3, 2.96 un 3.1 un PGI versiju 4.0.2. Šie testi tika veikti 2002. gadā datorā ar Pentium 4/1,7 GHz procesoru un RedHat Linux 7.3.

Saskaņā ar Polyhedron veiktajiem testiem Intel Fortran kompilatora versija 7.0 bija gandrīz vispārēji pārāka par citiem Fortran 77 kompilatoriem operētājsistēmai Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). Tikai dažos testos Intel kompilators ir nedaudz zemāks par Absoft, NAG un Lahey kompilatoriem. Šie testi tika veikti datorā ar Pentium 4/1,8 GHz procesoru un Mandrake Linux 8.1.

Intel kompilatoru versija 9.1 arī pārspēj gcc kompilatoru veiktspēju, un to veiktspēja ir salīdzināma ar Absoft, PathScale un PGI.

Būsim pateicīgi tiem lietotājiem un lasītājiem, kuri atsūtīs mums datus par kompilatora izvēles (GCC vai Intel) un optimizācijas iespēju ietekmi uz darba ātrumu viņu reālās dzīves problēmām.

Bibliotēkas

C valodas kompilators izmanto izpildlaika bibliotēku, kas izstrādāta GNU projektā ( libc.a).

Ar Intel C++ kompilatoru tiek piegādātas šādas bibliotēkas:

  • libcprts.a- izpildlaika C++ valodu bibliotēka, ko izstrādājusi Dinkumware.
  • libcxa.a- papildu izpildlaika bibliotēka Intel C++ izstrādei.
  • libimf.a- Intel izstrādāta matemātisko funkciju bibliotēka, kas ietver optimizētus un augstas precizitātes trigonometrisko, hiperbolisko, eksponenciālo, speciālo, sarežģīto un citu funkciju implementācijas (sīkāku informāciju skatīt funkciju sarakstā).
  • libirc.a- izpildlaika atbalsts profilēšanai (PGO) un koda nosūtīšanai atkarībā no procesora (skatīt iepriekš).
  • libguide.a- OpenMP ieviešana.

Šajā sarakstā ir iekļautas statiskās bibliotēkas, taču lielākajai daļai no tām ir arī dinamiskās, t.i. startēšanas laikā pievienotās opcijas ( .tātad).

Kopā ar Fortran kompilatoru tiek piegādātas šādas bibliotēkas: libCEPCF90.a, libIEPCF90.a, libintrins.a, libF90.a, tiek izmantota arī matemātisko funkciju bibliotēka libimf.a.

Izpildāmā faila izveide

Bibliotēkas var savienot statiski (veidošanas laikā) vai dinamiski (programmas palaišanas laikā). Dinamiskā pieeja ļauj samazināt izpildāmā faila lielumu un ļauj koplietot to pašu bibliotēkas kopiju atmiņā, taču šim nolūkam ir jāinstalē pilns dinamisko bibliotēku komplekts, kas tiek izmantots katrā mezglā, kurā tiks darbinātas programmas. .

Tādējādi, ja instalējāt Intel kompilatoru savā Linux datorā un vēlaties palaist kompilētos izpildāmos failus citās iekārtās, jums ir jāizmanto statisks būvējums (kas ir vienkāršāk) vai jākopē Intel dinamiskās bibliotēkas uz šīm iekārtām (parasti no direktoriju, piemēram, /opt/intel /compiler70/ia32/lib), uz kādu no direktorijiem, kas norādīti /etc/ld.so.conf failā, kā arī pārliecinieties, vai tajos ir instalēta viena un tā pati GNU/Linux dinamisko bibliotēku kopa. mašīnas.

Pēc noklusējuma visas Intel izstrādes bibliotēkas (izņemot libcxa.so) ir saistītas statiski, un visas Linux sistēmas bibliotēkas un GNU bibliotēkas ir dinamiski saistītas. Izmantojot opciju - statisks jūs varat piespiest savācēju (saišu redaktoru) savienot visas bibliotēkas statiski (kas palielinās skaļumu). izpildāmais fails) un izmantojot opciju -i_dynamic Varat dinamiski saistīt visas Intel izstrādes bibliotēkas.

Pievienojot papildu bibliotēkas, izmantojot skata opciju - bibliotēka iespējams, jums būs jāizmanto šī opcija -Ldirektorijs lai norādītu ceļu, kur atrodas bibliotēkas.

Opciju izmantošana -Bstatisks Un -Bdinamisks varat skaidri norādīt dinamisko vai statisko savienojumu katrai no bibliotēkām, kas norādītas komandrinda.

Izmantojot opciju -c izpildāmā faila montāža ir atspējota un tiek veikta tikai kompilācija (objekta moduļa ģenerēšana).

Moduļu koplietošana Fortran un C

Lai koplietotu Fortran un C valodā rakstītos moduļus, jums jāvienojas par procedūru nosaukšanu objektu moduļos, parametru nodošanu un piekļuvi globālajiem mainīgajiem, ja tādi ir.

Pēc noklusējuma Intel Fortran kompilators pārvērš procedūru nosaukumus mazajos burtos un nosaukuma beigās pievieno pasvītrojumu. C kompilators nekad nemaina funkciju nosaukumus. Tādējādi, ja no Fortran moduļa vēlamies izsaukt funkciju vai procedūru FNNAME, kas ieviesta C valodā, tad C modulī to vajadzētu saukt par fnname_.

Fortran kompilators atbalsta šo opciju -nus [faila nosaukums], kas ļauj atspējot pasvītrojumu pievienošanu iekšējo procedūru nosaukumiem. Ja ir norādīts faila nosaukums, tas tiek darīts tikai norādītajā failā norādītajiem procedūru nosaukumiem.

Pēc noklusējuma Fortran parametri tiek nodoti pēc atsauces, un C tie vienmēr tiek nodoti pēc vērtības. Tādējādi, izsaucot Fortran procedūru no C moduļa, mums ir jānosūta norādes uz atbilstošajiem mainīgajiem, kas satur faktisko parametru vērtības kā parametrus. Rakstot funkciju C, kas būs jāizsauc no Fortran moduļa, mums jāapraksta formālie parametri kā norādes uz atbilstošajiem tipiem.

C moduļos ir iespējams izmantot COMMON blokus, kas definēti Fortran moduļos (plašāku informāciju skatiet Intel Fortran kompilatora lietotāja rokasgrāmatas nodaļā C un Fortran sajaukšana).

Intel un GCC kompilatoru koplietošana

C objektu moduļi, ko ražo Intel C++ kompilators, ir saderīgi ar GCC kompilatora un GNU C bibliotēkas ražotajiem moduļiem. Tādējādi šos moduļus var izmantot kopā vienā programmā, kas kompilēta, izmantojot komandas icc vai gcc, taču ir ieteicams izmantot icc, lai pareizi iekļautu Intel bibliotēkas.

Intel kompilators atbalsta vairākus nestandarta C valodas paplašinājumus, ko izmanto GNU projekts un atbalsta GCC kompilators (bet ne visus, sīkāku informāciju skatiet šeit).

Lietotāja rokasgrāmatā nekas nav teikts par objektu moduļu saderību C++ un Fortran valodās, acīmredzot tas netiek atbalstīts.

Standartu atbalsts

Intel C++ Compiler 7.0 operētājsistēmai Linux atbalsta ANSI/ISO C valodas standartu (ISO/IEC 9899/1990). Ir iespējams noteikt stingru saderību ar ANSI C standartu ( -ansi) vai paplašināts ANSI C dialekts ( -Xa). Izmantojot opciju -c99

  • Kompilatoru rokasgrāmatas HTML formātā (pieejamas "tiešsaistē" mūsu serverī, bet nepieciešams Java valodas atbalsts)
    • Intel C++ kompilatora lietotāja rokasgrāmata.
    • Intel Fortran kompilatora lietotāja rokasgrāmata.
  • Kompilatoru rokasgrāmatas priekš angļu valoda PDF formātā (nepieciešams Acrobat Reader, jums jālejupielādē PDF faili datorā)
    • Intel C++ kompilatora lietotāja rokasgrāmata: Intel C++ kompilatora lietotāja rokasgrāmata (1,3 MB, 395 lappuses).
    • Intel Fortran Compiler lietotāja rokasgrāmata: Intel Fortran Compiler lietotāja rokasgrāmata (1,1 MB, 285 lappuses).
    • Programmētāja uzziņa vietnē Fortran: Intel Fortran programmētāja uzziņa (7 MB, 566 lappuses).
    • Atsauce uz Fortran valodas bibliotēkām: Intel Fortran bibliotēku uzziņu rokasgrāmata (9,5 MB, 881 lappuse).
  • Intel lietojumprogrammu atkļūdotāja rokasgrāmata.
  • SPEC CPU2000 testu kompilatoru salīdzinājums (raksts vietnē ixbt.com krievu valodā).
  • Polyhedron tīmekļa vietne piedāvā dažādu kompilatoru salīdzināšanas rezultātus.
  • Iepriekšējā žurnāla numurā mēs apspriedām Intel VTune Performance Analyzer saimes produktus - veiktspējas analīzes rīkus, kas ir pelnīti populāri lietojumprogrammu izstrādātāju vidū un ļauj noteikt kodu. komandu pieteikumi, kas tērē pārāk daudz CPU resursu, sniedzot izstrādātājiem iespēju identificēt un novērst potenciālu šauras vietas, kas saistīti ar līdzīgām koda sadaļām, tādējādi paātrinot lietojumprogrammu izstrādes procesu. Tomēr ņemiet vērā, ka lietojumprogrammu veiktspēja lielā mērā ir atkarīga no tā, cik efektīvi ir to izstrādē izmantotie kompilatori un kādas funkcijas aparatūra tos izmanto, ģenerējot mašīnas kodu.

    Jaunākās Intel Intel C++ un Intel Fortran kompilatoru versijas operētājsistēmai Windows un Linux ļauj iegūt lietojumprogrammu veiktspējas priekšrocības sistēmām, kuru pamatā ir Intel procesori Itanium 2, Intel Xeon un Intel Pentium 4 līdz 40%, salīdzinot ar esošajiem citu ražotāju kompilatoriem, jo ​​tiek izmantotas tādas šo procesoru iespējas kā Hyper-Threading tehnoloģija.

    Atšķirības, kas saistītas ar šīs kompilatoru grupas koda optimizāciju, ietver steka izmantošanu peldošā komata operāciju veikšanai, starpprocedūru optimizāciju (IPO), optimizāciju saskaņā ar lietojumprogrammas profilu (Profila vadītā optimizācija (PGO), datu iepriekšēju ielādi kešatmiņā () Datu iepriekšēja ielāde), kas ļauj izvairīties no latentuma, kas saistīts ar piekļuvi atmiņai, Intel procesoru raksturīgo funkciju atbalsts (piemēram, paplašinājumi straumēšanas datu apstrādei Intel Streaming SIMD Extensions 2, kas raksturīgi Intel Pentium 4), automātiska koda izpildes paralēlizācija, lietojumprogramma. izveide, darbojas uz vairākiem dažādi veidi procesori, optimizējot vienu no tiem, rīki turpmākā koda “paredzēšanai” (zaru prognozēšana), paplašināts atbalsts darbam ar izpildes pavedieniem.

    Ņemiet vērā, ka Intel kompilatorus izmanto tādos pazīstamos uzņēmumos kā Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Saskaņā ar neatkarīgu testēšanu, ko veikuši vairāki uzņēmumi, Intel kompilatoru veiktspēja ir ievērojami augstāka nekā citu ražotāju kompilatoru veiktspēja (skatiet, piemēram, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf .pdf).

    Tālāk mēs apskatīsim dažas funkcijas jaunākās versijas Intel kompilatori galddatoriem un serverim operētājsistēmas.

    Kompilatori Microsoft Windows platformai

    Intel C++ kompilators 7.1 operētājsistēmai Windows

    Intel C++ Compiler 7.1 ir šī gada sākumā izlaists kompilators, kas nodrošina ļoti optimizētu kodu Intel Itanium, Intel Itanium 2, Intel Pentium 4 un Intel Xeon procesoriem, kā arī Intel Pentium M procesoram, izmantojot Intel Centrino tehnoloģiju un paredzēts lietošanai mobilās ierīces.

    Norādītais kompilators ir pilnībā savietojams ar izstrādes rīkiem Microsoft Visual C++ 6.0 un Microsoft Visual Studio .NET: to var iebūvēt attiecīgajās izstrādes vidēs.

    Šis kompilators atbalsta ANSI un ISO C/C++ standartus.

    Intel Fortran Compiler 7.1 operētājsistēmai Windows

    Intel Fortran Compiler 7.1 for Windows, kas arī tika izlaists šī gada sākumā, ļauj izveidot optimizētu kodu Intel Itanium, Intel Itanium 2, Intel Pentium 4 un Intel Xeon, Intel Pentium M procesoriem.

    Šis kompilators ir pilnībā savietojams ar Microsoft Visual C++ 6.0 un Microsoft Visual Studio .NET izstrādes rīkiem, tas ir, to var iebūvēt attiecīgajās izstrādes vidēs. Turklāt šis kompilators ļauj izstrādāt 64 bitu lietojumprogrammas operētājsistēmām, kas darbojas ar Itanium/Itanium 2 procesoriem, izmantojot Microsoft Visual Studio 32 bitu Pentium procesorā, izmantojot 64 bitu Intel Fortran Compiler. Atkļūdojot kodu, šis kompilators ļauj izmantot atkļūdotāju, lai Microsoft platformas.TĪKLS.

    Ja jums ir instalēts Compaq produkts, oriģinālā Intel Fortran Compiler 7.1 vietā var izmantot Visual Fortran 6.6, jo šie kompilatori ir saderīgi līmenī. avota kods.

    Intel Fortran Compiler 7.1 for Windows ir pilnībā savietojams ar ISO Fortran 95 standartu un atbalsta tādu lietojumprogrammu izveidi un atkļūdošanu, kas satur kodu divās valodās: C un Fortran.

    Kompilatori Linux platformai

    Intel C++ kompilators 7.1 operētājsistēmai Linux

    Vēl viens kompilators, kas tika izlaists gada sākumā, Intel C++ Compiler 7.1 for Linux, ļauj sasniegt augstu koda optimizācijas pakāpi Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M procesoriem.Šis kompilators ir pilnībā saderīgs ar GNU C kompilatoru pie pirmkoda un objektu moduļiem, kas ļauj bez papildu izmaksām migrēt uz to lietojumprogrammas, kas izveidotas, izmantojot GNU C. Intel C++ kompilators atbalsta C++ ABI (papildinājums Linux kodolam, kas ļauj palaist zem Linux vadība apkopots kods citām platformām, piemēram, agrīnajām SCO operētājsistēmām, agrīnās versijas Sun Solaris utt.), kas nozīmē pilnīgu saderību ar gcc 3.2 kompilatoru binārā koda līmenī. Visbeidzot, izmantojot Intel C++ Compiler 7.1 for Linux, jūs pat varat pārkompilēt Linux kodolu, veicot dažas nelielas izmaiņas tā avota kodā.

    Intel Fortran Compiler 7.1 operētājsistēmai Linux

    Intel Fortran Compiler 7.1 for Linux ļauj izveidot optimizētu kodu procesoriem Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Šis kompilators ir pilnībā savietojams ar Compaq Visual Fortran 6.6 kompilatoru avota koda līmenī, kas ļauj jums pārkompilēt lietojumprogrammas, izmantojot to, kas izveidotas, izmantojot Compaq Visual Fortran, tādējādi palielinot to veiktspēju.

    Turklāt norādītais kompilators ir saderīgs ar tādām izstrādātāju izmantotajām utilītprogrammām kā emacs redaktors, gdb atkļūdotājs un make Application build utilīta.

    Tāpat kā šī kompilatora Windows versija, arī Intel Fortran Compiler 7.1 for Linux ir pilnībā savietojams ar ISO Fortran 95 standartu un atbalsta tādu lietojumprogrammu izveidi un atkļūdošanu, kas satur kodu divās valodās: C un Fortran.

    Īpaši jāuzsver, ka nozīmīgu ieguldījumu sarakstā iekļauto Intel kompilatoru izveidē sniedza speciālisti no Intel Krievijas programmatūras izstrādes centra Ņižņijnovgorodā. Vairāk Detalizēta informācija Informāciju par Intel kompilatoriem var atrast Intel tīmekļa vietnē www.intel.com/software/products/.

    Šī raksta otrā daļa būs veltīta Intel kompilatoriem, kas veido lietojumprogrammas mobilajām ierīcēm.

    Īstu uzlaušanas piemēri: Intel C++ 7.0 kompilators — arhīvs WASM.RU

    ...Intel C++ 7.0 kompilators tika lejupielādēts vēlu vakarā, apmēram piecos no rīta. Man ļoti gribējās gulēt, bet mani plosīja arī ziņkāre: vai aizsardzība ir nostiprināta vai nav. Nolēmis, ka līdz brīdim, kad izdomāšu aizsardzību, kuru es joprojām neaizmigšu, es atvēru jauna konsole, un sistēmas mainīgo TEMP un TMP atiestatīšana uz direktoriju C:\TEMP, kas steigā ierakstīti nepiedienīgi garš vārds instalētājs W_CC_P_7.0.073.exe komandrindā (nepieciešamība iestatīt mainīgos TEMP un TMP ir izskaidrojama ar to, ka operētājsistēmā Windows 2000 tie pēc noklusējuma norāda uz ļoti dziļi ligzdotu direktoriju, bet Intel C++ instalētājs - un ne tikai tas - neatbalsta tik liela izmēra ceļus).

    Uzreiz kļuva skaidrs, ka aizsardzības politika ir radikāli pārskatīta un tagad licences esamība tika pārbaudīta jau programmas instalēšanas stadijā (versijā 5.x instalēšana tika veikta bez problēmām). Labi, mēs dodam komandu dir un apskatām saturu, ar ko mums tagad ir jācīnās:

      Mapes C:\TMP\IntelC++Compiler70 saturs

      17.03.2003 05:10

      html

      17.03.2003 05:11

      x86

      17.03.2003 05:11

      Itanium

      17.03.2003 05:11

      piezīmes

      06/05/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 faili 2 519 238 baiti

      6 mapes 886 571 008 baiti bez maksas

    Jā! Instalācijas programma setup.exe aizņem tikai četrdesmit nepāra kilobaitus. Ļoti labi! Maz ticams, ka šādā apjomā jūs varat paslēpt nopietnu aizsardzību, un pat ja tā, šis mazais fails nav tā vērts, lai to analizētu kopumā - līdz pēdējam izjaukšanas programmas saraksta baitam. Tomēr tas nav fakts drošības kods kas atrodas tieši setup.exe, tas var atrasties arī citā vietā, piemēram... ChkLic.dll/ChkLic.exe, kas kopā aizņem nedaudz mazāk par septiņsimt kilobaitu. Pagaidiet, kas ir ChkLic? Vai tas ir saīsinājums no Check License vai kā?! Hmm, Intel puišiem acīmredzot ir nopietnas problēmas ar humora izjūtu. Būtu labāk, ja viņi godīgi nosauktu šo failu "Hack Me"! Labi, spriežot pēc skaļuma, ChkLic ir tas pats FLEX lm, un mēs jau esam ar to saskārušies (skatiet "Intel C++ 5.0 Compiler"), un mums ir aptuvens priekšstats par to, kā to izjaukt.

    Mēs dodam komandu “dumpbin /EXPORTS ChkLic.dll”, lai pārbaudītu eksportētās funkcijas un... stingri turamies pie Klāva, lai nenokristu no krēsla:

      Faila ChkLic.dll dump

    1. Sadaļā ir ietverti šādi ChkLic.dll eksporta dati

      0 raksturlielumi

      3DB438B4 laika datuma zīmogs Pirm. oktobris 21 21:26:12 2002

    2. 1 funkciju skaits

      1 vārdu skaits

      kārtas mājiens RVA nosaukums

      1 0 000010A0 _CheckValidLicense

    Sasodīts! Aizsardzība eksportē tikai vienu funkciju ar brīnišķīgo nosaukumu CheckValidLicense. “Brīnišķīgi” - jo funkcijas mērķis kļūst skaidrs no tās nosaukuma un kļūst iespējams izvairīties no rūpīgas demontāžas koda analīzes. Nu, viņi ir zaudējuši interesi... būtu labāk, ja viņi to eksportētu parastā veidā vai kā, vai vismaz nokristītu ar kaut kādu biedējošu nosaukumu, piemēram, DES Decrypt.

    ...sapņoju! Labi, atgriezīsimies pie mūsu aitām. Padomāsim loģiski: ja viss drošības kods ir koncentrēts tieši ChkLic.dll (un, spriežot pēc aizsardzības “eņģu” rakstura, tas tā patiešām ir), tad visa “aizsardzība” ir saistīta ar CheckValidLicense izsaukšanu no iestatīšanas. exe un pārbaudot tā atgriezto rezultātu. Tāpēc, lai “uzlauztu” pietiek tikai ar ChkLic.dll pazaudēšanu, liekot ChekValidLicense funkcijai vienmēr atgriezties... un, starp citu, ko tai vajadzētu atgriezties? Precīzāk: kāda tieši ir atgriešanas vērtība, kas atbilst sekmīgai licences pārbaudei? Nē, nesteidzieties izjaukt setup.exe, lai to noteiktu, jo iespējamie varianti vairs ne tik daudz: vai nu MELI, vai PATIESI. Vai jūs derat uz TRUE? Savā ziņā tas ir loģiski, bet, no otras puses: kāpēc mēs patiesībā nolēmām, ka funkcija CheckValidLicense atgriež tieši operācijas veiksmes karogu, nevis kļūdas kodu? Galu galā tam kaut kādā veidā ir jāmotivē kompilatora instalēšanas atteikuma iemesli: fails ar licenci netika atrasts, fails ir bojāts, licences derīguma termiņš ir beidzies un tā tālāk? Labi, mēģināsim atgriezt nulli, un, ja tas nedarbojas, mēs atgriezīsim vienu.

    Labi, piesprādzējies, iesim! Mēs palaižam HIEW, atveram failu ChkLic.dll (ja neatveras, trīs reizes atcerieties gophers, īslaicīgi kopējiet to saknē vai jebkurā citā direktorijā, kuras nosaukumā nav speciālo rakstzīmju, kas hiejam nepatīk) Pēc tam, atkal pievēršoties eksportēšanas tabulai, kas iegūta, izmantojot dumpbin, mēs nosakām funkcijas CheckValidLicense adresi (šajā gadījumā 010A0h) un caur “10A0” pārejam uz tās sākumu. Tagad izgriežam to “tiešraidē”, pārrakstot pāri vecais kods "XOR EAX, EAX/RETN 4". Kāpēc tieši "REN 4", nevis tikai "RET"? Jā, jo funkcija atbalsta stdcall konvenciju, ko varat uzzināt, apskatot tās epilogu HIEW"e ( vienkārši ritiniet uz leju izjaukšanas ierīces ekrānā, līdz satiekat RET).

    Pārbaudīsim... Strādā!!! Neskatoties uz licences trūkumu, uzstādītājs sāk instalēšanu, neuzdodot nekādus jautājumus! Tāpēc aizsardzība krita. Ak, mēs nevaram noticēt, ka viss ir tik vienkārši, un, lai nesēdētu stulbi skatoties uz monitoru, gaidot programmas instalēšanas procesa pabeigšanu, mēs izmantojam mūsu iecienītāko IDA disassembler vietnē setup.exe. Pirmā lieta, kas piesaista jūsu uzmanību, ir CheckValidLicense trūkums importēto funkciju sarakstā. Varbūt tas kaut kā palaiž failu ChkLic.exe? Mēģinām atrast atbilstošo saiti starp automātiski atpazītajām rindām: “~View aNames”, “ChkLic”... jā, rindas “Chklic.exe” nemaz nav, bet tiek atklāts “Chklic.dll”. Jā, es redzu, tas nozīmē, ka ChkLic bibliotēka tiek ielādēta, izmantojot tiešu saiti, izmantojot LoadLibrary. Un sekošana savstarpējai atsaucei to apstiprina:

      Teksts:0040175D push offset aChklic_dll ; lpLibFileName

      Teksts:00401762 zvaniet ds:LoadLibraryA

      Teksts:00401762 ; ielādējiet ChkLic.dll ^^^^^^^^^^^^^^^^^

      Teksts:00401762 ;

      Teksts:00401768 mov esi, eax

      Teksts:0040176A push offset a_checkvalidlic ; lpProcName

      Teksts:0040176F push esi ; hModulis

      Teksts:00401770 zvaniet ds:GetProcAddress

      Teksts:00401770 ; iegūstiet funkcijas CheckValidLicense adresi

      Teksts:00401770 ;

      Teksts:00401776 cmp esi, ebx

      Teksts:00401778 jz loc_40192E

      Teksts:00401778 ; ja šādas bibliotēkas nav, izejiet no instalēšanas programmas

      Teksts:00401778 ;

      Teksts:0040177E cmp eax, ebx

      Teksts:00401780 jz loc_40192E

      Teksts:00401780 ; ja bibliotēkā šādas funkcijas nav, izejiet no instalācijas

      Teksts:00401780 ;

      Teksts:00401786 push ebx

      Teksts:00401787 zvaniet pa tālruni

      Teksts:00401787 ; izsauciet funkciju ChekValidLicense

      Teksts:00401787 ;

      Teksts:00401789 test eax, eax

      Teksts:0040178B jnz loc_4019A3

    Teksts:0040178 ; ja funkcija atgriezās no nulles, izejiet no instalēšanas programmas

    Neticami, šī šausmīgi primitīvā aizsardzība ir uzbūvēta tieši šādi! Turklāt pusmetra fails ChkLic.exe nemaz nav vajadzīgs! Un kāpēc bija vērts to vilkt no interneta? Starp citu, ja nolemjat saglabāt kompilatora izplatīšanu (uzmanību: es neteicu “izplatīt”!), tad, lai ietaupītu vietu diskā, ChkLic.* var izdzēst: vai nu dzēšot setup.exe, uz visiem laikiem atdalot to no piekļūstot tiem vai vienkārši izveidojot savu ChkLic.dll, eksportējot veidlapas stdcall funkciju CheckValidLicence: int CheckValidLicence(int some_flag) ( return 0;)

    Nu, kamēr mēs to visu apspriedām, instalētājs pabeidza kompilatora instalēšanu un veiksmīgi pabeidza savu darbu. Interesanti, vai sāksies kompilators vai viss jautrība tikai sākas? Mēs drudžaini ejam uz leju pa sazaroto apakšmapju hierarhiju, atrodam icl.exe, kas, kā jau varētu gaidīt, atrodas bin direktorijā, noklikšķiniet un... Kompilators, protams, nesākas, pamatojot to ar faktu, ka "icl: error: nevarēja izņemt FLEX lm licenci" , bez kuras viņš nevar turpināt darbu.

    Izrādās, Intel izmantoja daudzlīmeņu aizsardzību un pirmais līmenis izrādījās rupja aizsardzība pret muļķiem. Nu labi! Mēs pieņemam šo izaicinājumu un, pamatojoties uz mūsu iepriekšējo pieredzi, automātiski meklējam LMGR*.DLL failu kompilatora direktorijā. Bezjēdzīgi! Šoreiz te tāda faila nav, bet izrādās, ka icl.exe ir krietni pieņēmies svarā, pārsniedzot sešsimt kilobaitu atzīmi... Stop! Vai kompilatoru izstrādātāji nesasaistīja šo pašu FLEX lm ar statisko saiti? Redzēsim: operētājsistēmā Intel C++ 5.0 lmgr327.dll un icl.exe lielumu summa bija 598 KB, un tagad tikai icl.exe aizņem 684 KB. Ņemot vērā korekciju dabiskajam senils “aptaukošanos”, skaitļi ļoti labi sakrīt. Tātad, galu galā, FLEX lm! Ak, ak! Bet tagad bez simboliskiem funkciju nosaukumiem būs daudz grūtāk uzlauzt aizsardzību... Tomēr nekrītim panikā pirms laika! Padomāsim, tikai mierīgi! Maz ticams, ka izstrādes komanda pilnībā pārrakstīja visu kodu, kas mijiedarbojas ar šo “aploksnes” aizsardzību. Visticamāk, tā “uzlabošana” beidzās tikai ar izkārtojuma veida maiņu. Un ja tā, tad iespēja uzlauzt programmu joprojām ir lieliska!

    Atceroties, ka pēdējo reizi drošības kods atradās galvenajā funkcijā, mēs, noteikuši tā adresi, vienkārši iestatījām pārtraukuma punktu un, gaidot, kad atkļūdotājs uznirst, muļķīgi izsekojam kodu, pārmaiņus skatoties uz atkļūdotāju, pēc tam uz programmas izvadi. logs: vai tas ir parādījies Vai ir izteikts ziņojums? Tajā pašā laikā visas nosacītās pārejas, ar kurām sastopamies, atzīmējam uz atsevišķa papīra (vai arī ieliekam savā atmiņā, ja vēlaties), neaizmirstot norādīt, vai katra nosacītā pāreja tika veikta vai nē... Stop! Mēs ar jums par kaut ko tērzējām, taču jau ir parādījusies aizskaroša ziņa! labi labi! Apskatīsim, kāda nosacītā pāreja tam atbilst. Mūsu ieraksti liecina, ka pēdējais konstatētais lēciens bija JNZ nosacījuma lēciens, kas atrodas adresē 0401075h un "reaģē" uz sub_404C0E atgriezto rezultātu:

  • Teksts:0040107F loc_40107F: ; KODA XREF: _galvenais+75^j

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

    Teksts:00401084 mov edx, 21h

    Teksts:00401089 zvaniet sub_404C0E

    Teksts:0040108E test eax, eax

    Teksts:00401090 jnz short loc_40109A

    Acīmredzot sub_404C0E ir pati aizsargājošā procedūra, kas pārbauda licences esamību. Kā viņu piemānīt? Nu, ir daudz iespēju... Pirmkārt, jūs varat pārdomāti un skrupulozi analizēt sub_404C0E saturu, lai uzzinātu, ko tieši tā pārbauda un kā tieši tā pārbauda. Otrkārt, jūs varat vienkārši aizstāt JNZ short loc_40107F ar JZ short loc_40107F vai pat NOP, NOP. Treškārt, atgriešanas rezultātu pārbaudes komandu TEST EAX, EAX var pārvērst par nulles komandu: XOR EAX, EAX. Ceturtkārt, jūs varat likt pašam sub_404C0E pazust, lai tas vienmēr atgrieztu nulli. Es nezinu, kā jums, bet man visvairāk patika trešā metode. Mēs mainām divus baitus un palaižam kompilatoru. Ja aizsardzībā nav citu tās “licencēšanas” pārbaužu, programma darbosies un attiecīgi otrādi. (Kā atceramies, piektajā variantā bija divas šādas pārbaudes). Apbrīnojami, ka sastādītājs vairs nesūdzas un strādā!!! Patiešām, kā jau varēja gaidīt, tās izstrādātāji aizsardzību nemaz nepastiprināja, bet, gluži pretēji, pat vājināja! Kriss Kasperskis

  • Tu neesi vergs!
    Slēgts izglītības kurss elites bērniem: "Patiesais pasaules iekārtojums."
    http://noslave.org

    Materiāls no Wikipedia - brīvās enciklopēdijas

    Intel C++ kompilators
    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).
    Tips
    Autors

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Izstrādātājs
    Izstrādātāji

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Uzrakstīts uz

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Interfeiss

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    operētājsistēma
    Interfeisa valodas

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Pirmais izdevums

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Aparatūras platforma
    Jaunākā versija
    Atbrīvošanas kandidāts

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Beta versija

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Alfa versija

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Testa versija

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Lasāmi failu formāti

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Ģenerētie failu formāti

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Valsts

    Lua kļūda modulī: Wikidata 170. rindā: mēģinājums indeksēt lauku "wikibase" (nulles vērtība).

    Licence

    Galvenās iezīmes:

    • Vektorizācija SSE, SSE2, SSE3, SSE4

    Kompilators atbalsta OpenMP 3.0 standartu paralēlu programmu rakstīšanai. Ietver arī OpenMP modifikāciju ar nosaukumu Cluster OpenMP, ar kuru jūs varat palaist lietojumprogrammas, kas rakstītas saskaņā ar OpenMP klasteros, izmantojot MPI.

    Intel C++ Compiler izmanto priekšgalu (kompilatora daļu, kas parsē kompilēto programmu) no Edison Design Group. To pašu priekšgalu izmanto SGI MIPSpro, Comeau C++ un Portland Group kompilatori.

    Šis kompilators tiek plaši izmantots SPEC CPU etalonu apkopošanai.

    Ir 4 produktu sērijas no Intel, kas satur kompilatoru:

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

    Kompilatora Linux versijas trūkumi ietver daļēju nesaderību ar C valodas GNU paplašinājumiem (to atbalsta GCC kompilators), kas var radīt problēmas dažu programmu kompilēšanas laikā.

    Eksperimentālās iespējas

    Tika publicētas šādas kompilatora eksperimentālās versijas:

    • Intel STM Compiler Prototype Edition, datēts ar 2007. gada 17. septembri. Programmatūras transakciju atmiņas (STM) atbalsts. Izlaists operētājsistēmai Linux un Windows, tikai IA-32 (x86 procesoriem);
    • Intel Concurrent Collections C/C++ 0.3 no 2008. gada septembra. Satur mehānismus, kas atvieglo paralēlu C++ programmu rakstīšanu.

    Pamata karogi

    Windows Linux, MacOSX Apraksts
    /Od -O0 Atspējot optimizāciju
    /O1 -O1 Optimizējiet, lai samazinātu izpildāmā faila lielumu
    /O2 -O2 Optimizēt ātrumam. Iekļautas dažas optimizācijas
    /O3 -O3 Iespējot visas optimizācijas no O2. Veiciet arī intensīvas cikla optimizācijas
    /Oip - Ak Iespējot katra faila starpprocedūru optimizāciju
    /Oipo -Oipo Iespējot globālo starpprocedūru optimizāciju
    /QxO -xO Atļaut izmantot SSE3, SSE2 un SSE paplašinājumus jebkura uzņēmuma ražotajiem procesoriem
    / ātri - ātri "Ātrais režīms". Atbilst opcijām "/O3 /Qipo /QxHost /no-prec-div" operētājsistēmā Windows un "-O3 -ipo -static -xHOST -no-prec-div" operētājsistēmā Linux. Lūdzu, ņemiet vērā, ka karodziņš “-xHOST” nozīmē optimizāciju procesoram, kurā darbojas kompilators.
    /Qprof-gen -prof_gen Izveidojiet instrumentētu programmas versiju, kas apkopos veiktspējas profilu
    /Qprof-use -prof_use Izmantojiet profila informāciju no programmu palaišanas, kas apkopota ar karogu prof_gen.

    Uzrakstiet atsauksmi par rakstu "Intel C++ kompilators"

    Piezīmes

    Skatīt arī

    Saites

    Izvilkums, kas raksturo Intel C++ kompilatoru

    Un vēl, viņa atgriezās pēdējo reizi redzēt Balto Magu... Savu vīru un patiesāko draugu, kuru viņa nekad nevarēja aizmirst. Savā sirdī viņa viņam piedeva. Bet, par lielu nožēlu, viņa nevarēja viņam atnest Magdalēnas piedošanu... Tātad, kā redzi, Izidora, lielā kristiešu fabula par “piedošanu” ir tikai bērnišķīgi meli naivajiem ticīgajiem, lai viņi varētu viņiem ļaut. darīt jebkuru Ļaunumu, zinot, ka neatkarīgi no tā, ko viņi darītu, viņiem galu galā tiks piedots. Bet piedot var tikai to, kas patiesi ir piedošanas cienīgs. Cilvēkam ir jāsaprot, ka viņam ir jāatbild par jebkuru izdarīto Ļaunumu... Un nevis kāda noslēpumaina Dieva priekšā, bet gan paša priekšā, piespiežot sevi nežēlīgi ciest. Magdalēna nepiedeva Vladykam, lai gan viņa viņu ļoti cienīja un patiesi mīlēja. Tāpat kā viņa nespēja mums visiem piedot Radomira briesmīgo nāvi. Galu galā VIŅA saprata labāk nekā jebkurš cits - mēs būtu varējuši viņam palīdzēt, mēs būtu varējuši viņu izglābt no nežēlīgas nāves... Bet mēs to negribējām. Uzskatot Baltā Magusa vainu par pārāk nežēlīgu, viņa lika viņam dzīvot ar šo vainu, neaizmirstot to ne mirkli... Viņa negribēja viņam piešķirt vieglu piedošanu. Mēs viņu vairs nekad neredzējām. Tāpat kā viņi nekad nav redzējuši savus mazuļus. Caur vienu no sava tempļa bruņiniekiem - mūsu burvi - Magdalēna nodeva atbildi Vladikam uz viņa lūgumu atgriezties pie mums: "Saule nelec divreiz vienā dienā... Jūsu pasaules prieks (Radomir) nekad neatgriezīsies pie tevis, tāpat kā es neatgriezīšos pie tevis un es... Es atradu savu TICĪBU un savu PATIESĪBU, viņi ir DZĪVI, bet tavējie ir MIRUSI... Apraud savus dēlus - viņi tevi mīlēja. Es nekad tev nepiedošu viņu nāvi, kamēr būšu dzīvs. Un lai tava vaina paliek tev. Varbūt kādreiz viņa tev atnesīs Gaismu un Piedošanu... Bet ne no manis. Magusa Jāņa galva netika atvesta uz Meteoru tā paša iemesla dēļ - neviens no Tempļa bruņiniekiem negribēja atgriezties pie mums... Mēs viņus pazaudējām, tāpat kā ne reizi vien esam zaudējuši daudzus citus, kuri nevēlējās saprast un pieņemt mūsu upurus... Kas darīja tāpat kā jūs - viņi aizgāja, nosodot mūs.
    Man galva griezās!.. Kā izslāpis, remdējot savu mūžīgo izsalkumu pēc zināšanām, es kāri uzsūcu apbrīnojamās informācijas plūsmu, ko dāsni dāvāja Ziemeļi... Un vēlējos daudz vairāk!.. Gribēju zināt visu, lai beigas. Tā bija svaiga ūdens elpa tuksnesī, kuru apdedzis sāpes un nepatikšanas! Un es nevarēju saņemties ar to...
    – Man ir tūkstošiem jautājumu! Bet laika vairs neatliek... Ko man darīt, Ziemeļ?..
    - Jautājiet, Izidora!.. Jautājiet, es mēģināšu tev atbildēt...
    – Saki, Sever, kāpēc man šķiet, ka šajā stāstā ir apvienoti divi dzīvesstāsti, savijušies ar līdzīgiem notikumiem, un tie tiek pasniegti kā viena cilvēka dzīve? Vai arī man nav taisnība?
    – Jums ir pilnīga taisnība, Isidora. Kā jau teicu iepriekš, “šīs pasaules spēki”, kas radīja viltus cilvēces vēsturi, Kristus patiesajai dzīvei “uzvilka” ebreju pravieša Jozuas svešo dzīvi, kurš dzīvoja pirms pusotra tūkstoša gadu ( no Ziemeļu stāsta laikiem). Un ne tikai viņš pats, bet arī viņa ģimene, viņa radinieki un draugi, viņa draugi un sekotāji. Galu galā tā bija pravieša Jozuas sieva, ebreju Marija, kurai bija māsa Marta un brālis Lācars, viņa mātes Marijas Jakobes māsa un citi, kas nekad nebija Radomira un Magdalēnas tuvumā. Tāpat kā viņiem blakus nebija citu "apustuļu" - Pāvila, Mateja, Pētera, Lūkas un pārējie...
    Tā bija pravieša Jozua ģimene, kas pirms pusotra tūkstoša gadu pārcēlās uz Provansu (ko tajos laikos sauca par Transalpu Galliju), uz Grieķijas pilsētu Massalia (mūsdienu Marseļa), jo Massalia tajā laikā bija “vārti” starp Eiropu un Āziju, un tas bija vienkāršākais veids visiem “vajātajiem”, lai izvairītos no vajāšanām un nepatikšanām.



    
    Tops