17
РОЗПАРАЛЕЛЮВАННЯ ПРОГРАМ НА ФОРТРАНІ З ВИКОРИСТАННЯМ ТЕХНІКИ ПЕРЕПИСУВАЛЬНИХ ПРАВИЛ A.Ю. Дорошенко, K.А. Жереб, Є.М. Туліка 1

Розпаралелювання Програм на Фортрані з Використанням Техніки Переписувальних Правил

Embed Size (px)

Citation preview

РОЗПАРАЛЕЛЮВАННЯ ПРОГРАМ НА ФОРТРАНІ З ВИКОРИСТАННЯМ ТЕХНІКИ ПЕРЕПИСУВАЛЬНИХ ПРАВИЛ

A.Ю. Дорошенко, K.А. Жереб, Є.М. Туліка

1

Мета роботи

Автоматичне розпаралелювання програм на мові Фортран

Покращення послідовних програм

2

Актуальність

Багато унаслідованого коду Виникав в ті часи, коли паралелізація була не

основним напрямком оптимізації

3

Цільова задача

Задача електронної густини Програма обчислює електронну та спінову

густину атомів поліциклічних ароматичних вуглеводнів на прямокутній сітці заданого розміру N

4

Використана техніка

Техніка переписувальних правил Система Termware

5

Як працюють переписувальні правила source [condition ] -> destination [action]

source – вхідний зразок; destination – вихідний зразок; condition – умова, що визначає застосовність

правила; action – дія, виконувана при спрацьовуванні

правила.

6

Методологія розпаралелювання7

Генерація термів з коду на Фортрані

Використано компілятор GCC В свому арсеналі має десяток різних мов Має відкритий код

8

Методологія генерації термів

Перетворюємо програму на фортрані в проміжне представлення GCC GENERIC

З проміжного представлення генеруємо терм

9

Generic представлення

gcc --fdump-tree-original-raw exits (integer(kind=4) & restrict k)@1 function_decl name: @2 mngl: @3 type: @4 scpe: @5 srcp: ElDen.for:1294 args: @6 link: extern body: @7 @2 identifier_node strg: exits lngt: 5 @3 identifier_node strg: exits_ lngt: 6 @4 function_type size: @8 algn: 8 retn: @9 prms: @10 @5 translation_unit_decl@6 parm_decl name: @11 type: @12 scpe: @1 srcp: ElDen.for:1294 argt: @12 size: @13 algn: 64 used: 1 @7 bind_expr type: @9 vars: @14 body: @15…

10

Синтаксична модель програми

function_decl ( identifier(node1), name(identifier_node ( strg(exits), lngt(5) )), mngl(identifier_node ( strg(exits_), lngt(6) )), type(),

args(parm_decl (Еук identifier(node6), name(identifier_node ( strg(k), lngt(1) )), argt(2), algn(64), used(1) )), body(bind_expr (...)))

11

Розпаралелювання

DoCnt($var,$start,$end,$body,_MARK_Parallel)-> ParallelDoCnt($var,$start,$end,$body)

12

Вибір циклів для перетворення

В коді 54 цикли Використовуємо профілювання

для знаходження найбільш критичних фрагментів

Знаходимо всі цикли, що містять такі фрагменти 6 циклів

Вибрано другий ззовні цикл

DO IB=1,NZ DO KD=1,NY

DO … CALL

ELDENS PROCEDURE

ELDENS DO …

DO … DO

<hotspot>

13

Знаходження циклів

1. [_MarkHotspot($x):$y] -> _MarkHotspot([$x:$y])

2. [$x:_MarkHotspot($y)] -> _MarkHotspot([$x:$y])DoCnt($var,$start,$end, _MarkHotspot($body)] -> _MarkHotspot(DoCnt($var,$start,$end,$body, _MARK_CAND_PARALLEL))

3. Function($name, $params, $return,_MarkHotspot($body)) -> Function($name,$params,$return,$body, _MARK_PASSED)

4. [addItem($name)]Call($name,$params) [hasItem($name)] -> _MarkHotspot(Call($name,$params))

14

Генерація коду програми з терму

Терм розбивається на окремі лексеми Лексеми додаються до дерева синтаксису Код програми будується на основі

синтаксичного дерева

15

Порівняння ефективності

Прискорення 3,3-3,6 разів на 4 ядрах

16

Висновки

Побудовано методологію розпаралелення программ

Побудовано прикладні засоби розпаралелення і протестовано на цільовій задачі

Подальша робота включає поширення підходу на випадо розподілених і гетерогенних архітектур

17