Кіріспе

Параллель компьютерлік архитектураның абстракциясы

Есептеуде, параллель бағдарламалау моделі – параллель компьютерлік архитектураның абстракциясы болып табылады, ол бағдарламаларда алгоритмдерді және олардың құрамын көрсетуге қолайлы. Бағдарламалау моделінің құндылығы оның жалпылығымен бағаланады: әртүрлі архитектуралар үшін қаншалықты кең ауқымды мәселелерді шешуге мүмкіндік береді, сондай-ақ оның тиімділігі: компиляцияланған бағдарламалардың қаншалықты тиімді орындалуы. Параллель бағдарламалау моделін іске асыру бағдарламалау тілінен шақырылатын кітапхана түрінде немесе қолданыстағы тілдерге қосымша ретінде жүзеге асырылуы мүмкін. Белгілі бір бағдарламалау моделі бойынша консенсусқа келу маңызды, себебі ол модельді қолдаумен әртүрлі параллель компьютерлерді құруға ықпал етеді, соның арқасында бағдарламалық жасақтаманы тасымалдау жеңілдеді. Осы тұрғыдан алғанда, бағдарламалау модельдері аппараттық және бағдарламалық қамтамасыз ету арасындағы байланыс құралы ретінде қарастырылады.

Паралельді бағдарламалау модельдерін жіктеу

Параллель бағдарламалау модельдерін жіктеуді екі негізгі салаға бөлуге болады: процестердің өзара әрекеттесуі және мәселенің бөлінуі.

Процестер өзара әрекеттесуі

Процестердің өзара әрекеттесуі – параллель процестердің бір-бірімен байланыс құру механизмдері. Ең көп таралған байланыс түрлері – ортақ жад және хабар алмасу, бірақ өзара әрекеттесу жасырын (бағдарламашыға көрінбейтін) болуы да мүмкін.

Ортақ жады

Ортақ жад – процестер арасында деректерді берудің тиімді тәсілі. Ортақ жад моделінде, параллель процестер жаһандық адрестік кеңістікті бөліседі, оған асинхронды түрде оқиды және жазады. Асинхронды бірдей қолжеткізу жарыс жағдайларына алып келуі мүмкін, сондықтан құлыптар, семафорлар және мониторлар сияқты механизмдер осыған жол бермеу үшін қолданылады. Көп ядролы процессорлар ортақ жадты тікелей қолдайды, сондықтан Cilk, OpenMP және Threading Building Blocks сияқты көптеген параллель бағдарламалау тілдері мен кітапханалар оны пайдалану үшін жасалған.

Хабарды жіберу

Хабар алмасу үлгісінде, параллель процестер бір-бірімен хабарларды жіберу арқылы деректер алмасады. Бұл байланыс асинхронды болуы мүмкін, яғни хабар алушы дайын болмастан бұрын жіберіледі, немесе синхронды болуы мүмкін, яғни алушы дайын болуы тиіс. Хабар алмасудың Communicating sequential processes (CSP) формалдауынша, процестерді қосу үшін синхронды байланыс арналары қолданылады, бұл Occam, Limbo және Go сияқты маңызды тілдердің пайда болуына әкелді. Керісінше, актерлік модель асинхронды хабар алмасуды қолданады және D, Scala және SALSA сияқты тілдерді жобалауда пайдаланылды.

Бөлінген жаһандық адрестік кеңістік

Партицияланған жаһандық адрестік кеңістік (PGAS) модельдері ортақ жад пен хабар алмасу арасындағы орталық нүктені ұсынады. PGAS логикалық түрде бөлінген жаһандық жад адрестік кеңістігін абстракциялайды, онда әрбір процеске белгілі бір бөлік тиесілі болады. Параллель процестер жаһандық адрестік кеңістікте асинхронды операцияларды (мысалы, оқу және жазу) орындау арқылы байланысады, бұл ортақ жад модельдерін еске түсіреді. Дегенмен, жаһандық адрестік кеңістікті нақты процестерге жақын бөліктерге семантикалық түрде бөлу арқылы, бағдарламашыларға деректерге жылдам қолжетімділікті пайдалануға және таратылған жадтағы параллель компьютерлерде тиімді іске асыруға мүмкіндік береді. PGAS көптеген параллель бағдарламалау тілдері мен кітапханаларында қолжетімді, мысалы Fortran 2008, Chapel, UPC++ және SHMEM.

Имплицитті өзара іс-қимыл

Имплицитті модельде процестердің өзара әрекеттесуі бағдарламашыға көрінбейді, оның орнына компилятор және/немесе орындалу уақыты оны жүзеге асыру үшін жауапты болады. Имплицитті параллелизмнің екі мысалы – жоғары деңгейлі операциялардың ішіндегі бір мезгілдестікті анықтайтын салалық тілдер және функционалдық бағдарламалау тілдері, себебі жанама әсерлердің болмауы тәуелсіз функцияларды параллель түрде орындауға мүмкіндік береді. Дегенмен, осы типтегі параллелизмді басқару қиын, сондықтан Concurrent Haskell және Concurrent ML сияқты функционалдық тілдер параллелизмді ашық және дұрыс басқаруға арналған мүмкіндіктер ұсынады.

Проблеманың бөлшегі

Параллель бағдарлама бір мезгілде орындалатын процестерден құралады. Мәселені бөлу – құрамына кіретін процестердің қалай жасалғанымен байланысты. Параллель бағдарламалау тілі бір немесе бірнеше бағдарламалау модельдеріне негізделуі мүмкін. Мысалы, жоғары өнімділіктегі Fortran ортақ жад арқылы өзара әрекеттесуге және мәселені деректерді параллельді бөлу арқылы шешуге негізделген, ал Go ортақ жад және хабар алмасу арқылы өзара әрекеттесу механизмін ұсынады.