Главная страница
Навигация по странице:

  • хабарлама жіберу интерфейсі

  • Коммуникатор

  • негізгі процесс

  • Коллоквиум сұрақтары жауаптары (2) (копия). Коллоквиум сратары


    Скачать 2 Mb.
    НазваниеКоллоквиум сратары
    Дата15.02.2022
    Размер2 Mb.
    Формат файлаdocx
    Имя файлаКоллоквиум сұрақтары жауаптары (2) (копия).docx
    ТипДокументы
    #363200
    страница1 из 10
      1   2   3   4   5   6   7   8   9   10

    Коллоквиум сұрақтары
    1 MPI параллель программалау технологиясы. Жұмыс істеу принципі. OpenMP-дан айырмашылығы.

    Негізгі ұғымдар таратылған жады бар параллель компьютерлерді бағдарламалаудың ең көп таралған технологиясы-MPI технологиясы . Мұндай жүйелердегі параллель процестердің өзара әрекеттесуінің негізгі әдісі-хабарламаларды бір-біріне беру. Бұл Message Passing Interface технологиясының атауында көрінеді. MPI шеңберіндегі параллель бағдарлама бір уақытта орындалатын процестердің жиынтығын білдіреді. Процестер әртүрлі процессорларда орындалуы мүмкін, бірақ бірнеше процестер бір процессорда орналасуы мүмкін (бұл жағдайда оларды орындау уақытты бөлу режимінде жүзеге асырылады). Шекті жағдайда параллель бағдарламаны орындау үшін бір процессорды қолдануға болады, әдетте, бұл әдіс параллель бағдарламаның дұрыстығын бастапқы тексеру үшін қолданылады. Параллель бағдарламаның әр процесі бірдей бағдарламалық кодтың көшірмесі негізінде жасалады. Орындалатын бағдарлама түрінде ұсынылған бұл бағдарламалық код барлық қолданылатын процессорларда параллель бағдарламаны іске қосу кезінде қол жетімді болуы керек. Орындалатын бағдарлама үшін бастапқы бағдарламалық код MPI кітапханасының қандай да бір іске асырылуын қолдана отырып, C немесе Fortran алгоритмдік тілдерінде әзірленеді. Процестердің саны мен Қолданылатын процессорлардың саны MPI бағдарламаларын орындау ортасы арқылы параллель бағдарламаны іске қосу кезінде анықталады және есептеу кезінде MPI 2.0 стандартында пайда болған арнайы, бірақ сирек қолданылатын динамикалық процестерді құру және басқару құралдарын қолданбай өзгерту мүмкін емес. Бағдарламаның барлық процестері 0-ден p1-ге дейін дәйекті түрде қайта нөмірленеді, мұнда p процестердің жалпы саны бар. Процесс нөмірі процестің дәрежесі деп аталады. MPI-дің негізі-хабарлама беру операциялары. MPI құрамында қарастырылған функциялардың ішінде екі процесс арасындағы жұптасқан (pointtopoint) операциялар және бірнеше процестердің бір уақытта өзара әрекеттесуі үшін ұжымдық (ұжымдық) байланыс әрекеттері ерекшеленеді
    Жұптасқан операцияларды орындау үшін әртүрлі тарату режимдерін қолдануға болады, олардың арасында синхронды, блоктау және т.б. параллель бағдарламаның процестері топтарға біріктіріледі. Процестер жиынтығын сипаттайтын MPI-дің тағы бір маңызды тұжырымдамасы-Коммуникатор ұғымы. MPI-дегі Коммуникатор дегеніміз-процестер тобын және деректерді беру операцияларын орындау кезінде қолданылатын бірқатар қосымша параметрлерді (контекст) біріктіретін арнайы құрылған қызметтік объект. Жұптасқан деректерді беру операциялары тек бір коммуникаторға жататын процестер үшін жүзеге асырылады. Ұжымдық операциялар бір коммуникатордың барлық процестері үшін бір уақытта қолданылады. Нәтижесінде, MPI-ге деректерді беру операциялары үшін пайдаланылатын коммуникаторды көрсету міндетті болып табылады. Есептеу кезінде жаңа процестер топтары мен коммуникаторлар құрылуы және жойылуы мүмкін. Сол процесс әртүрлі топтар мен коммуникаторларға тиесілі болуы мүмкін. Параллель бағдарламада бар барлық процестер mpi_comm_world идентификаторы бар әдепкі коммуникатордың бөлігі болып табылады. MPI функцияларында жіберілетін немесе алынатын деректерді көрсету үшін хабарламаларды беру операцияларын орындау кезінде жіберілетін деректердің түрін көрсету қажет. MPI-де Алгоритмдік C және Fortran тілдеріндегі мәліметтер түрлеріне сәйкес келетін негізгі мәліметтер түрлерінің үлкен жиынтығы бар. Сонымен қатар, MPI-де жіберілетін хабарламалардың мазмұнын дәлірек және қысқаша сипаттау үшін жаңа мәліметтер типтерін құру мүмкіндігі бар. Сонымен, қысқаша айтқанда, MPI-бұл хабарлама беру механизмін қолдана отырып, параллель процестердің өзара әрекеттесуін қамтамасыз ететін функциялар кітапханасы. Бұл шамамен 130 функциядан тұратын кітапхана, оған мыналар кіреді: MPI процестерін инициализациялау және жабу функциялары; жұптық операцияларды жүзеге асыратын функциялар; ұжымдық операцияларды жүзеге асыратын функциялар; процестер топтарымен және коммуникаторлармен жұмыс істеуге арналған функциялар; деректер құрылымдарымен жұмыс істеуге арналған функциялар; процестер топологиясын қалыптастыру функциялары. MPI-ді үйренуді қарапайым бағдарламаларды жазу үшін жеткілікті минималды толық жиынтығын құрайтын функциялардың негізгі жиынтығын қарастырудан бастаймыз..
    MPI хабарлама жіберу интерфейсін білдіреді. Бұл хабарлама жіберу туралы API жарнамаларының жиынтығы (мысалы, жіберу, қабылдау, тарату және т.б.) және іске асырудан қандай мінез-құлықты күту керек."Хабарлама жіберу" идеясы өте дерексіз. Бұл жергілікті процестер немесе желілік хосттар арқылы таратылатын процестер арасында хабарлама жіберуді білдіруі мүмкін және т.б. қазіргі заманғы енгізулер жан-жақты болуға және көптеген негізгі механизмдерден (жалпы жадқа қол жеткізу, IO желісі және т. б.) абстракциялауға тырысады.
    OpenMP-бұл ортақ жады бар мультипроцессорлық бағдарламаларды жазуды жеңілдетуге арналған API. Хабарламаларды беру туралы түсінік жоқ. Оның орнына, стандартты функциялар мен компилятор директиваларының көмегімен сіз жергілікті ағындарды параллель орындайтын бағдарламаларды жазасыз және сол ағындардың әрекетін басқарасыз (олар қай ресурсқа қол жеткізуі керек, олар қалай синхрондалады және т.б.). OpenMP компилятордың қолдауын қажет етеді, сондықтан сіз оны қолдау көрсетілетін тілдердің кеңейтімі ретінде қарастыра аласыз.
    2 MPI кітапханасының негізгі функциялары және олардың параметрлері.

    Кез-келген қолданбалы MPI бағдарламасы (қосымша) MPI инициализация функциясын шақырудан басталуы керек: mpi_init функциялары.

    Осы функцияны орындау нәтижесінде қосымшаның барлық процестері орналастырылған процестер тобы құрылады және mpi_comm_world алдын-ала анықталған Коммуникатор сипаттайтын байланыс аймағы жасалады. Бұл байланыс саласы барлық процестерді-қосымшаларды біріктіреді. Топтағы процестер 0-ден groupsize-1-ге дейін реттелген және нөмірленген, мұнда groupsize топтағы процестердің санына тең. Сонымен қатар, алдын-ала анықталған mpi_comm_self коммуникаторы жасалады, ол әр жеке процесс үшін өзінің байланыс аймағын сипаттайды.
    Mpi_init инициализация функциясының синтаксисі C және FORTRAN тілдерінде айтарлықтай ерекшеленеді:

    C:

    int MPI_Init(int *argc, char ***argv)

    C бағдарламаларында инициализация кезінде әр процесс командалық жолдан алынған негізгі функцияның дәлелдерін береді. FORTRAN бағдарламаларында IERROR параметрі шығыс болып табылады және қате кодын қайтарады.
    Mpi_finalize бағдарламаларын аяқтау функциясы
    C:

    int MPI_Finalize(void)

    Функция барлық MPI процестерін жабады және барлық байланыс салаларын жояды.
    Mpi_comm_size байланыс саласындағы процестер санын анықтау функциясы
    C:

    int MPI_Comm_size(MPI_Comm comm, int *size)

    IN comm-коммуникатор;

    Out size-comm коммуникаторының байланыс саласындағы процестер саны.

    Функция comm коммуникаторының байланыс аймағындағы процестердің санын қайтарады.
    Топтар мен олармен байланысты коммуникаторларды (6-бөлім) жасамас бұрын, COMM параметрінің жалғыз мүмкін мәндері MPI_COMM_WORLD және MPI_COMM_SELF болып табылады, олар MPI инициализациясында автоматты түрде жасалады. Ішкі бағдарлама жергілікті.




    Mpi_comm_rank процесс нөмірін анықтау функциясы
    C:

    int MPI_Comm_rank(MPI_Comm comm, int *rank)

    IN comm-коммуникатор;

    Out rank-функцияны шақырған процесс нөмірі.
    Функция осы функцияны шақырған процесс нөмірін қайтарады. Процестердің нөмірлері 0 диапазонында жатыр..size-1 (size мәнін алдыңғы функциямен анықтауға болады). Ішкі бағдарлама жергілікті.
    Хабарламаларды беру мен қабылдаудың екі функциясы ең аз жиынтыққа қосылуы керек.




    Mpi_send хабарлама жіберу функциясы

    C:

    int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest,

    int tag, MPI_Comm comm)

    IN buf-жіберілетін деректердің орналасуын бастау мекенжайы;

    In count - жіберілетін элементтер саны;

    IN datatype - жіберілетін элементтер түрі;

    IN dest-comm коммуникаторымен байланысты топтағы алушы процестің нөмірі;

    IN tag-хабарлама идентификаторы (read және NWRITE PSE ncube2 хабарлама түрінің аналогы);

    IN comm-байланыс саласындағы коммуникатор.
    Функция comm коммуникаторының байланыс саласындағы TAG процессіне Dest идентификаторы бар datatype хабарлама түріндегі элементтерді санау пәрменін орындайды. Буф айнымалы-бұл әдетте массив немесе скаляр айнымалы. Соңғы жағдайда count = 1 мәні.
    Mpi_recv хабарламасын қабылдау функциясы

    C:

    int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source,

    int tag, MPI_Comm comm, MPI_Status *status)

    Out buff-қабылданған хабардың басталу мекен-жайы;

    In count - қабылданатын элементтердің ең көп саны;

    IN datatype - қабылданатын хабарлама элементтерінің түрі;

    IN source-жіберушінің процесс нөмірі;

    IN tag-хабарлама идентификаторы;

    IN comm-байланыс саласындағы коммуникатор;

    OUT status - қабылданған хабарламаның атрибуттары.
    Функция comm коммуникаторының байланыс саласындағы source процесінен tag идентификаторы бар datatype хабарлама түріндегі элементтерді count қабылдауды орындайды.
    Біз келесі бөлімде хабар алмасу операциялары туралы толығырақ сөйлесетін боламыз және осы бөлімнің соңында біз көрсеткен минимумға кірмейтін, бірақ тиімді бағдарламаларды жасау үшін маңызды функцияны қарастырамыз. Бұл сілтеме алу функциясы-таймер туралы. Бір жағынан, мұндай функциялар барлық операциялық жүйелерде бар, бірақ екінші жағынан, оларды жүзеге асыруда толық озбырлық бар. Әр түрлі операциялық жүйелермен жұмыс істеу тәжірибесі қосымшаларды бір платформадан екінші платформаға ауыстыру кезінде уақытты есепке алу функцияларына жүгіну керек екенін көрсетеді. Сондықтан, MPI әзірлеушілері қосымшалардың операциялық ортадан толық тәуелсіздігіне қол жеткізе отырып, олардың анықтамалық функцияларын анықтады.
    Уақытты есептеу функциясы (таймер) MPI_Wtime
    C:

    double MPI_Wtime(void)

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

    {

    double starttime, endtime;

    starttime = MPI_Wtime();

    ... хронометрируемый участок ...

    endtime = MPI_Wtime();

    printf("Выполнение заняло %f секунд\n", endtime-starttime);
    Дәл сол синтаксисі бар mpi_wtick функциясы таймердің ажыратымдылығын қайтарады (уақыт квантының минималды мәні).
    3 MPI негізгі ұғымдар.

    Mpi_comm_world коммуникаторына кіретін процестердің әрқайсысында бір бүтін санды оқып, оның екі еселенген мәнін шығарыңыз. Сонымен қатар, негізгі процесс үшін (0 дәрежелі процесс) mpi_comm_world коммуникаторына кіретін процестердің санын шығарыңыз. Деректерді енгізу және шығару үшін pt енгізу / шығару ағынын пайдаланыңыз. Негізгі процесте жеке жолдарда А-ның екі еселенген мәні мен процестер санын көрсету арқылы күйін келтіру бөліміндегі деректердің шығуын қайталаңыз (show функциясымен бірге тапсырмада анықталған екі ShowLine функциясын қолданыңыз).
    Ең алдымен, параллель MPI бағдарламалау терминдерін түсіндіреміз. Бағдарламаны параллель орындау кезінде осы бағдарламаның бірнеше данасы іске қосылады. Әрбір іске қосылған данасы жеке процесс (ағылш. хабар алмасу (хабарламалар) арқылы басқа процестермен өзара әрекеттесе алатын процесс. MPI-функциялар осындай өзара әрекеттесуді жүзеге асырудың әртүрлі құралдарын ұсынады (MPI аббревиатурасы "хабарлама жіберу интерфейсі" дегенді білдіреді).
    Процестер тобындағы әр процесті анықтау үшін дәреже (Ранк) ұғымы қолданылады. Процесс дәрежесі-бұл нөлден есептелетін процестер тобындағы процестің реттік нөмірі (осылайша, бірінші процесс 0 — ге, ал соңғы процесс K – 1 дәрежесіне ие, мұндағы K — топтағы процестердің саны). Сонымен қатар, процестер тобы параллель қосымшаның барлық жұмыс істеп тұрған процестерінің бір бөлігін ғана қамтуы мүмкін. Тапсырмалар мәтінінде K әрпі әдетте процестердің санын көрсету үшін қолданылатынын ескеріңіз.
    MPI кітапханасының Коммуникатор деп аталатын ерекше мәні процестер тобымен байланысты. Процестердің кез-келген өзара әрекеттесуі белгілі бір Коммуникатор аясында ғана мүмкін болады. Бағдарламаны параллель орындау кезінде жұмыс істейтін барлық процестерді қамтитын стандартты коммуникаторда MPI_COMM_WORLD атауы бар. Ешқандай процесі жоқ" бос " коммуникаторда MPI_COMM_NULL атауы бар. Коммуникаторды процестердің белгілі бір тобын байланыстыратын арна ретінде елестетуге болады. Кейбір жағдайларда, мысалы, барлық бастапқы процестерді қамтымайтын немесе олардың реті өзгертілген қосымша арналарды ұйымдастыру ыңғайлы болуы мүмкін. Бұл жағдайда жаңа коммуникаторлар құрылады. Толығырақ коммуникаторлармен жұмыс mpi5comm және MPI8Inter тапсырмалар топтарында қарастырылады. Бастапқы төрт топтың тапсырмалары әрқашан стандартты mpi_comm_world коммуникаторын пайдаланады.
    0 дәрежелі Процесс көбінесе негізгі процесс (master process) деп аталады, ал қалған процестер бағынышты процестер (slave processes) деп аталады. Әдетте, негізгі процесс бағынышты процестерге қатысты, оларға өз деректерін беру немесе барлық (немесе кейбір) бағынышты процестерден мәліметтер алу арқылы ерекше рөл атқарады. Қарастырылып отырған mpi1proc2 тапсырмасында барлық процестер бірдей әрекетті орындауы керек — бір бүтін санды оқып, оның екі еселенген мәнін шығару керек, ал негізгі процесс қосымша әрекетті орындауы керек — барлық іске қосылған процестердің санын шығару (басқаша айтқанда, mpi_comm_world коммуникаторына кіретін барлық процестердің саны). Бұл қарапайым тапсырмада процестер бір-бірімен хабарлама алмасуды қажет етпейтініне назар аударыңыз (бұл mpi1proc кіріспе тобының барлық тапсырмалары).
    4 MPI-да анықталған деректер типтері.
    MPI-де негізгі деректер типтиерін сипаттау үшін MPI_DATATYPE типі бар MPI_INT, MPI_CHAR, MPI_DOUBLE және т.б. константалар анықталады. Олардың атаулары "MPI_" префиксімен және тиісті типтегі (Int, char, double,...), бас әріптермен жазылған (түрін сипаттайтын тұрақтылардың тізімі құжаттың соңында берілген). Пайдаланушы MPI-ге өзінің деректер түрлерін, мысалы, құрылымдарды "тіркей" алады, содан кейін MPI оларды негізгі мәліметтермен қатар өңдей алады.



    5 Синхронды және асинхронды (бұғаттаулы, бұғаттаусыз) хабарламаларды жіберу. Пайдалану негіздері, айырмашылықтары.

    Деректерді жіберу мен қабылдаудың блоктау және бұғаттамау операцияларын анықтаудың негізгі мәні басқа процестердің барысын ескерместен шақырушы процестің жергілікті мінез-құлқын сипаттау болып табылады.
    Синхронды хабар алмасу кезінде жіберуші мен алушы әр хабарламаны жіберу үшін бір-бірін күтеді және жіберу әрекеті алушы хабарламаны қабылдауды аяқтағаннан кейін ғана аяқталды деп саналады.
    Send () синхронды операциясының аяқталуы деректерді беру семантикасының қамтамасыз етілгендігін ғана емес, сонымен бірге алушының оны орындау барысында белгілі бір нүктеге жеткенін, атап айтқанда тиісті receive () операциясын шақырғанын көрсетеді. Сондықтан процестер тек деректер алмасып қана қоймайды, сонымен бірге олардың орындалуын уақыт бойынша синхрондайды.
    синхронды хабар алмасудың артықшылығы-хабарламаны беру үшін қосымша буферлерді пайдалану қажет емес, өйткені send() синхронды операциясы тиісті receive () операциясы шақырылғанға дейін аяқтала алмайды. Әрине, бұл примитивтерді буферлеуді қолдану арқылы жүзеге асыруға болады.

    Асинхронды хабар алмасу кезінде хабарлама жіберуші мен алушы арасында ешқандай үйлестіру болмайды. Send () операциясын аяқтау үшін жіберушіге алушы процестің хабарламаны қабылдауын күтудің қажеті жоқ. Жаңа хабарлама жіберген кезде, жіберуші сол немесе мүмкін басқа алушыға жіберілген алдыңғы хабарламаның алынғанын білмейді. Сондықтан, егер жіберуші мен алушы арасындағы байланыс арнасы ол арқылы жіберілетін хабарламалардың тәртібін сақтамаса, яғни FIFO (ағылш. First in First Out), алушы хабарламаларды жіберуші жібергеннен басқа тәртіпте қабылдай алады. Receive () асинхронды операциясының жіберушіге хабарламаны қабылдау туралы растауды (ағылш.acknowledgement) жіберудің қажеті жоқ.
    Асинхронды хабар алмасудың артықшылығы-уақыт өте келе жіберуші мен алушының есептеулерін қабаттастыру мүмкіндігі, өйткені процестер әр хабарламаны беру үшін бір-бірін күтпейді.

    6 Нүкте-нүкте байланыс операциялары.

    Нүкте-нүкте операциялары мәліметтерді жұп түйіндер арасында беруге мүмкіндік береді. Бұл түрдің қарапайым функциялары MPI_Send және mpi_recv болып табылады, олар сәйкесінше хабарлама жібереді және қабылдайды:

    MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

    MPI_Recv(void* message, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status* status)

    Send және Receive командаларын орындау әр түрлі типтегі немесе басқаша айтқанда әр түрлі мақсаттағы тиісті MPI функцияларын шақыру арқылы жүзеге асырылады:



    Бұл функциялардағы аргументтер келесі тағайындауларға ие:
      1   2   3   4   5   6   7   8   9   10


    написать администратору сайта