Кіріспе

Параллель есептеу – көптеген есептеулер немесе процестер бір уақытта орындалатын есептеу түрі. Үлкен проблемаларды кішірек проблемаларға бөлуге болады, содан кейін оларды бірдей уақытта шешуге мүмкіндік туады. Параллель есептеудің бірнеше түрі бар: биттік деңгей, нұсқаулық деңгей, дерек және тапсырмалық параллелизм. Параллелизм ұзақ жылдар бойы жоғары өнімді есептеулерде қолданылып келді, бірақ жиіліктік масштабтауға физикалық шектеулер кедергі келтіргендіктен, оған қызығушылық арта түсті. Компьютерлердің қуат тұтынуы (соның салдарынан жылу бөлінуі) соңғы жылдары алаңдау тудырғандықтан, параллель есептеу компьютерлік архитектурада басымдыққа ие болды, әсіресе көп ядролы процессорлар түрінде. Параллель есептеу, бір мезгілде орындалатын есептеулермен тығыз байланысты – олар көбінесе бірге қолданылады және шатастырылады, бірақ екеуі де ерекше: параллелизм қатарластырусыз болуы мүмкін, ал қатарластыру параллелизмсіз болуы мүмкін (мысалы, бір ядролы процессорда уақытты бөлісу арқылы көп тапсырмалылық). Параллель есептеуде есептеу тапсырмасы әдетте бірнеше, көбінесе көптеген, өте ұқсас, тәуелсіз өңделетін және нәтижелері аяқталғаннан кейін біріктірілетін кіші тапсырмаларға бөлінеді. Керісінше, бір мезгілде есептеуде әртүрлі процестер көбінесе байланысты емес тапсырмаларды шешеді; егер олар байланысты болса, әсіресе таратылған есептеуде, жеке тапсырмалар әртүрлі болуы мүмкін және орындалу кезінде процестер аралық байланыс қажет болуы мүмкін. Параллель компьютерлерді аппараттық деңгейдегі параллелизмді қолдау деңгейіне қарай жіктеуге болады: көп ядролы және көп процессорлы компьютерлерде бір машинада бірнеше өңдеу элементтері болады, ал кластерлер, MPP және желілер бір тапсырманы орындау үшін бірнеше компьютерлерді пайдаланады. Кейде белгілі бір тапсырмаларды жеделдету үшін арнайы параллель компьютерлік архитектуралар дәстүрлі процессорлармен бірге қолданылады. Кейбір жағдайларда параллелизм бағдарламалаушыға көрінбейді, мысалы, биттік немесе нұсқаулық деңгейдегі параллелизм, бірақ нақты параллель алгоритмдер, әсіресе қатарластыруды қолданатындар, реттік алгоритмдерге қарағанда жазуы қиынырақ, себебі қатарластыру әлеуетті бағдарламалық қателердің бірнеше жаңа кластарын енгізеді, олардың ішінде жарыс жағдайлары ең көп кездеседі. Әртүрлі қосалқы тапсырмалар арасындағы байланыс және синхрондау параллель бағдарламаның оңтайлы өнімділігіне жетудегі ең үлкен кедергілердің бірі болып табылады. Бір бағдарламаның параллельдеу нәтижесінде жылдамдығын арттырудың теориялық жоғарғы шегін Амдал заңы көрсетеді, ол параллельдеуді пайдалануға болатын уақыт үлесімен шектеледі деп айтады.

Өмірбаян

Әдетте компьютерлік бағдарламалық қамтамасыз ету сериялық есептеулер үшін жазылған. Мәселені шешу үшін алгоритм нұсқаулардың сериялық ағыны ретінде құрылады және іске асырылады. Бұл нұсқаулар бір компьютердің орталық процессорлық блогында орындалады. Бір уақытта бір ғана нұсқау орындалуы мүмкін – сол нұсқау аяқталғаннан кейін келесісі орындалады. Параллель есептеудің өзгешелігі – мәселені шешу үшін бірнеше өңдеу элементін бір мезгілде пайдалану. Бұл мәселені тәуелсіз бөліктерге бөлу арқылы жүзеге асырылады, сонда әрбір өңдеу элементі алгоритмнің өзіндік бөлігін басқаларымен қатар орындай алады. Өңдеу элементтері әртүрлі болуы мүмкін, мысалы, бірнеше процессорлары бар бір компьютер, желілік бірнеше компьютер, арнайы аппараттық құралдар немесе осылардың кез келген комбинациясы. Жиілік масштабын өзгерту 1980-жылдардың ортасынан 2004 жылға дейін компьютердің өнімділігін жақсартудың басты себебі болды. Бағдарламаның орындалу уақыты нұсқаулар санының, әрбір нұсқауды орындауға кететін орташа уақытқа көбейтілгеніне тең. Барлық басқа факторлар тұрақты болғанда, процессордың жиілігін арттыру нұсқауды орындауға қажетті орташа уақытты азайтады. Сөйтіп, жиіліктің артуы есептеуге байланысты бағдарламалардың орындалу уақытын қысқартады. Алайда, чиптің қуат тұтынуы P = C × V² × F формуласымен анықталады, мұнда C – әрбір сағат циклында ауыстырылатын сыйымдылық (кірісі өзгеретін транзисторлар санына пропорционалды), V – кернеу, ал F – процессордың жиілігі (секундына циклдар саны). Жиіліктің артуы процессордың тұтынатын қуатын арттырады. Процессордың қуат тұтынуының артуы нәтижесінде Intel компаниясы 2004 жылдың 8 мамырында Tejas және Jayhawk процессорларын тоқтатуға мәжбүр болды. Бұл оқиға компьютерлік архитектура парадигмасы ретінде жиілік масштабын өзгертудің аяқталуы деп есептеледі. Қуат тұтыну және процессордың қызып кету мәселесін шешу үшін негізгі процессорлық блогын (CPU немесе процессор) өндірушілер көп ядролы, қуатты тиімді процессорлар жасауға кірісті. Ядро – процессордың есептеу бірлігі. Көп ядролы процессорларда әрбір ядро тәуелсіз және бір мезгілде бір жадқа қол жеткізе алады. Көп ядролы процессорлар параллель есептеуді жеке компьютерлерге әкелді. Осылайша, сериялық бағдарламаларды параллельдеу бағдарламалаудың маңызды міндетіне айналды. 2012 жылы төрт ядролы процессорлар жеке компьютерлер үшін стандартқа айналды, ал серверлерде 10-нан астам ядролы процессорлар қолданылады. Мур заңына сәйкес, процессордағы ядролардың саны әр 18-24 ай сайын екі есеге артады. Бұл 2020 жылдан кейін әдеттегі процессордың ондаған немесе жүздеген ядролары болады дегенді білдіреді. Алайда, шындығында стандарт 4-тен 16-ға дейінгі ядролар аралығында, ал кейбір конструкцияларда өнімділік пен тиімділік ядроларының қосымша жиынтығы бар (мысалы, ARM-ның big.LITTLE дизайны), себебі жылулық және конструкциялық шектеулер бар. Операциялық жүйе әр түрлі тапсырмалар мен пайдаланушы бағдарламаларын қол жетімді ядроларда параллель түрде орындауды қамтамасыз ете алады. Алайда, сериялық бағдарламалық қамтамасыз ету көп ядролы архитектураның барлық мүмкіндіктерін пайдалану үшін бағдарламашы кодты қайта құрылымдап, параллельдеуі керек. Қолданбалық бағдарламалық жасақтаманың орындалу уақытын жылдамдату енді жиілікті өзгерту арқылы емес, көп ядролы архитектуралардың арта өсіп келе жатқан есептеу қуатын пайдалану үшін бағдарламалық кодты параллельдеу арқылы жүзеге асырылады.

Ұсақ, ірі және ыңғайсыз параллелизмдер

Қолданбалар көбінесе олардың ішкі тапсырмаларының қанша рет синхрондалуы немесе бір-бірімен байланысуы қажеттігіне қарай жіктеледі. Егер қолданбаның ішкі тапсырмалары секундына көп рет байланысуға мұқтаж болса, онда оған ұсақ түйірлі параллелизм тән; егер олар секундына көп рет байланыспаса, онда ірі түйірлі параллелизм тән, ал егер сирек немесе ешқашан байланысуға қажеттілік тумаса, онда оған ұятсыз параллелизм тән. Ұятсыз параллелизмге ие қолданбаларды параллелдеу ең оңай деп есептеледі.

Флинн таксономиясы

Майкл Дж. Флинн қазір Флинн таксономиясы деп аталатын, параллель (және реттік) компьютерлер мен бағдарламалар үшін ең алғашқы жіктеу жүйелерінің бірін жасады. Флинн бағдарламалар мен компьютерлерді бір немесе бірнеше нұсқаулар жиынтығын пайдалана отырып жұмыс істеуіне, сондай-ақ осы нұсқаулардың бір немесе бірнеше дерек жиынтығымен жұмыс істеуіне қарай жіктеді. Бір нұсқау, бір дерек (SISD) жіктемесі толыққанды реттік бағдарламамен тең. Бір нұсқау, көп дерек (SIMD) жіктемесі үлкен деректер жиынтығы бойынша бір операцияны қайталап орындаумен сабақтас. Бұл көбінесе сигналды өңдеу саласында қолданылады. Көп нұсқау, бір дерек (MISD) жіктемесі сирек қолданылады. Осыған қатысты компьютерлік архитектуралар (мысалы, систолалық тізбектер) құрастырылғанмен, осы жіктемеге сәйкес келетін көптеген қолданбалар пайда болған жоқ. Көп нұсқау, көп дерек (MIMD) бағдарламалары – параллель бағдарламалардың ең көп таралған түрі. Дэвид А. Паттерсон мен Джон Л. Хеннесси айтқандай, "Әрине, кейбір машиналар осы санаттардың аралас түрлері болып табылады, бірақ бұл классикалық модель қарапайым, түсінуге оңай және жақсы алғашқы жуықтама беретіндіктен сақталды. Бұл, мүмкін, оның түсініктілігіне байланысты, ең көп қолданылатын схема".

Бит деңгейіндегі параллелизм

1970-ші жылдары өте ірі масштабтағы интеграция (VLSI) компьютерлік чиптерді жасау технологиясының пайда болуынан бастап 1986 жылға дейін компьютерлік архитектураның жылдамдығы компьютерлік сөз өлшемін екі есеге көбейту арқылы артты. Компьютерлік сөз өлшемі – процессор бір цикл ішінде өңдей алатын ақпарат мөлшері. Сөз өлшемін ұлғайту процессордың сөз ұзындығынан үлкен айнымалыларға операция жасау үшін орындауы тиіс нұсқаулар санын азайтады. Мысалы, 8 биттік процессор екі 16 биттік бүтін санды қосу керек болса, процессор алдымен стандартты қосу нұсқауын пайдаланып әрбір бүтін санның кіші 8 битін қосуы керек, содан кейін жоғары 8 биттін қосу үшін тасымалдау қосу нұсқауын және кіші қосудан алынған тасымалдау битін пайдалануы керек. Осылайша, 8 биттік процессор бір операцияны аяқтау үшін екі нұсқау қажет, ал 16 биттік процессор операцияны бір нұсқаумен аяқтай алады. Тарихи тұрғыдан алғанда, 4 биттік микропроцессорлар 8 биттік, содан кейін 16 биттік, содан кейін 32 биттік микропроцессорлармен алмастырылды. Бұл үрдіс, әдетте, 32 биттік процессорлардың енгізілуімен аяқталды, олар екі онжылдық бойы жалпы мақсаттағы есептеулерде стандарт болып келді. 2000-жылдардың басында x86 64 архитектурасының пайда болуымен 64 биттік процессорлар кеңінен қолданыла бастады.

Нұсқаулық деңгейіндегі параллельдік

Компьютерлік бағдарлама, по сути, процессор орындайтын нұсқаулар ағыны. Нұсқау деңгейіндегі параллелизм болмаса, процессор бір сағат циклына бірден кем нұсқау шығара алады (IPC < 1). Мұндай процессорлар субскалярлы процессорлар деп аталады. Бұл нұсқауларды қайта реттеуге және оларды топтарға біріктіруге болады, содан кейін олар бағдарламаның нәтижесін өзгертпей параллель орындалады. Бұл нұсқау деңгейіндегі параллелизм деп аталады. 1980 жылдардың ортасынан 1990 жылдардың ортасына дейін компьютерлік архитектурада нұсқау деңгейіндегі параллелизм үстемдік құрды. Барлық заманауи процессорларда көп сатылы нұсқау құбырлары бар. Құбырдың әрбір сатысы процессордың сол сатыдағы нұсқау бойынша орындайтын әртүрлі әрекетке сәйкес келеді; N сатылы құбыр желісі бар процессорда әртүрлі аяқталу сатыларында N-ге дейін әртүрлі нұсқаулар болуы мүмкін, демек ол сағат циклына бір нұсқау шығара алады (IPC = 1). Мұндай процессорлар скалярлы процессорлар деп аталады. Құбырлы процессордың классикалық мысалы – бес сатысы бар RISC процессоры: нұсқауды алу (IF), нұсқауды декодтау (ID), орындау (EX), жадқа қол жеткізу (MEM) және тіркегішке мәнді қайта жазу (WB). Pentium 4 процессорында 35 сатылы құбыр желісі болды. Көптеген заманауи процессорларда бірнеше орындау блогы бар. Олар әдетте осы мүмкіндікті құбырмен үйлестіреді, соның салдарынан сағат циклына бірден көп нұсқау шығара алады (IPC > 1). Мұндай процессорлар суперскалярлы процессорлар деп аталады. Суперскалярлы процессорлар көп ядролы процессорлардан өзгеше, себебі бірнеше орындау блогы толыққанды процессорлар (яғни өңдеу бірліктері) емес. Нұсқауларды деректердің өзара тәуелділігі болмаса ғана топтастыруға болады. Скорборд және Томасуло алгоритмі (ол скорбордқа ұқсас, бірақ тіркегіштерді қайта атауды қолданады) – бұл реттіліксіз орындау және нұсқау деңгейіндегі параллелизмді іске асырудың ең көп таралған әдістерінің екеуі.

Тапсырмалардың қатар жүруі

Тапсырмалық параллелизм – параллель бағдарламаның ерекшелігі, ол "бірдей немесе әртүрлі деректер жиындары бойынша мүлдем әртүрлі есептеулерді орындау мүмкіндігін" білдіреді. Бұл деректерлік параллелизмнен өзгеше, онда бірдей деректер жиындарының үстінде немесе әртүрлі деректер жиындарының үстінде бірдей есептеулер орындалады. Тапсырмалық параллелизм тапсырманы кішігірім тапсырмаларға бөлуден және әрбір кішігірім тапсырманы орындау үшін процессорға жүктеуден тұрады. Содан кейін процессорлар осы кішігірім тапсырмаларды бір уақытта және көбінесе өзара әрекеттесе орындайды. Тапсырмалық параллелизм көбінесе проблеманың мөлшеріне пропорционалды өспейді.

Суперсөз деңгейіндегі параллелизм

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

Есте сақтау және қарым-қатынас

Паралель компьютердегі негізгі жад – ортақ жад (бір адрес кеңістігіндегі барлық өңдеу элементтері арасында ортақ) немесе таратылған жад (әрбір өңдеу элементінің өзінің жергілікті адрес кеңістігі бар). Таратылған жад жадтың логикалық түрде таратылуын білдіреді, бірақ көбінесе ол физикалық түрде де таратылуын білдіреді. Таратылған ортақ жад және жадты виртуализациялау екі тәсілді біріктіреді, мұнда өңдеу элементінің өз жергілікті жады және жергілікті емес процессорлардағы жадқа қол жеткізу мүмкіндігі бар. Жергілікті жадқа қол жеткізу әдетте жергілікті емес жадқа қол жеткізуден жылдам. Суперкомпьютерлерде PGAS сияқты бағдарламалау моделін қолдана отырып, таратылған ортақ жад кеңістігін жүзеге асыруға болады. Бұл модель бір есептеу торабындағы процестерге басқа есептеу торабының қашықтағы жадына ашық түрде кіруге мүмкіндік береді. Барлық есептеу тораптары сонымен қатар жоғары жылдамдықты өзара байланыс арқылы сыртқы ортақ жад жүйесіне қосылады, мысалы Infiniband, бұл сыртқы ортақ жад жүйесі жарылыс буфері деп аталады, ол әдетте бірнеше I/O тораптарына физикалық түрде бөлінген ұшпалы емес жад массивтерінен құрылады. Негізгі жадтың әрбір элементіне бірдей күту уақыты мен жолақтылықпен қол жеткізуге болатын компьютерлік архитектуралар бірыңғай жадқа қол жеткізу (UMA) жүйелері деп аталады. Әдетте, бұл жад физикалық түрде бөлінбеген ортақ жад жүйесі арқылы ғана қол жеткізіледі. Бұл қасиетке ие емес жүйе біркелкі емес жадқа қол жеткізу (NUMA) архитектурасы деп аталады. Таратылған жад жүйелері біркелкі емес жадқа қол жеткізе алады. Компьютерлік жүйелер процессорға жақын орналасқан кэштерді – шағын және жылдам естеліктер пайдаланады, олар жад құндылықтарының уақытша көшірмелерін сақтайды (физикалық және логикалық мағынада жақын). Параллель компьютер жүйелерінде бір мәнді бірнеше жерде сақтайтын кэштерде қиындықтар болады, бұл бағдарламаның дұрыс орындалмауы мүмкіндігін тудырады. Бұл компьютерлерге кэштік когеренттілік жүйесі қажет, ол кэштелген мәндерді қадағалап, оларды стратегиялық түрде тазартады, осылайша бағдарламаның дұрыс орындалуын қамтамасыз етеді. Шинаны бақылау (bus snooping) – қандай мәндерге қол жеткізіліп жатқанын (соған сәйкес тазалануы керек) бақылаудың ең кең таралған әдістерінің бірі. Үлкен, жоғары өнімді кэшке сәйкестік жүйелерін жобалау компьютерлік архитектурада өте қиын мәселе болып табылады. Нәтижесінде ортақ жады компьютерлік архитектуралары таратылған жад жүйелері сияқты жақсы масштабталмайды. Шинадағы кедергі (bus contention) шина архитектурасының масштабталуына кедергі келтіреді. Нәтижесінде, SMP-де 32 процессордан артық емес. Процессорлардың кішігірім көлемі және үлкен кэштер арқылы жүзеге асырылатын шина жолақтығы талаптарының едәуір азаюы, осындай симметриялық мультипроцессорларды, егер жеткілікті мөлшерде жад жолақтығы болса, өте тиімді етеді. Бір жүйе "паралельді" және "таратылған" деп сипатталуы мүмкін; типтік таратылған жүйедегі процессорлар бір мезгілде қатар жұмыс істейді.

Кластерлік есептеу

Кластер – бір-бірімен тығыз байланыста жұмыс істейтін, кейбір жағдайларда оларды бір компьютер ретінде қарастыруға болатын, еркін біріктірілген компьютерлер тобы. Кластерлер желі арқылы байланысқан бірнеше дербес машиналардан құралады. Кластердегі машиналар міндетті түрде симметриялық болуы керек емес, бірақ олар симметриялық болмаса жүктемені теңестіру қиынырақ. Кластерлердің ең көп таралған түрі – Beowulf кластері, ол TCP/IP Ethernet жергілікті желісіне қосылған бірнеше бірдей коммерциялық компьютерлерде іске асырылған кластер. Beowulf технологиясын Томас Стерлинг пен Дональд Беккер әзірлеген. Барлық Top500 суперкомпьютерлерінің 87%-ы кластерлер болып табылады. Қалғандары – төменде сипатталатын Массивті Параллельді Процессорлар. Желілік есептеу жүйелері (төменде сипатталған) өте оңай шешілетін параллель есептерді оңай өңдей алатындықтан, қазіргі кластерлер көбінесе күрделі есептерді шешуге арналған – түйіндердің аралық нәтижелерді бір-бірімен жиі бөлісуін қажет ететін есептерді. Бұл үшін жоғары өткізу қабілеті және, ең бастысы, төмен задержкалы (latency) байланыс желісі қажет. Көптеген тарихи және қазіргі суперкомпьютерлер кластерлік есептеулер үшін арнайы жасалған жоғары өнімділікке ие желілік жабдықты пайдаланады, мысалы, Cray Gemini желісі. 2014 жылғы мәліметтер бойынша, қазіргі суперкомпьютерлердің көпшілігі стандартты желілік жабдықты қолданады, көбінесе Myrinet, InfiniBand немесе Gigabit Ethernet.

Үлкен қатарлы есептеу

Массивті параллель процессор (МПП) – көптеген желілік процессорлары бар бір компьютер. МПП-лер кластерлерге ұқсас сипаттамаларға ие, бірақ МПП-лерде арнайы өзара байланыс желілері болады (ал кластерлер желі құру үшін стандартты жабдықты пайдаланады). МПП-лер әдетте кластерлерден үлкен болады, көбінесе 100-ден астам процессорлары бар. МПП-де "әрбір процессорда өз жадысы, операциялық жүйесі және қосымшаның көшірмесі болады. Әрбір подсистема жоғары жылдамдықты желі арқылы басқа подсистемалармен байланысады". IBM-нің Blue Gene/L суперкомпьютері 2009 жылғы маусым айындағы TOP500 рейтингісінде әлемдегі бесінші орында тұрған суперкомпьютер.

Желілік есептеу

Желілік есептеу – параллель есептеудің ең тараған түрі. Ол белгілі бір мәселені шешу үшін интернет арқылы байланысатын компьютерлерді пайдаланады. Интернеттегі жолақтың төмендігі және өте жоғары жауап уақытының болуына байланысты, үлестірілген есептеулер көбінесе тек өте оңай параллель есептеулермен айналысады. Желілік есептеудің көптеген қолданбалары аралық бағдарламалық құралдарды (желілік ресурстарды басқару және бағдарламалық интерфейсті стандарттау үшін операциялық жүйе мен қолданба арасында орналасқан бағдарламалық жасақтама) пайдаланады. Желілік есептеудегі ең көп қолданылатын аралық бағдарламалық құрал – Желілік есептеуге арналған Беркли ашық инфрақұрылымы (BOINC). Көбінесе, ерікті есептеу бағдарламалық жасақтамасы «бос циклдарды» пайдаланады, яғни компьютер бос тұрғанда есептеулерді орындайды.

Бұлтты есептеу

Интернеттің кең таралғандығы ірі көлемді бұлттық есептеулерді мүмкін етті.

Мамандандырылған параллель компьютерлер

Параллель есептеулерде, қызығушылық танылатын арнайы параллель құрылғылар бар, бірақ олар шешім табудың ерекше саласы болып табылады. Бұл құрылғылар нақты бір салаға бағытталмағанмен, көбінесе параллель есептеулердің тек бірнеше түріне ғана қолданылады.

Реконфигурацияланатын есептеулер, өрісте бағдарламаланатын қақпа массивтерімен

Қайта конфигурацияланатын есептеу – бұл жалпы мақсаттағы компьютердің копроцессоры ретінде өрістегі бағдарламаланатын қақпа массивін (FPGA) пайдалану. FPGA – бұл белгілі бір міндетті орындау үшін өзін-өзі қайта бағдарлай алатын компьютерлік чип. FPGA-лар VHDL немесе Verilog сияқты аппараттық сипаттама тілдерімен бағдарламаланады. Көптеген өндірушілер C-ден HDL-ге тілдерді жасады, олар көптеген бағдарламашыларға таныс C бағдарламалау тілінің синтаксисі мен семантикасын имитациялауға тырысады. C-ден HDL-ге ең танымал тілдер – Mitrion C, Impulse C және Handel C. Бұл мақсатта C++ негізіндегі SystemC-дің белгілі бір кіші топтарын да қолдануға болады. AMD компаниясының HyperTransport технологиясын үшінші тарап өндірушілеріне ашуы жоғары өнімділіктегі қайта конфигурацияланатын есептеуді іске қосуға мүмкіндік берді. DRC Computer Corporation компаниясының операциялық директоры Майкл Р. Д’Амурдың айтуынша, «біз алғаш рет AMD компаниясына келгенде, олар бізді ‘разъем ұрлаушылар’ деп атады. Енді олар бізді өз серіктестері деп атайды». Компьютерлік графикалық өңдеу – деректерде параллель операцияларға, әсіресе сызықтық алгебра матрицалық операцияларына негізделген сала. Бастапқыда GPGPU бағдарламалары бағдарламаларды орындау үшін стандартты графикалық API-ларды пайдаланды. Алайда, GPU-да жалпы мақсаттағы есептеулерді жүзеге асыру үшін бірнеше жаңа бағдарламалау тілдері мен платформалар құрылды, ал Nvidia және AMD CUDA және Stream SDK бағдарламалық орталарын ұсынды. Басқа GPU бағдарламалау тілдеріне BrookGPU, PeakStream және RapidMind жатады. Nvidia сонымен қатар Tesla сериясында есептеулерге арналған арнайы өнімдерді шығарды. Технологиялық консорциум Khronos Group OpenCL спецификациясын жариялады, ол CPU және GPU-дан тұратын платформаларда орындалатын бағдарламаларды жазу үшін құрылғы. AMD, Apple, Intel, Nvidia және басқа да компаниялар OpenCL-ді қолдайды.

Қолданбаға арналған интегралды схемалар

Параллель қосымшаларды шешу үшін бірнеше арнайы интегралды схема (ASIC) тәсілдері әзірленді. ASIC белгілі бір қосымшаға (анықтама бойынша) қатысты болғандықтан, оны осы қосымшаға толықтай оңтайландыруға болады. Осының нәтижесінде, белгілі бір қолданба үшін ASIC жалпы мақсаттағы компьютерден жоғары өнімділік көрсетеді. Дегенмен, ASIC-тер ультракүлгін фотолитография арқылы жасалады. Бұл процеске өте қымбатқа түсуі мүмкін маскалар жиынтығы қажет. Маскалар жиынтығының құны миллион АҚШ долларынан асуы мүмкін. (Микросхема үшін қажетті транзисторлардың мөлшері неғұрлым кішкентай болса, масканың құны да соғұрлым жоғары болады.) Ал жалпы мақсаттағы есептеулердегі өнімділіктің уақыт өте келе артуы (Мур заңында сипатталғандай) осы жетістіктерді бір-екі чип буынында жоюы мүмкін. Олар Флинннің SIMD жіктемесімен тығыз байланысты. Параллель бағдарламаларды бағдарламалауда қолданылатын бір ұғым – болашақ ұғымы, онда бағдарламаның бір бөлігі бағдарламаның басқа бөлігіне қажетті деректі кейбір уақытта жеткізуге міндеттенеді. Параллель бағдарламалауды стандарттауға бағытталған күш-жігерге OpenHMPP деп аталатын ашық стандарт кіреді. OpenHMPP директиваға негізделген бағдарламалау моделі аппараттық үдеткіштерге есептеулерді тиімді жүктеу және қашықтан процедура шақыру арқылы аппараттық жадқа / одан деректерді оңтайландыру үшін синтаксис ұсынады. Тұтынушы GPU-ларының кең таралғаны графикалық API-лерде (есептеу шейдерлері деп аталады), арнайы API-лерде (мысалы, OpenCL) немесе басқа тілдік кеңейтулерде есептеу ядроларын қолдауға мүмкіндік берді.

Автоматты қатарластыру

Компилятордың ретті бағдарламаны автоматты түрде параллельдеуі – параллель есептеудің "қиялы", әсіресе жоғарыда айтылған процессор жиілігінің шектеуімен. Компилятор зерттеушілерінің ондаған жылдық жұмысына қарамастан, автоматты параллельдеудің жетістігі шектеулі болды. Көпте қолданылатын параллель бағдарламалау тілдері әлі де ашық түрде параллельді болып табылады немесе (ең жақсы жағдайда) ішінара жасырын, онда бағдарламашы компиляторға параллельдеуге қатысты нұсқаулар береді. Толыққанды жасырын параллельді бағдарламалау тілдерінің бірнеше мысалы бар: SISAL, Parallel Haskell, SequenceL, System C (FPGA үшін), Mitrion C, VHDL және Verilog.

Қолданбаның бақылау нүктелері

Компьютерлік жүйе күрделілігі артқан сайын, әдетте, ең соңғы сәтсіздіктер арасындағы орташа уақыт қысқарады. Қолданбаны сақтау нүктесі – компьютерлік жүйе қолданбаның «көрінісін» жасайды, яғни барлық ағымдағы ресурстардың бөлінуі мен айнымалы күйлерінің тізімін, ол ядролық төгілуге ұқсас; бұл ақпарат компьютер істен шыққан жағдайда бағдарламаны қалпына келтіру үшін қолданылады. Қолданбаны сақтау нүктесі бағдарламаның басынан емес, соңғы сақтау нүктесінен қайта басталатынын білдіреді. Сақтау нүктесі түрлі жағдайларда тиімді болғанымен, ол жоғары өнімді есептеулерде қолданылатын көп процессорлы, жоғары параллельді жүйелерде ерекше пайдалы.

Қатеге төзімділік

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

Тарих

[[Файл:ILLIAC 4 параллельді компьютер. jpg|right|thumbnail|ILLIAC IV, "суперкомпьютерлердің ең танымал мысалы"

1957 жылы Compagnie des Machines Bull компаниясы Gamma 60 деп аталатын, параллелизм үшін арнайы жасалған алғашқы компьютерлік архитектураны жариялады. Ол fork join моделі мен "Program Distributor" ("Бағдарлама таратушы") жүйесін пайдаланды, бұл жүйе орталық жадқа қосылған тәуелсіз өңдеу бірліктеріне деректерді жіберу және олардан жинау үшін қолданылды. 1958 жылдың сәуірінде Стэнли Гилл (Ferranti) параллель бағдарламалау және тармақталу мен күту қажеттілігі туралы әңгімеледі. Сондай-ақ 1958 жылы IBM зерттеушілері Джон Кокк және Дэниел Слотник сандық есептеулерде параллелизмді қолдану мүмкіндігін алғаш рет талқылады. Burroughs Corporation компаниясы 1962 жылы D825 компьютерін ұсынды, ол төрт процессорлы және кроссбарлық коммутатор арқылы 16 жад модуліне қол жеткізе алатын. 1967 жылы Амдал мен Слотник Америкалық ақпаратты өңдеу қоғамының конференциясында параллель өңдеудің мүмкіндігі туралы пікір алмасты. 1964 жылы Слотник Лоренс Ливермор ұлттық зертханасы үшін үлкен параллельді компьютер құруды ұсынды. 1976 жылы алғашқы нақты қолданбасын іске қосуға дайын болғанда, ол Cray 1 сияқты коммерциялық суперкомпьютерлерге қарағанда нашар өнімділік көрсетті.