Характеристики на паралелизма
1.2.2. Характеристики на паралелизма.
На този етап, следвайки [1], ще характеризираме различни характеристики и видове паралелизъм, които са от съществено значение от гледна точка на намирането на адекватни езикови средства за неговото изразяване. Естествено, в крайна сметка понятието паралелизъм се свързва с едновременността на действията или процесите, извършвани в дискретно време. Широко известните концепции за синхронност и асинхронност на протичащите процеси отразяват допустимите схеми и "граници" на взаимодействието на процесите. Търсенето на модели на абсолютно асинхронни или абсолютно паралелни процеси, въпреки че е неразрешим проблем, въпреки това поставя съвсем естествен и важен за паралелни изчисления проблем за сравняване на изразителната сила на различни подходи, модели и езици, свързани с паралелното програмиране.
Една от важните характеристики на паралелността е начинът, по който се уточнява: явен или неявен.
Първият предполага съществуването на език или определен набор от примитиви, чрез които програмистът описва в програмата паралелно интересуващите го действия. Примитивите parbeginparend, fork-join, инструменти за задаване на паралелни процеси в MPI, PVM и много други подобни софтуерни инструменти за определяне на паралелизъм, накрая, различни модели на процеси (мрежи на Петри, модели на взаимодействие между процеси на Milner и Hoare [34] и др.) .) и т.н. ... - примери за изрично уточняване на паралелизъм.
Паралелизмът имплицитно присъства в почти всяка последователна програма и често може да бъде успешно открит от компилатора, паралелизмът е имплицитно отразен в аритметични или логически изрази, благодарение на свойствата на операциите (асоциативност, комутативност, разпределителност), използвани при тяхното изграждане.
Паралелизмът имплицитно присъства във функционалните езици [5, 6], логика от първи ред, Prolog. Поради факта, че тези езици имат строга детонационна семантика и независима паралелна оперативна семантика (във функционалните езици - тази семантика се осъществява чрез процесите на сгъване и разширяване на дървета [5, 6], в логически формализми и езици - чрез изграждането на паралелни алгоритми за извод [7]) ... Освен това всеки опит да се посочи изрично какво трябва да се изпълнява паралелно в този вид програми изглежда неестествено и освен това почти винаги ще доведе до факта, че много възможности за успоредяване просто ще бъдат загубени.
Очевидно имплицитните начини за отразяване на паралелизма без позоваване на процеса на паралелно изпълнение на програмата имат предимството, че разделят аспектите на програмирането и самата организация на паралелното изпълнение на програмата; програмистът не се нуждае, като например при използване на MPI, на от една страна, за програмиране на функция или алгоритъм, който прилага метод за решаване на проблема. От друга страна, за решаване на друг проблем, как да се организират паралелни процеси на неговото изпълнение.
Друг аспект на характеризирането на паралелизма е свързан с проблемно-ориентираната езикова среда, чрез която се описва паралелна програма.
В тази връзка се разграничават видовете паралелизъм: функционален, логичен, паралелизъм на последователни програми, паралелизъм на обектно-ориентирани програми, паралелизъм на процеса.
Всеки от посочените видове паралелизъм се основава на определена парадигма на програмиране и има свои собствени характеристики, които се проявяват както в начините за неговото откриване, така и в присъщия му модел и изпълнение на процеса.
Говорейки за паралелизъм на процеса, имаме предвид различни модели на процесите (мрежи на Петри, модели на Хоаре и Милнър, модели на актьори и др. [8]) Говорейки за паралелизъм на процеса, имаме предвид различни модели процеси () на процеса на промяна просто ще бъдат загубени. Естествено ), в която се изясняват основните понятия, свързани с генерирането и взаимодействието на процесите.
Именно на базата на тези модели са внедрени много езици на процесите (например OCCAM), OS инструменти за организиране на процеси с "нишка" и т.н.
Друг важен в практически смисъл аспект при характеризирането на паралелизма са ограниченията върху „зърнистостта“, за да се изясни кои понятия обикновено се използват: едрозърнест, среден и финозърнест паралелизъм (възможна е и по-подробна скала на диференциация).
Дълбочината на паралелизацията, която беше обсъдена в раздел (1.2.1), изяснява тази концепция. Обикновено крупон - гранулираният паралелизъм се свързва с модулното програмиране, с разработването на сложни софтуерни системи с разнообразни приложения, включително тези, фокусирани върху решаването на изчислителни проблеми. Фино паралелизмът е способността на функционалните и логическите програми.
Финозърнестият паралелизъм е характеристика на аритметичните и логически функционални програми, алгоритмите за извод в логиката и др. Показахме (вж. Раздел 1.2.1), че дълбочината на успоредяване, която формално определя „зърнистостта“ на паралелния алгоритъм, значително влияе коефициентът на ускорение и ефективността на прилагането на паралелни изчисления на самолети [1, 2].
Освен това, решаването на проблема за оптимално управление на натоварването на компютрите (процесорите) на самолета изисква въвеждане на механизми за динамично измерване на дълбочината на успоредяване [1].
Например при изпълнението на функционалния език за програмиране FTPL [5] на клъстери е въведен механизъм за контрол на дълбочината на успоредяване по време на изпълнението на програмата чрез присвояване на рекурсивно дефинирани функции на фрагменти от програмата, които са по-сложни от изчислителна точка на изглед от основните функции.
Освен това, за да може програмистът също да варира „зърното“ на паралелизъм в програмата, на езиците на функционалното и логическото програмиране те въвеждат средства за модулна организация на програмата, насочващи кои нейни фрагменти трябва да бъдат изпълнени в паралелно (виж например системата за паралелно програмиране T [9])