Кіріспе
Паралельдікке қол жеткізу үшін қолданылатын есептеу техникасы
Есептеуде, бір бағдарлама, көп дерек (SPMD) – бірнеше процессорлар бағдарламаны орындау кезінде нәтижелерді жылдам алу үшін ынтымақтаса жұмыс істейтін параллельдікті пайдалануға арналған есептеу модельдерін білдіретін термин. SPMD термині 1983 жылы енгізілді және екі түрлі есептеу моделін көрсету үшін қолданылды:
Мишель Огуэн (Ницца университеті София Антиполис) және Франсуа Ларби (Томсон/Синтра) тарапынан, "бөліп орындау" және деректер параллельді тәсіл ретінде, онда параллельді тапсырмалар ("бір бағдарлама") бөлініп, әртүрлі кіріс деректері бар бірнеше SIMD процессорларында бір уақытта синхронды түрде орындалады, және
Фредерика Дарема (IBM) тарапынан, онда барлық (процессорлар) процестер бір бағдарламаны орындауды бастайды, бірақ синхрондау директивалары арқылы әртүрлі нұсқауларды орындауға және әртүрлі деректермен жұмыс істеуге өздігінен жоспарлайды, сондай-ақ берілген бағдарламаның MIMD параллельділігін қамтамасыз етеді, бұл деректер параллельділігінен гөрі жалпылама тәсіл және жалпы мақсаттағы көппроцессорларда параллельді орындау үшін "бөліп орындау" тәсілінен тиімді. (IBM) SPMD – параллельді бағдарламалаудың ең көп таралған стилі және берілген ("бір") бағдарламаның MIMD орындалуымен байланысты болғандықтан, оны MIMD-дің кіші түрі деп қарастыруға болады. Бұл сонымен қатар белсенді хабарламалар және бөлінген жад сияқты зерттеу концепцияларының қажетті шарты болып табылады.
by Frederica Darema (IBM), where “all (processors) processes begin executing the same program but through synchronization directives self schedule themselves to execute different instructions and act on different data” and enabling MIMD parallelization of a given program, and is a more general approach than data parallel and more efficient than the fork and join for parallel execution on general purpose multiprocessors. The (IBM) SPMD is the most common style of parallel programming and can be considered a subcategory of MIMD in that it refers to MIMD execution of a given (“single”) program. It is also a prerequisite for research concepts such as active messages and distributed shared memory.
SPMD және SIMD
SPMD параллель орындалуында, бірнеше автономды процессорлар SIMD немесе SIMT-тың әртүрлі деректерге қатысты синхронды түрде орындау қағидасынан өзгеше, тәуелсіз нүктелерде бірдей бағдарламаны бір мезгілде орындайды. SPMD арқылы тапсырмаларды жалпы мақсаттағы процессорларда орындауға болады. SIMD-де деректер ағындарын өңдеу үшін бір операция (нұсқау) бірнеше дерекке қолданылады (SIMD-дың бір түрі – векторлық өңдеу, онда деректер векторлар түрінде ұйымдастырылады). Процессорлардың тағы бір класы – GPU, бірнеше SIMD ағындарын өңдейді. SPMD және SIMD өзара қосаулы емес; SPMD параллель орындалуы SIMD, векторлық өңдеу немесе GPU-ның қосалқы өңдеуін қамтуы мүмкін. SPMD хабар алмасу және ортақ жадты архитектурада параллель бағдарламалау үшін қолданылған.
Бөлінген жады
Бөлінген жадты компьютерлік архитектураларда SPMD іске асырылымдары әдетте хабар алмасу бағдарламалауын қолданады. Бөлінген жадты компьютер – өзара байланысқан, тәуелсіз компьютерлер жиынтығынан тұрады, олар түйіндер деп аталады. Параллель орындау үшін әрбір түйін өз бағдарламасын іске қосады және басқа түйіндермен хабарларды жіберу және қабылдау арқылы байланысады, осы мақсатта жіберу/қабылдау процедураларын шақырады. Басқа параллельдеу директивалары, мысалы, кедергі синхрондау, хабарлар арқылы да іске асырылуы мүмкін. Хабарлар бірнеше байланыс механизмдері арқылы жіберіледі, мысалы, Ethernet арқылы TCP/IP немесе Myrinet және Supercomputer Interconnect сияқты арнайы жоғары жылдамдықты өзара байланыстар арқылы. Бөлінген жадты ортада бағдарламаның тізбекті бөлімдері бір түйінде нәтижені есептеу және оны басқаларына жіберудің орнына, барлық түйіндерде тізбекті бөлімді бірдей есептеу арқылы іске асырылуы мүмкін, егер бұл байланыс шығындарын азайту арқылы өнімділікті арттырса. Бүгінде бағдарламашы PVM және MPI сияқты стандартты интерфейстер арқылы хабар алмасудың егжей-тегжейінен оқшауланған. Бөлінген жад – үйде жасалған Beowulf кластерлерінен бастап Teragrid-тегі ең ірі кластерлерге дейін, сондай-ақ қазіргі GPU-негізделген суперкомпьютерлерде қолданылатын бағдарламалау стилі.
Ортақ жады
Ортақ жад машинасы (бірнеше өзара байланысты процессорлары бар және бірдей жад кеңістігіне қол жеткізетін компьютер) ішінде ортақ пайдалану физикалық ортақ жад немесе логикалық ортақ (бірақ физикалық түрде бөлінген) жад арқылы жүзеге асырылуы мүмкін. Ортақ жадтан өзге, компьютер жүйесіндегі процессорлар жергілікті (немесе жеке) жадты да қамтуы мүмкін. Мұндай жағдайларда, синхрондау аппараттық қолдауға ие примитивтермен (мысалы, салыстыру және алмастыру немесе алу және қосу) қамтамасыз етілуі мүмкін. Егер аппараттық қолдау болмаса, құлыптар қолданылуы мүмкін, ал деректер процессорлар (немесе жалпы алғанда, процестер немесе жіптер) арасында ортақ жад аймағына салынған деректерді алмастыру арқылы таратылуы мүмкін. Аппараттық жадты ортақ пайдалануды қолдамаса, деректерді «хабарлама» түрінде жинақтау, процессорлардың көп саны бар компьютерлерді (логикалық түрде) бағдарламалаудың тиімді жолы болып табылады, онда физикалық жад процессорларға тиесілі болады және басқа процессордың жадына қол жеткізу ұзаққа созылуы мүмкін. Ортақ жад машинасының SPMD-сі стандартты процестер (ауыр салмақты) немесе жіптер (жеңіл салмақты) арқылы іске асырылуы мүмкін. Ортақ жадты көппроцессорлық өңдеу (симметриялық көппроцессорлық өңдеу, SMP және біркелкі емес жадқа қол жеткізу, NUMA) бағдарламашыға ортақ жад кеңістігін және орындалуды параллельдеу мүмкіндігін ұсынады. (IBM) SPMD моделінде бірлесіп жұмыс істейтін процессорлар (немесе процестер) бағдарлама арқылы әртүрлі жолдармен өтеді, параллель директиваларды (параллельдеу және синхрондау директивалары, олар салыстыру және алмастыру, сондай-ақ ортақ жад синхрондау айнымалыларында алу және қосу операцияларын пайдалана алады) қолданады және ортақ жадтағы деректермен операциялар жасайды («ортақ деректер»); процессорлар (немесе процестер) сондай-ақ жергілікті жадтағы деректерге қол жеткізе алады және олармен операциялар жасайды («жеке деректер»). Ал, бұранда және біріктіру тәсілдерінде бағдарлама бір процессорда орындала бастайды және орындалу параллель аймақта бөлінеді, бұл параллель директивалар кездескенде басталады; параллель аймақта процессорлар әртүрлі деректерде параллель тапсырманы орындайды. Типтік мысал – параллель DO циклы, онда әртүрлі процессорлар циклға қатысатын массивтердің бөлек бөліктерімен жұмыс істейді. Цикл аяқталғаннан кейін орындалу синхрондалады (жұмсақ немесе қатты кедергілермен) – «параллель есептеуге қатысатын барлық процестер орындалудың басында құрылады және оның соңына дейін сақталады», (процессорлар/процестер) «әр түрлі нұсқауларды орындайды және әртүрлі деректермен әрекеттеседі», «әр процеске жүктелетін жұмыс (тапсырма) динамикалық түрде бөлінеді», яғни процестер «әр түрлі нұсқауларды орындау үшін және әртүрлі деректермен әрекеттесу үшін өздігінен жоспарлайды», осылайша бағдарламадағы қатар және параллель тапсырмаларды (сондай-ақ тапсырмаларды көшіруді) орындау үшін ынтымақтастыққа өздерін тағайындайды. Процесс түсінігі процессор терминінің жалпылама түрі ретінде қолданылды, себебі бірнеше процесс процессорда орындалуы мүмкін (мысалы, тиімділік пен жүктеме теңгерімділігі үшін үлкен дәрежеде параллелизмді пайдалану үшін). (IBM) SPMD моделі Darema тарапынан сол кездегі қауымдастықта барлық басқалар ұстанған бұранда және біріктіру тәсілінен өзгеше және тиімдірек тәсіл ретінде ұсынылды; ол «деректер параллельді» есептеу моделінен де жалпырақ және бұранда және біріктіруді қоса алады (ішкі санатты іске асыру ретінде). (IBM) SPMD-нің бастапқы контексі RP3 компьютері (512 процессорлық IBM Research Parallel Processor Prototype) болды, ол жалпы мақсаттағы есептеуді, сондай-ақ бөлінген және (логикалық) ортақ жадты қолдады. (IBM) SPMD-нің тиімділігі қосымшалардың кең класы үшін, параллель бағдарламалаудағы алғашқы өнімдік өнім ретінде, MPI (1991 жылдан бастап), OpenMP (1997 жылдан бастап) және (IBM) SPMD есептеу моделін қабылдаған және сілтеме жасайтын басқа орталарда көрсетілді. 1980 жылдардың соңында көптеген бөлінген компьютерлер мен меншіккілік хабар алмасу кітапханалары пайда болды. SPMD-нің алғашқы стандарты PVM болды. Қазіргі де-факто стандарты MPI болып табылады. Cray параллельдік директивалары OpenMP-нің тікелей алдын бағыттары болды.