Intel компиляторлары. Неліктен жаңа компиляторлар қажет болды

Intel C++ және Fortran компиляторлары және MKL кітапханасы

Linux үшін GNU компиляторлары стандартымен қатар NIVT есептеу кешенінің кластерлеріне Intel C++ және Fortran компиляторлары орнатылған. Қазіргі уақытта (2006 жылдың басы) 9.1 нұсқасының компиляторлары барлық кластерлерде орнатылған. Бұл бет осы компиляторлардың ең маңызды опциялары мен параметрлерін, сондай-ақ олардың GNU компиляторларынан негізгі айырмашылықтарын сипаттауға арналған. Бұл бет негізінен ММУ Ғылыми-конструкторлық есептеу орталығының кластерлерінің пайдаланушыларына арналған, бірақ ол басқа орыстілді пайдаланушылар үшін де пайдалы болуы мүмкін. Ол IA-64 платформасын құрастыруға қатысты мәселелерді қамтымайды.

Сондай-ақ, барлық кластерлерде Intel кітапханасы орнатылған. Ядро математикалық кітапханасы(MKL) 8.0.2 нұсқасы. Кітапхана /usr/mkl каталогында орналасқан. lib каталогында 32, 64 және em64t ішкі каталогтары қолжетімді екенін ескеріңіз. Ant кластерінде em64t ішкі каталогындағы кітапханаларды, ал басқа кластерлерде 32 ішкі каталогындағы кітапханаларды пайдалану керек Барлық қажетті құжаттама мен мысалдарды /usr/mkl/doc каталогынан алуға болады.

Неліктен жаңа компиляторлар қажет?

Жаңа компиляторларға деген қажеттілік негізінен а) Fortran 90-да бағдарламалауды қолдау, сонымен қатар б) Fortran бағдарламаларын g77 компиляторымен қамтамасыз етуден күштірек оңтайландыру, C тіліне аударуды пайдаланып, содан кейін gcc көмегімен компиляциялау үшін туындады.

PGI (Portland Group) компиляторлары да бұл талаптарды қанағаттандырады, бірақ әзірлеуші ​​компания оларды Ресейге жеткізуден бас тартты.

Қалай пайдалануға болады?

Intel компиляторлары командалармен шақырылады icc(C немесе C++), ICPC(C++) және iffort(Фортран 77/90). MPI бағдарламаларын құрастыруға және құруға арналған mpicc, mpiCC және mpif77 пәрмендері де Intel компиляторларын пайдалану үшін конфигурацияланған.

Сондай-ақ ол GNU компиляторларын mpigcc, mpig++ және mpig77 пәрмендерімен пайдалану мүмкіндігін сақтайды (Fortran 90 нұсқасына қолдау көрсетілмейді).

Файлдарды енгізу

Әдепкі бойынша кеңейтімі бар файлдар .cppЖәне .cxxС++ тіліндегі бастапқы мәтіндер, кеңейтімі бар файлдар болып саналады .c- C көзі және icpc компиляторы .c файлдарын C++ көзі ретінде де құрастырады.

Кеңейтімдері бар файлдар .f, .ftnЖәне .үшінФотран тіліндегі бастапқы мәтіндер, белгіленген белгілеулері және файлдары ретінде танылады .fppЖәне .Fқосымша Fortran препроцессоры арқылы беріледі. Кеңейтімдері бар файлдар .f90еркін формадағы Fortran 90/95 бастапқы коды болып саналады. Параметрлерді пайдаланып Fortran бағдарламаларын жазудың бекітілген немесе еркін түрін нақты орнатуға болады -FIЖәне -FRтиісінше.

Кеңейтімдері бар файлдар .s IA-32 ассемблер тілінің коды ретінде танылады.

Intel компиляторының техникалық сипаттамалары

Мұнда біз Intel компиляторларының сипаттамаларын ұсынамыз, себебі оларды әзірлеуші ​​пайдаланушы нұсқаулығында біздің кейбір түсініктемелерімізбен баяндайды.

  • Маңызды оңтайландыру
    шамасы, бұл кодты жоғары деңгейде оңтайландыруға қатысты, яғни. біріншіден, барлық дерлік компиляторлар азды-көпті сәтті орындайтын әртүрлі цикл түрлендірулері
  • Қалқымалы нүктені оңтайландыру
    шамасы, бұл, ең алдымен, аппараттық деңгейде іске асырылатын командаларды максималды пайдалануды білдіреді
  • Процедуралық оңтайландырулар
    анау. тек нақты функциялардың кодына әсер ететін әдеттегі оңтайландырудан айырмашылығы, бүкіл бағдарламаны жаһандық оңтайландыру
  • Профиль негізіндегі оңтайландыру
    анау. бағдарламаны сынақ режимінде іске қосу, жиі қолданылатын функциялар ішінде белгілі бір код фрагменттерінің өту уақыты туралы деректерді жинау, содан кейін бұл деректерді оңтайландыру үшін пайдалану мүмкіндігі
  • Pentium III процессорларындағы SSE нұсқаулар жинағын қолдау
    Ескерту: есептеу тапсырмалары үшін SSE2 нұсқаулары көбірек қызығушылық тудырады, яғни. 64-биттік нақты сандардағы векторлық нұсқаулар, бірақ олар тек Pentium 4 процессорларында ғана қолдау көрсетеді, олар бізде әлі жоқ.
  • Автоматты векторизация
    анау. компилятор автоматты түрде енгізетін SSE және SSE2 нұсқауларын пайдалану арқылы қайтадан
  • SMP жүйелерінде бағдарламалау үшін OpenMP қолдауы
    Ескерту: кластерде MPI интерфейсін басым түрде пайдалану ұсынылады; OpenMP-ті кластерде кеңінен қолдану күтілмейді және мұндай эксперименттер әлі жүргізілген жоқ; бірақ ортақ жад үшін параллельденген кітапханаларды (BLAS, т.б.) пайдалану мағынасы бар шығар.
  • Деректерді алдын ала алу
    анау. біраз уақыттан кейін қажет болатын жадтан деректер кэшіне алдын ала жүктеу пәрмендерін пайдалану
  • Әртүрлі процессорларға арналған «жоспарлау» коды
    анау. артықшылығын пайдалануға мүмкіндік беретін бір орындалатын файлда әртүрлі процессорлар үшін кодты жасау мүмкіндігі соңғы процессорларбұрынғы процессорлармен бағдарламалардың екілік үйлесімділігін сақтай отырып, олар бойынша ең жоғары өнімділікке қол жеткізу; Біздің кластерімізде бұл әлі өзекті емес, өйткені. тек Pentium III процессорлары пайдаланылады, ал кластерде құрастырылған бағдарламалар басқа машиналарда тасымалданбайды және іске қосылмайды.

Негізгі компилятор опциялары

Ең қызықтысы, әрине, кодты оңтайландыру опциялары. Опциялардың көпшілігі C++ және Fortran компиляторларына ортақ. Көбірек егжей-тегжейлі сипаттамаағылшын пайдаланушы нұсқаулығындағы опциялар.

Оңтайландыру деңгейлері
ОпцияСипаттама
-O0Оңтайландыруды өшіреді
-O1 немесе -O2Жылдамдық үшін негізгі оңтайландыру. Кітапхана функцияларын кірістірілген кірістіруді өшіреді. C++ компиляторы үшін бұл опциялар бірдей оңтайландыруды береді, Fortran компиляторы үшін -O2 опциясы жақсырақ, өйткені циклдарды әлі де шешуді қамтиды.
-O3Қуатты оңтайландырулар, соның ішінде цикл түрлендірулері, деректерді алдын ала алу, OpenMP пайдалану. Кейбір бағдарламалар жақсырақ өнімділікке кепілдік бермеуі мүмкін -O2. Векторизация опцияларымен бірге пайдалану мағынасы бар -xKЖәне -xW.
-unroll[n]Ілмектерді n ретке дейін ашуды қосады.
Арнайы процессорға арналған оңтайландырулар
ОпцияСипаттама
-tpp6Penitum Pro, Pentium II және Pentium III процессорлары үшін оңтайландыру
-tpp7Penitum 4 процессорлары үшін оңтайландыру (бұл опция IA-32 компиляторы үшін әдепкі бойынша қосылған)
-хМPentium MMX, Pentium II және одан кейінгі процессорларға тән MMX кеңейтімдерін пайдаланып код жасау
-xKPentium III процессорларына тән SSE кеңейтімдерін пайдалану арқылы код жасау
-xWPentium 4 процессорларына тән SSE2 кеңейтімдерін қолданып код жасау
Процедуралық оңтайландыру
-ipБір файл ішінде процедурааралық оңтайландыруды қосады. Опцияны көрсетсеңіз -ip_no_inlining, содан кейін функцияларды кірістірілген кірістіру өшіріледі.
-ipoӘртүрлі файлдар арасында процедурааралық оңтайландыруды қосады
Профильдерді пайдалану арқылы оңтайландырулар
-prof_genПрофильдеу үшін пайдаланылатын «профильдеу» коды жасалады, яғни. бағдарламадағы белгілі бір орындардың өту жиілігі туралы мәліметтерді жинау
-prof_useОңтайландыру профильдеу сатысында алынған деректер негізінде орындалады. Оны процедурааралық оңтайландыру опциясымен бірге пайдалану мағынасы бар -ipo.
SMP жүйелері үшін параллелизация
-openmpOpenMP 2.0 қолдауын қосады
-параллельЦиклдерді автоматты параллелизациялауды қосады

Өнімділік

Ixbt.com сайтында жарияланған SPEC CPU2000 эталондық нәтижелеріне сәйкес, Intel компиляторларының 6.0 нұсқасы gcc компиляторларының 2.95.3, 2.96 және 3.1 нұсқаларынан дерлік барлық жерде және PGI 4.0.2 нұсқасынан асып түсті. Бұл сынақтар 2002 жылы Pentium 4/1,7 ГГц процессоры және RedHat Linux 7.3 бар компьютерде жүргізілді.

Polyhedron жүргізген сынақтарға сәйкес, Intel Fortran компиляторының 7.0 нұсқасы Linux (Absoft, GNU, Lahey, NAG, NAS, PGI) үшін басқа Fortran 77 компиляторларымен салыстырғанда барлық жерде дерлік жоғары болды. Тек кейбір сынақтарда Intel компиляторы Absoft, NAG және Lahey компиляторларына аздап жеңіледі. Бұл сынақтар Pentium 4/1,8 ГГц процессоры және Mandrake Linux 8.1 операциялық жүйесі бар компьютерде жүргізілді.

Intel компиляторларының 9.1 нұсқасы да gcc компиляторларынан асып түседі және Absoft, PathScale және PGI-мен салыстырылатын өнімділікті көрсетеді.

Бізге компиляторды таңдаудың (GCC немесе Intel) және оңтайландыру опцияларының олардың нақты мәселелерімен жұмыс жылдамдығына әсері туралы деректерді жіберетін пайдаланушылар мен оқырмандарға алғыс айтамыз.

Кітапханалар

C компиляторы GNU жобасы әзірлеген жұмыс уақыты кітапханасын пайдаланады ( libc.a).

Келесі кітапханалар Intel C++ компиляторымен бірге жеткізіледі:

  • libcprts.a- Dinkumware әзірлеген C++ жұмыс уақытының кітапханасы.
  • libcxa.a- Intel компаниясының C++ әзірлеуіне арналған қосымша жұмыс уақытының кітапханасы.
  • libimf.a- Intel әзірлеген математикалық функциялар кітапханасы, ол тригонометриялық, гиперболалық, экспоненциалды, арнайы, күрделі және басқа функциялардың оңтайландырылған және жоғары дәлдікпен жүзеге асырылуын қамтиды (толығырақ ақпаратты функциялар тізімін қараңыз).
  • libirc.a- процессорға байланысты профильдеу (PGO) және «диспетчерлік» кодты орындау уақытын қолдау (жоғарыдан қараңыз).
  • libguide.a- OpenMP енгізу.

Бұл тізімде статикалық кітапханалар бар, бірақ олардың көпшілігі үшін динамикалық кітапханалар да бар, яғни. іске қосу кезінде қосылған, опциялар ( .сондықтан).

Келесі кітапханалар Fortran компиляторымен қамтамасыз етілген: libCEPCF90.a, libIEPCF90.a, libintrins.a, libF90.a, libimf.a математикалық функциялар кітапханасы да қолданылады.

Орындалатын файлды құру

Кітапханаларды статикалық (құрастыру уақытында) немесе динамикалық (бағдарламаны іске қосу уақытында) байланыстыруға болады. Динамикалық тәсіл орындалатын файлдың көлемін азайтуға мүмкіндік береді, ол жадтағы кітапхананың бірдей көшірмесін ортақ пайдалануға мүмкіндік береді, бірақ ол үшін бағдарламалар іске қосылатын әрбір түйінге, пайдаланылған файлдардың толық жиынтығын орнату қажет. динамикалық кітапханалар.

Осылайша, егер сіз Intel компиляторын Linux құрылғыңызға орнатқан болсаңыз және құрастырылған екілік файлдарды басқа машиналарда іске қосқыңыз келсе, статикалық құрастыруды (бұл оңайырақ) пайдалануыңыз керек немесе Intel динамикалық кітапханаларын осы машиналарға көшіру керек (әдетте компьютерден /opt/intel /compiler70/ia32/lib) сияқты каталогты /etc/ld.so.conf файлында тізімделген каталогтардың біріне ауыстырыңыз және GNU/Linux динамикалық кітапханаларының бірдей жинағы осы машиналарда орнатылғанына көз жеткізіңіз.

Әдепкі бойынша, барлық Intel әзірлеу кітапханалары (libcxa.so файлынан басқа) статикалық түрде байланысты және барлық Linux жүйелік кітапханалары мен GNU кітапханалары динамикалық түрде байланысты. Опциямен -статикалықассемблерді (байланыстырушыны) барлық кітапханаларды статикалық түрде қосуға мәжбүрлей аласыз (бұл дыбыс деңгейін арттырады орындалатын файл) және опцияны пайдалану -i_dynamicбарлық Intel әзірлеу кітапханаларын динамикалық түрде байланыстыруға болады.

Көру опциясын пайдаланып қосымша кітапханаларды қосқанда -кітапханаопциясын пайдалану қажет болуы мүмкін -l каталогыкітапханалар орналасқан жолды орнату үшін.

Параметрлермен -бстатикалықЖәне -Бдинамикалықкөрсетілген кітапханалардың әрқайсысы үшін динамикалық немесе статикалық сілтемені анық орнатуға болады пәрмен жолы.

Опциямен -cорындалатын файлды құрастыру өшірілген және тек компиляция (объектілік модульді генерациялау) орындалады.

Fortran және C-де модульдерді ортақ пайдалану

Fortran және C тілінде жазылған модульдерді ортақ пайдалану үшін объект модульдеріндегі процедуралардың атын, параметрді беруді және егер бар болса, ғаламдық айнымалыларға қол жеткізуді келісу керек.

Әдепкі бойынша, Intel Fortran компиляторы процедура атауларын кіші әріптермен жазады және аттың соңына астын сызуды қосады. C компиляторы функция атауларын ешқашан өзгертпейді. Осылайша, егер біз Fortran модулінен C тілінде жүзеге асырылған FNNAME функциясын немесе процедурасын шақырғымыз келсе, онда C модулінде оны fnname_ деп атаған жөн.

Fortran компиляторы опцияны қолдайды -nus [файл аты], бұл ішкі процедура атауларына астын сызуларды қосуды өшіруге мүмкіндік береді. Егер файл аты берілсе, онда бұл берілген файлда тізімделген процедура атаулары үшін ғана орындалады.

Әдепкі бойынша, Fortran-да параметрлер сілтеме бойынша беріледі, ал С тілінде олар әрқашан мән бойынша беріледі. Осылайша, C модулінен Fortran процедурасын шақырған кезде, біз нақты параметрлердің мәндерін қамтитын сәйкес айнымалыларға параметр көрсеткіші ретінде өтуіміз керек. Fortran модулінен шақыру қажет болатын функцияны Си тілінде жазғанда, біз формальды параметрлерді сәйкес типтерге көрсеткіш ретінде сипаттауымыз керек.

C модульдерінде Fortran модульдерінің ішінде анықталған ЖАЛПЫ блоктарды пайдалануға болады (толығырақ ақпаратты Intel Fortran компиляторының пайдаланушы нұсқаулығын, C және Fortran араластыру тарауын қараңыз).

Intel және GCC компиляторларын ортақ пайдалану

Intel C++ компиляторы шығарған C нысан модульдері GCC компиляторы және GNU C кітапханасы шығарған модульдермен үйлесімді. Осылайша, бұл модульдерді icc немесе gcc пәрмендері арқылы құрастырылған бір бағдарламада ортақ пайдалануға болады, бірақ Intel кітапханаларын дұрыс қосу үшін icc пайдалану ұсынылады.

Intel компиляторы GNU жобасы пайдаланатын және GCC компиляторы қолдайтын стандартты емес C тілінің бірқатар кеңейтімдерін қолдайды (бірақ олардың барлығы емес, толық ақпаратты осы жерден қараңыз).

Пайдаланушы нұсқаулығында C++ және Fortran тіліндегі нысан модульдерінің үйлесімділігі туралы ештеңе айтылмаған, шамасы, оған қолдау көрсетілмейді.

Стандарттарды қолдау

Linux үшін Intel C++ Compiler 7.0 ANSI/ISO C тіл стандартын (ISO/IEC 9899/1990) қолдайды. ANSI C стандартымен қатаң үйлесімділікті орнатуға болады ( -анси) немесе кеңейтілген ANSI C диалектісі ( -Ха). Опцияны пайдаланған кезде -c99

  • HTML пішіміндегі компиляторлық нұсқаулықтар (біздің серверде «онлайн» қол жетімді, бірақ Java тілін қолдауды қажет етеді)
    • Intel C++ компиляторының пайдаланушы нұсқаулығы.
    • Intel Fortran компиляторының пайдаланушы нұсқаулығы.
  • PDF форматындағы ағылшын тіліндегі компиляторлық нұсқаулықтар (Acrobat Reader қажет, PDF файлдарын компьютерге жүктеп алу керек)
    • Intel C++ компиляторының пайдаланушы нұсқаулығы: Intel C++ компиляторының пайдаланушы нұсқаулығы (1,3 МБ, 395 бет).
    • Intel Fortran компиляторының пайдаланушы нұсқаулығы: Intel Fortran компиляторының пайдаланушы нұсқаулығы (1,1 МБ, 285 бет).
    • Fortran бағдарламашысының анықтамасы: Intel Fortran бағдарламашысының анықтамасы (7 МБ, 566 бет).
    • Fortran кітапханаларының анықтамалық нұсқаулығы (9,5 МБ, 881 бет).
  • Intel қолданбасын жөндеуге арналған нұсқаулық.
  • SPEC CPU2000 сынақтарында компиляторды салыстыру (орыс тілінде ixbt.com сайтындағы мақала).
  • Polyhedron веб-сайты әртүрлі компиляторларды салыстыру нәтижелерін ұсынады.
  • Журналдың алдыңғы санында біз Intel VTune Performance Analyzer тобының өнімдерін - қолданбаларды әзірлеушілер арасында лайықты танымал және кодта анықтауға мүмкіндік беретін өнімділікті талдау құралдарын талқыладық. командалық қосымшалар, олар тым көп процессор ресурстарын пайдаланады, бұл әзірлеушілерге әлеуетті анықтауға және жоюға мүмкіндік береді тар жерлеркодтың ұқсас бөлімдерімен байланысты, осылайша қолданбаларды әзірлеу процесін жылдамдатады. Дегенмен, қолданбалардың өнімділігі көбінесе оларды әзірлеуде қолданылатын компиляторлардың қаншалықты тиімді екеніне және қандай мүмкіндіктерге байланысты екенін ескеріңіз. аппараттық құралолар машина кодын жасау кезінде пайдаланады.

    Windows және Linux үшін Intel Intel C++ және Intel Fortran компиляторларының соңғы нұсқалары мыналарға негізделген қолданбалардың өнімділігін арттырады. Intel процессорлары Itanium 2, Intel Xeon және Intel Pentium 4 осы процессорлардың Hyper-Threading технологиясы сияқты мүмкіндіктерін пайдалану есебінен басқа өндірушілердің бар компиляторларымен салыстырғанда 40% дейін.

    Компиляторлардың осы тобының кодты оңтайландыруымен байланысты айырмашылықтарға өзгермелі нүкте операцияларын орындау үшін стек пайдалану, процедурааралық оңтайландыру (Interprocedural Optimization, IPO), қолданба профиліне сәйкес оңтайландыру (Profile Guided Optimization, PGO), деректерді алдын ала жүктеу кіреді. жадқа қол жеткізуге байланысты кідірісті болдырмайтын кэш (Деректерді алдын ала алу), Intel процессорларының сипаттамалық мүмкіндіктерін қолдау (мысалы, Intel Pentium 4-ке тән Intel Streaming SIMD Extensions 2 ағынды деректерді өңдеуге арналған кеңейтімдер), кодты орындаудың автоматты параллелизациясы , қолданбаларды құру, бірнеше жұмыс істеу әртүрлі түрлеріолардың біреуін оңтайландыру кезінде процессорлар, кейінгі кодты «болжау» құралдары (тармақты болжау), орындау ағындарымен жұмыс істеуге кеңейтілген қолдау.

    Intel компиляторлары Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM сияқты белгілі компанияларда қолданылатынын ескеріңіз. Бірқатар компаниялардың тәуелсіз тестілеуінің негізінде Intel компиляторларының өнімділігі басқа өндірушілердің компиляторларынан айтарлықтай асып түседі (мысалы, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf қараңыз).

    Төменде біз кейбір мүмкіндіктерді қарастырамыз соңғы нұсқаларыЖұмыс үстелі мен серверге арналған Intel компиляторлары операциялық жүйелер.

    Microsoft Windows платформасына арналған компиляторлар

    Windows жүйесіне арналған Intel C++ Compiler 7.1

    Intel C++ Compiler 7.1 – осы жылдың басында шығарылған компилятор, ол Intel Itanium, Intel Itanium 2, Intel Pentium 4 және Intel Xeon процессорлары, сондай-ақ Intel Centrino технологиясын пайдаланатын Intel Pentium M процессоры үшін кодты оңтайландырудың жоғары деңгейіне қол жеткізеді. мобильді құрылғыларда пайдалануға арналған.

    Көрсетілген компилятор Microsoft Visual C++ 6.0 және Microsoft Visual Studio .NET әзірлеу құралдарымен толық үйлесімді: оны сәйкес әзірлеу орталарына салуға болады.

    Бұл компилятор ANSI және ISO C/C++ стандарттарын қолдайды.

    Windows жүйесіне арналған Intel Fortran Compiler 7.1

    Windows жүйесіне арналған Intel Fortran Compiler 7.1, сондай-ақ осы жылдың басында шығарылды, Intel Itanium, Intel Itanium 2, Intel Pentium 4 және Intel Xeon, Intel Pentium M процессорлары үшін оңтайландырылған кодты жасауға мүмкіндік береді.

    Бұл компилятор Microsoft Visual C++ 6.0 және Microsoft Visual Studio .NET әзірлеу құралдарымен толық үйлесімді, яғни оны сәйкес әзірлеу орталарына біріктіруге болады. Сонымен қатар, бұл компилятор Itanium/Itanium 2 процессорларында жұмыс істейтін операциялық жүйелер үшін 64 биттік қосымшаларды Microsoft Visual Studio арқылы 32 биттік форматта жасауға мүмкіндік береді. Pentium процессоры 64-биттік Intel Fortran компиляторын пайдалану. Кодты жөндеу кезінде бұл компилятор отладчикті пайдалануға мүмкіндік береді Microsoft платформалары.NET

    Егер сізде Compaq Visual Fortran 6.6 орнатылған болса, оны бастапқы Intel Fortran Compiler 7.1 компиляторының орнына пайдалануға болады, себебі бұл компиляторлар деңгейде үйлесімді. бастапқы код.

    Windows жүйесіне арналған Intel Fortran Compiler 7.1 нұсқасы ISO Fortran 95 стандартына толығымен сәйкес келеді және C және Fortran екі тілді қосымшаларды құруға және жөндеуге қолдау көрсетеді.

    Linux платформасына арналған компиляторлар

    Linux үшін Intel C++ Compiler 7.1

    Жылдың басында шығарылған тағы бір компилятор, Linux үшін Intel C++ Compiler 7.1, Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M процессорлары үшін кодты оңтайландырудың жоғары дәрежесіне қол жеткізуге мүмкіндік береді.Бұл компилятор толығымен деңгейіндегі GNU C компиляторымен бастапқы код пен нысан модульдерімен үйлесімді, бұл GNU C көмегімен жасалған қолданбаларды оған қосымша ақысыз көшіруге мүмкіндік береді. Intel C++ компиляторы C++ ABI (Linux ядросының қосымшасы) қолдайды. Linux басқаруШЫҰ ертерек операциялық жүйелері, Sun Solaris-тің ерте нұсқалары және т.б. сияқты басқа платформалар үшін құрастырылған код, бұл екілік деңгейде gcc 3.2 компиляторымен толық үйлесімділікті білдіреді. Ақырында, Linux үшін Intel C++ Compiler 7.1 көмегімен сіз тіпті бастапқы кодына бірнеше аздаған өзгерістер енгізіп, Linux ядросын қайта құрастыра аласыз.

    Linux үшін Intel Fortran Compiler 7.1

    Linux үшін Intel Fortran Compiler 7.1 компиляторы Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M процессорлары үшін оңтайландырылған кодты жасауға мүмкіндік береді.Бұл компилятор бастапқы код деңгейінде Compaq Visual Fortran 6.6 компиляторымен толық үйлесімді, мүмкіндік береді Compaq Visual Fortran көмегімен жасалған қолданбаларды қайта компиляциялауға болады, осылайша олардың өнімділігін арттырады.

    Бұған қоса, көрсетілген компилятор emacs өңдегіші, gdb отладкасы және make қолданбаны құрастыру утилитасы сияқты әзірлеушілер пайдаланатын утилиталармен үйлесімді.

    Осы компилятордың Windows нұсқасы сияқты, Linux үшін Intel Fortran Compiler 7.1 ISO Fortran 95 стандартымен толық үйлесімді және C және Fortran екі тіліндегі кодты қамтитын қолданбаларды жасауды және жөндеуді қолдайды.

    Тізімдегі Intel компиляторларын жасауға Нижний Новгородтағы Intel ресейлік бағдарламалық қамтамасыз етуді әзірлеу орталығының мамандары елеулі үлес қосқанын атап өткен жөн. Көбірек егжей-тегжейлі ақпарат Intel компиляторлары туралы ақпаратты Intel веб-сайтынан табуға болады: www.intel.com/software/products/ .

    Осы мақаланың екінші бөлімі мобильді құрылғыларға арналған қосымшаларды жасайтын Intel компиляторларына арналады.

    Нақты бұзу мысалдары: Intel C++ 7.0 компиляторы — WASM.RU мұрағаты

    …Intel C++ 7.0 компиляторы түнде, таңғы 5:00 шамасында жүктеп алынды. Мен керемет ұйықтағым келді, бірақ қызығушылық: қорғаныс күшейтілді ме, жоқ па, ол да жыртылды. Мен қорғаныспен айналыспайынша, мен әлі ұйықтамаймын деп шештім, мен аштым жаңа консоль, және TEMP және TMP жүйелік айнымалы мәндерін C:\TEMP каталогына қайта орнату, асығыс толтырылған әдепсіз ұзын атыорнатушы W_CC_P_7.0.073.exe пәрмен жолында (TEMP және TMP айнымалы мәндерін орнату қажеттілігі Windows 2000-де олар әдепкі бойынша өте терең кірістірілген каталогты көрсететінімен түсіндіріледі, ал Intel C ++ орнатушысы - емес. тек ол - мұндай үлкен жол өлшемін қолдамайды).

    Қорғау саясаты түбегейлі қайта қаралғаны бірден белгілі болды және енді лицензияның болуы бағдарламаны орнату кезеңінде тексерілді (5.x нұсқасында орнату еш қиындықсыз жүзеге асырылды). Жарайды, біз dir командасын береміз және қазір күресуіміз керек нәрсенің мазмұнын қарастырамыз:

      C:\TMP\IntelC++Compiler70 қалтасының мазмұны

      17.03.2003 05:10

      html

      17.03.2003 05:11

      x86

      17.03.2003 05:11

      Итания

      17.03.2003 05:11

      ескертпелер

      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 10: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 Crelnotes.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

      10.07.2001 12:56 184 setup.mwg

      19 файл 2 519 238 байт

      6 қалта 886 571 008 байт бос

    Аха! setup.exe орнатушысы тек қырық килобайтты алады. Өте жақсы! Мұндай көлемде елеулі қорғанысты жасыра алмайсыз, тіпті солай болса да, бұл кішкентай файлды толығымен талдау үшін ештеңе қажет емес - бөлшектеуіш тізімінің соңғы байтына дейін. Алайда, бұл сенімді емес қауіпсіздік коды setup.exe файлында дәл орналасқан, ол басқа жерде орналасуы мүмкін, мысалы ... ChkLic.dll / ChkLic.exe, олар бірге жеті жүз килобайттан сәл азды алады. Күте тұрыңыз, ChkLic дегеніміз не? Бұл чек лицензиясының қысқаша ма? Intel-тегі жігіттердің әзіл-оспақпен ауыр проблемалары бар екені анық. Олар бұл файлды «Мені Hack» деп атаса жақсы болар еді! Көлеміне қарағанда, ChkLic бірдей FLEX lm және біз оны кездестірдік («Intel C++ 5.0 Compiler» бөлімін қараңыз) және оны қалай бұзуға болатынын шамамен елестетіңіз.

    Экспортталған функцияларды тексеру үшін «dumpbin / EXPORTS ChkLic.dll» пәрменін береміз және ... орындықтан құлап қалмас үшін Клаваны мықтап ұстаңыз:

      ChkLic.dll файлының қоқысы

    1. Бөлімде ChkLic.dll үшін келесі экспорттар бар

      0 сипаттамалары

      3DB438B4 уақыт күні белгісі дүйсенбі 21 қазан 21:26:12 2002 ж.

    2. 1 функциялар саны

      1 атаулар саны

      реттік анықтама RVA атауы

      1 0 000010A0_CheckValidLicense

    Сайтан алғыр! Қорғау CheckValidLicense тамаша атауы бар бір ғана функцияны экспорттайды. «Керемет» - өйткені функцияның мақсаты оның атынан түсінікті болады және бөлшектеуші кодты мұқият талдауды болдырмауға болады. Олар барлық қызығушылықты қайтарып алды ... егер олар оны реттік немесе бір нәрсе түрінде экспорттаса немесе, кем дегенде, DES Decrypt сияқты қорқынышты атауды шоқындырса жақсы болар еді.

    ...армандаймын! Жарайды, біздің қойларға оралыңыз. Логикалық тұрғыдан ойланайық: егер барлық қауіпсіздік коды тікелей ChkLic.dll файлында орналасқан болса (және қауіпсіздіктің «топсалы» сипатына қарағанда, бұл дұрыс), онда барлық «қорғау» Setup.exe файлынан CheckValidLicense шақыруға келеді және ол қайтарған нәтижені тексеру. Сондықтан, «бұзу» үшін ChkLic.dll файлын түзету жеткілікті, бұл ChekValidLicense функциясын әрқашан қайтаруға мәжбүрлеу ... айтпақшы, ол нені қайтаруы керек? Дәлірек айтқанда: сәтті лицензиялық тексеруге сәйкес келетін қайтару мәні қандай? Жоқ, анықтау үшін setup.exe файлын бөлшектеуге асықпаңыз, себебі опцияларонша көп емес: не ЖАЛҒАН, не ШЫН. Сіз TRUE-ге бәс тігесіз бе? Бұл белгілі бір мағынада қисынды, бірақ екінші жағынан: неге біз CheckValidLicense функциясы қате кодын емес, дәл операцияның сәтті жалауын қайтарады деп шештік? Өйткені, ол компиляторды орнатудан бас тартудың себептерін қандай да бір түрде ынталандыруы керек: лицензиясы бар файл табылмады, файл зақымдалған, лицензияның мерзімі өтіп кеткен және т.б. Жарайды, нөлді қайтаруға тырысайық, егер бұл жұмыс істемесе, біз бірді қайтарамыз.

    Жарайды, байла, кеттік! Біз HIEW іске қосамыз, ChkLic.dll файлын ашамыз (егер ол ашылмаса, үш рет есте сақтаңыз, оны түбірге немесе атауында «y» ұнатпайтын арнайы таңбалары жоқ кез келген басқа каталогқа уақытша көшіріңіз. Сосын, қоқыс жәшігінің көмегімен алынған экспорттық кестеге қайта оралып, CheckValidLicense функциясының мекенжайын анықтаймыз (бұл жағдайда, 010A0h) және «10A0» арқылы біз оның басына өтеміз. Енді біз оны тірідей қиып аламыз, қайта жазамыз. ескі кодтың үстінде "XOR EAX, EAX / RETN 4. Неліктен "RET" емес, дәл "REN 4"? Иә, өйткені функция stdcall конвенциясын қолдайды, оны HIEW ішіндегі эпилогты қарау арқылы білуге ​​болады. e (жай ғана бөлшектеуші экранды RET қарсы алғанша төмен айналдырыңыз).

    Тексеруде... Бұл жұмыс істейді!!! Лицензияның жоқтығына қарамастан, орнатушы тым көп сұрақ қоймастан орнатуды бастайды! Осылайша қорғаныс құлады. О, біз бәрі соншалықты қарапайым екеніне сене алмаймыз және бағдарламаны орнату процесінің аяқталуын күтіп, мониторға қарап отырмау үшін біз setup.exe файлында сүйікті IDA бөлшектеу құралын орнаттық. Сіздің көзіңізге түсетін бірінші нәрсе - импортталған функциялар тізімінде CheckValidLicense жоқтығы. Мүмкін ол қандай да бір жолмен ChkLic.exe файлын іске қосады ма? Автоматты түрде танылған жолдар арасынан сәйкес сілтемені табуға тырысайық: «~View aNames», «ChkLic»... иә, «Chklic.exe» жолы мұнда мүлдем жоқ, бірақ «Chklic.dll» табылды. Иә, түсінемін, бұл ChkLic кітапханасы LoadLibrary арқылы анық сілтеме арқылы жүктелетінін білдіреді. Ал айқас сілтеме мұны растайды:

      Мәтін: 0040175D push offset aChklic_dll ; lpLibFileName

      Мәтін:00401762 қоңырау ds:LoadLibraryA

      Мәтін:00401762 ; ChkLic.dll жүктеңіз ^^^^^^^^^^^^^^^^^

      Мәтін:00401762 ;

      Мәтін:00401768 mov esi,eax

      Мәтін:0040176A push offset a_checkvalidlic ; lpProcName

      Мәтін:0040176F push esi ; hModule

      Мәтін: 00401770 қоңырау шалыңыз ds: GetProcAddress

      Мәтін:00401770 ; CheckValidLicense функциясының мекенжайын алыңыз

      Мәтін:00401770 ;

      Мәтін:00401776 cmp esi, ebx

      Мәтін:00401778 jz loc_40192E

      Мәтін:00401778 ; егер мұндай кітапхана болмаса, орнатушыдан шығыңыз

      Мәтін:00401778 ;

      Мәтін:0040177E cmp eax, ebx

      Мәтін:00401780 jz loc_40192E

      Мәтін:00401780 ; кітапханада мұндай функция болмаса, орнатудан шығыңыз

      Мәтін:00401780 ;

      Мәтін: 00401786 push ebx

      Мәтін: 00401787 қоңырау eax

      Мәтін:00401787 ; CheckValidLicense функциясын шақырыңыз

      Мәтін:00401787 ;

      Мәтін:00401789 тест eax, eax

      Мәтін:0040178B jnz loc_4019A3

    Мәтін:0040178 ; егер функция нөл емес қайтарылса, орнатушыдан шығыңыз

    Таңқаларлық, бұл қорқынышты қарабайыр қорғаныс дәл осылай салынған! Оның үстіне жарты метрлік ChkLic.exe файлы мүлдем қажет емес! Неліктен оны Интернеттен сүйреу керек болды? Айтпақшы, егер сіз компилятор дистрибуциясын сақтауды шешсеңіз (назар аударыңыз: «тарату» деп айтқан жоқпын!), онда дискілік кеңістікті сақтау үшін пішіннің CheckValidLicence stdcall функциясын экспорттайтын ChkLic. ChkLic.dll файлын жоюға болады: int CheckValidLicence(int some_flag) (қайтару 0;)

    Сонымен, біз мұның бәрін талқылап жатқанда, орнатушы компиляторды орнатуды аяқтап, жұмысын сәтті аяқтады. Компилятордың іске қосылуы қызықты ма, әлде ең қызығы тек қана басталады ма? Біз кірістірілген қалталардың тармақталған иерархиясы бойынша қызба төмен түсіп, күткендей, bin каталогында орналасқан icl.exe файлын табыңыз, басыңыз және ... Компилятор, әрине, «icl: қатесіне сілтеме жасай отырып, іске қосылмайды: FLEX lm лицензиясын тексере алмады» деген жазуынсыз ол жұмысын жалғастыра алмайды.

    Intel көп деңгейлі қорғанысты қолданды және бірінші деңгей ақымақтардан өрескел қорғаныс болып шықты. Сонымен! Біз бұл тапсырманы қабылдаймыз және алдыңғы тәжірибемізге сүйене отырып, компилятор каталогында LMGR*.DLL файлын автоматты түрде іздейміз. Пайдасыз! Бұл жолы бұл жерде мұндай файл жоқ, бірақ icl.exe алты жүз килобайт белгісінен асып, көп салмақ жинады ... Тоқта! Бірақ компиляторды әзірлеушілер осы FLEX lm-ді статикалық сілтемемен байланыстырды ма? Біз қараймыз: Intel C++ 5.0-де lmgr327.dll және icl.exe өлшемдерінің қосындысы 598 Кбайт болды, ал қазір icl.exe файлының өзі 684 Кбайт алады. Табиғи кәрілік «семіздікке» бейімделгеннен кейін сандар өте жақсы жақындайды. Сонымен, FLEX lm! Ой ой! Бірақ енді функциялардың символдық атаулары болмаса, қорғанысты бұзу әлдеқайда қиын болады ... Дегенмен, уақытынан бұрын дүрбелеңге түспейік! Тек сабырмен ойланайық! Әзірлеу тобының осы «конверт» қорғанысымен әрекеттесетін барлық кодты толығымен қайта жазуы екіталай. Сірә, макет түрін өзгерту арқылы оның «жетілдірілуі» аяқталды. Егер солай болса, бағдарламаны бұзу мүмкіндігі әлі де керемет!

    Қорғаныс коды соңғы рет негізгі функцияда болғанын ескере отырып, оның мекенжайын анықтай отырып, біз жай ғана тоқтау нүктесін орнатамыз және отладчиктің пайда болуын күткеннен кейін, кодты ақымақтықпен қадағалаймыз, кезекпен отладчикке немесе бағдарламаның шығыс терезесі: нашар хабар бар ма? Сонымен бірге біз кез келген шартты секірістерді бөлек қағазға белгілейміз (немесе қаласаңыз, оны өз жадымызда қалдырыңыз), әрбір шартты секірістің орындалғанын немесе орындалмағанын көрсетуді ұмытпаймыз. .. Тоқта! Біз бірдеңе сөйлестік, бірақ қорлау хабары әлдеқашан пайда болды! Жарайды! Оған қандай шартты көшу сәйкес келгенін көрейік. Біздің жазбаларымыз көрсеткендей, соңғы кездескен тармақ 0401075h мекенжайында орналасқан және sub_404C0E қайтарған нәтижеге "реакция жасайтын" JNZ шартты тармағы болды:

  • Мәтін:0040107F loc_40107F: ; КОД XREF: _main+75^j

    Мәтін:0040107F mov eax, офсет aFfrps ; "FFrps"

    Мәтін:00401084 mov edx, 21сағ

    Мәтін: 00401089 sub_404C0E қоңырау шалыңыз

    Мәтін:0040108E сынақ eax, eax

    Мәтін:00401090 jnz short loc_40109A

    Әлбетте, sub_404C0E лицензияның бар-жоғын тексеретін бірдей қорғау процедурасы. Оны қалай алдауға болады? Ал, көптеген нұсқалар бар... Біріншіден, сіз sub_404C0E мазмұнын мұқият және мұқият талдай аласыз: дәл нені және қалай тексеретінін білу үшін. Екіншіден, JNZ short loc_40107F-ті JZ short loc_40107F немесе тіпті NOP, NOP-пен ауыстыруға болады. Үшіншіден, TEST EAX, EAX қайтару нәтижесін тексеру пәрменін нөлдік параметр пәрменіне айналдыруға болады: XOR EAX, EAX. Төртіншіден, sub_404C0E өзін әрқашан нөлді қайтаратындай түзетуге болады. Сіз туралы білмеймін, бірақ маған №3 әдіс көбірек ұнады. Біз екі байтты өзгертеміз және компиляторды бастаймыз. Егер қорғауда оның «лицензиялылығын» басқа тексерулер болмаса, онда бағдарлама жұмыс істейді және сәйкесінше керісінше. (Есімізде, бесінші нұсқада осындай екі тексеру болған). Бұл керемет, бірақ компилятор енді ант беріп, жұмыс істемейді!!! Шынында да, күткендей, оны әзірлеушілер қорғанысты мүлде күшейтпеді, керісінше, оны әлсіретіп жіберді! Крис Касперский

  • Сіз құл емессіз!
    Элита балаларына арналған жабық білім беру курсы: «Әлемнің шынайы орналасуы».
    http://noslave.org

    Википедиядан, еркін энциклопедия

    Intel C++ компиляторы
    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).
    Түр
    Автор

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Әзірлеуші
    Әзірлеушілер

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Жазылған

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Интерфейс

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Операциялық жүйе
    Интерфейс тілдері

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Бірінші басылым

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Аппараттық платформа
    соңғы нұсқасы
    кандидатты босату

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    бета нұсқасы

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    альфа нұсқасы

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Сынақ нұсқасы

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Оқуға болатын файл пішімдері

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Жасалған файл пішімдері

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Мемлекет

    170-жолдағы Модуль:Уикидеректердегі Lua қатесі: "wikibase" өрісін индекстеу әрекеті (нөлдік мән).

    Лицензия

    Басты ерекшеліктер:

    • SSE , SSE2 , SSE3 , SSE4 үшін векторлау

    Компилятор параллельді бағдарламаларды жазу үшін OpenMP 3.0 стандартын қолдайды. Ол сонымен қатар OpenMP кластерлік OpenMP деп аталатын модификациясын қамтиды, оның көмегімен MPI көмегімен кластерлерде OpenMP сәйкес жазылған қолданбаларды іске қосуға болады.

    Intel C++ компиляторы Edison Design Group компаниясының фронтенді (компилятордың құрастырылатын бағдарламаны талдайтын бөлігі) пайдаланады. Дәл сол фронтенді SGI MIPSpro, Comeau C++, Portland Group компиляторлары пайдаланады.

    Бұл компилятор SPEC CPU эталондарын құрастыру үшін кеңінен қолданылады.

    Құрастырушы бар Intel өнімдерінің 4 сериясы бар:

    • Intel C++ Compiler Professional Edition
    • Intel Cluster Toolkit (компилятор шығарылымы)

    Компилятордың Linux нұсқасының кемшіліктеріне кейбір бағдарламаларды құрастыру кезінде қиындықтар тудыруы мүмкін C тілінің GNU кеңейтімдерімен ішінара үйлеспеушілік (GCC компиляторы қолдау көрсетіледі).

    Эксперименттік нұсқалар

    Компилятордың келесі эксперименттік нұсқалары жарияланды:

    • 2007 жылғы 17 қыркүйектегі Intel STM Compiler Prototype Edition. Бағдарламалық жасақтаманың транзакциялық жады (STM) қолдауы. Linux және Windows, IA-32 (x86 процессорлары) үшін ғана шығарылған;
    • Intel Concurrent Collections for C/C++ 0.3, қыркүйек 2008 ж. Құрамында параллель C++ бағдарламаларын жазуды жеңілдететін механизмдер бар.

    Негізгі жалаулар

    Windows Linux, Mac OSX Сипаттама
    /од -O0 Оңтайландыруларды өшіріңіз
    /O1 -O1 Орындалатын файл өлшемін азайту үшін оңтайландыру
    /O2 -O2 Жылдамдық үшін оңтайландыру. Кейбір оңтайландырулар енгізілген
    /O3 -O3 O2 барлық оңтайландыруларды қосыңыз. Сондай-ақ қарқынды циклды оңтайландыруды орындаңыз
    /Оп -Оп Әр файл үшін процедурааралық оңтайландыруды қосыңыз
    /Ойпо -Ойпо Жаһандық процедурааралық оңтайландыруды қосыңыз
    /QxO -xO Кез келген компания шығарған процессорлар үшін SSE3, SSE2 және SSE кеңейтімдерін пайдалануға рұқсат етіңіз
    /жылдам -тез «Жылдам режим». Windows жүйесінде "/O3 /Qipo /QxHost /no-prec-div" және Linux жүйесінде "-O3 -ipo -static -xHOST -no-prec-div" баламасы. «-xHOST» жалауы компилятор жұмыс істейтін процессорды оңтайландыруды білдіретінін ескеріңіз.
    /Qprof-ген -prof_gen Орындау профилін жинайтын бағдарламаның аспаптық нұсқасын жасаңыз
    /Qprof-пайдалану -prof_use prof_gen жалауымен құрастырылған бағдарламаны іске қосудан профиль ақпаратын пайдаланыңыз.

    «Intel C++ компиляторы» мақаласына пікір жазыңыз

    Ескертпелер

    да қараңыз

    Сілтемелер

    Intel C++ компиляторын сипаттайтын үзінді

    Дегенмен, ол Ақ Магусты соңғы рет көру үшін оралды ... Оның күйеуі және ол ешқашан ұмыта алмайтын ең шынайы досы. Жүрегінде ол оны кешірді. Бірақ, оның үлкен өкінішіне орай, ол оған Магдалинаның кешіріміне ие бола алмады .... Сонымен, Исидора, көріп отырғаныңыздай, «кешірім» туралы ұлы христиандық аңыз аңғал сенушілер үшін кез келген нәрсені істеуге мүмкіндік беретін балалық өтірік. Жамандық, не істесе де, ақыры кешірілетінін біле тұра. Бірақ сіз шынымен кешіруге лайық нәрсені ғана кешіре аласыз. Адам кез келген зұлымдық үшін жауап беруі керек екенін түсінуі керек... Және де әлдебір жұмбақ Құдайдың алдында емес, өзін аяусыз азап шегуге мәжбүрлейді. Магдалена Владиканы терең құрметтеп, шын жүректен сүйсе де кешірмеді. Радомирдің қорқынышты өлімі үшін ол бәрімізді кешіре алмағандай. Өйткені, бәрінен де жақсы түсінген ОЛ - біз оған көмектесе алдық, оны қатыгез өлімнен құтқара алдық... Бірақ біз оны қаламадық. Ақ Мағұстың айыбын тым қатыгез деп есептеп, оны бір сәтке де ұмытпай, осы кінәмен өмір сүруге қалдырды... Ол оған оңай кешірім бергісі келмеді. Біз оны енді ешқашан көрмедік. Олардың сәбилерін ешқашан көрмегендей. Өз ғибадатханасының рыцарларының бірі - біздің сиқыршы - Магдалена арқылы Жаратқан Иеге бізге қайтып оралу туралы өтінішіне жауап берді: «Күн бір күнде екі рет көтерілмейді ... Сіздің әлеміңіздің қуанышы (Радомир) ешқашан болмайды. Саған орал, мен саған қайтпаймын, мен де... СЕНІМ мен ШЫНДЫҚТЫ таптым, олар ТІРІ, сенікі ӨЛІ... Ұлдарыңды жоқтаңдар – олар сені сүйді. Мен тірі кезімде олардың өлімін сені ешқашан кешірмеймін. Ал сенің кінәң өзіңде қалсын. Бәлкім, бір күні ол саған нұр мен кешірім әкелетін шығар... Бірақ менен емес. Магус Джонның басы Метеораға дәл осындай себеппен әкелінбеді - ғибадатхана рыцарларының ешқайсысы бізге оралғысы келмеді ... Біз олардан айырылып қалдық, өйткені біз түсінгісі келмейтін және түсінгісі келмейтін көптеген адамдардан бірнеше рет айырылып қалдық. біздің құрбандарымызды қабылдаңыз ... Сіз сияқты кім болды - олар бізді айыптап кетті.
    Менің басым айналып кетті!.. Шөлдеп, білімге деген мәңгілік аштығымды тойдырып, мен Солтүстіктің жомарттықпен берген таңғажайып ақпараттар легін ашкөздікпен сіңірдім... Ал мен одан да көп нәрсені қалаймын!.. Мен бәрін соңына дейін білгім келді. . Бұл азап пен бақытсыздыққа күйіп кеткен айдаладағы тұщы судың тынысы еді! Ал мен жеткілікті іше алмадым ...
    Менде мың сұрақ бар! Бірақ уақыт жоқ... Не істеуім керек, Север? ..
    - Сұра, Исидора!.. Сұра, мен саған жауап беруге тырысамын...
    – Айтыңызшы, Север, бұл әңгімеде неге бір-біріне ұқсас оқиғалармен астасып жатқан екі өмір оқиғасы сабақтасып, бір адамның өмірі ретінде берілгендей болып көрінеді маған? Әлде менікі дұрыс емес пе?
    – Өте дұрыс айтасың, Исидора. Жоғарыда айтқанымдай, адамзаттың жалған тарихын жасаған «осы дүниенің құдіреттілері» бір жарым мың жыл бұрын өмір сүрген еврей пайғамбары Ешуаның бөтен өмірін Мәсіхтің шынайы өміріне «кигізді». (Солтүстік оқиғасынан бері). Және өзі ғана емес, оның отбасы, туыстары мен достары, достары мен ізбасарлары. Өйткені, бұл Ешуа пайғамбардың әйелі, еврей Мәриямның әпкесі Марта мен ағасы Елазар, анасының әпкесі Мария Якоби және басқалары ешқашан Радомир мен Магдаленаға жақын болмаған. Олардың қасында басқа «апостолдар» болмаған сияқты - Пауыл, Матай, Петір, Лұқа және басқалары ...
    Бұл бір жарым мың жыл бұрын Провансқа (ол кезде Галлия (Трансальпі Галлия) деп аталды), Грекияның Массалия қаласына (қазіргі Марсель) көшіп келген Ешуа пайғамбардың отбасы болды, өйткені ол кезде Массалия болды. Еуропа мен Азия арасындағы «шлюз» және бұл барлық «қуғындалғандар» үшін қудалау мен бақытсыздықтан құтылудың ең оңай жолы болды.



    
    Жоғарғы