Кіріспе

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

Паралельдеу мүмкіндігі

Алгоритмдердің параллельдеуге болатын деңгейі әртүрлі, оңай параллельдеуге болатындардан толығымен параллельдеуге келмейтіндерге дейін. Сонымен қатар, бір мәселені шешу үшін әртүрлі алгоритмдер қолданылуы мүмкін, олардың параллельдеу мүмкіндігі де әртүрлі болуы мүмкін. Кейбір мәселелерді осылай бөліктерге бөлу оңай – мұндайларын "өте оңай параллельдеуге болатын" мәселелер деп атайды. Мысалы, Рубик кубын шешуге арналған көптеген алгоритмдер мен белгілі бір хэш нәтижесін беретін мәндерді табу алгоритмдерін осыған жатқызуға болады. Ал кейбір мәселелерді параллель бөліктерге бөлу мүмкін емес, себебі олар келесі қадамды тиімді орындау үшін алдыңғы қадамның нәтижелерін қажет етеді. Мұндай мәселелерді "негізінен тізбекті" мәселелер деп атайды. Мысалдарға Ньютон әдісі сияқты итеративтік сандық әдістер, үш денелік мәселенің итеративтік шешімдері және пи (π) санын есептеуге қолданылатын көптеген алгоритмдер жатады. Кейбір тізбекті алгоритмдерді автоматты параллельдеу арқылы параллель алгоритмдерге түрлендіруге болады.

Мотивация

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

Байланыс

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

Жүк тепе-теңдігін сақтау

Паралель алгоритмдермен байланысты тағы бір мәселе – олардың тиімді жүктеме теңгерімін қамтамасыз ету, яғни кіріс мөлшерін теңгерімдеудің орнына, жүктеменің (жалпы жұмыстың) теңгерімді болуын қадағалау. Мысалы, бірден жүз мыңға дейінгі сандарды жай сан екенін анықтау процессорлар арасында оңай бөліседі; бірақ, егер сандар тең бөлінсе (1–1000, 1001–2000, және т.б.), жұмыс көлемі теңгерімсіз болады, себебі кішірек сандарды осы алгоритммен өңдеу оңай (жай сан екенін тексеру оңай), сондықтан кейбір процессорлар басқаларына қарағанда көп жұмыс істейді, ал қалғандары жүктеме алған процессорлар жұмысын аяқтағанға дейін бос күйінде тұрады.

Таратылған алгоритмдер

Параллель алгоритмдердің бір түрі – үлестірілген алгоритмдер – кластерлік және үлестірілген есептеу орталарында жұмыс істеу үшін жасалған алгоритмдер. Бұл орталарда "классикалық" параллель алгоритмдерде қарастырылмаған қосымша мәселелерді шешу қажет.