Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Lr6
Lr6
Loading in …3
×

Check these out next

1 of 17 Ad

More Related Content

Advertisement

Recently uploaded (20)

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

  1. 1. 1 РОЗПАРАЛЕЛЮВАННЯ ПРОГРАМ НА ФОРТРАНІ З ВИКОРИСТАННЯМ ТЕХНІКИ ПЕРЕПИСУВАЛЬНИХ ПРАВИЛ A Дорошенко, K.А. Жереб, Є.М. Туліка .Ю.
  2. 2. Мета роботи 2  Автоматичне розпаралелювання програм на мові Фортран  Покращення послідовних програм
  3. 3. Актуальність 3  Багато унаслідованого коду  Виникав в ті часи, коли паралелізація була не основним напрямком оптимізації
  4. 4. Цільова задача 4  Задача електронної густини  Програма обчислює електронну та спінову густину атомів поліциклічних ароматичних вуглеводнів на прямокутній сітці заданого розміру N
  5. 5. Використана техніка 5  Техніка переписувальних правил  Система Termware
  6. 6. Як працюють переписувальні 6 правила  source [condition ] -> destination [action]  source – вхідний зразок;  destination – вихідний зразок;  condition – умова, що визначає застосовність правила;  action – дія, виконувана при спрацьовуванні правила.
  7. 7. Методологія розпаралелювання 7
  8. 8. Генерація термів з коду на Фортрані 8  Використано компілятор GCC  В свому арсеналі має десяток різних мов  Має відкритий код
  9. 9. Методологія генерації термів 9  Перетворюємо програму на фортрані в проміжне представлення GCC GENERIC  З проміжного представлення генеруємо терм
  10. 10. Generic представлення 10  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 …
  11. 11. Синтаксична модель програми 11 function_decl ( args(parm_decl (Еук identifier(node1), identifier(node6), name(identifier_node ( name(identifier_node ( strg(k), strg(exits), lngt(1) lngt(5) )), )), argt(2), algn(64), mngl(identifier_node ( used(1) strg(exits_), )), lngt(6) body(bind_expr (...)) ) )), type(),
  12. 12. Розпаралелювання 12  Do Cnt($va r,$s ta rt,$e nd , $bo d y ,_M RK_Pa ra lle l)-> A Pa ra lle lDo Cnt($va r,$s ta rt,$e nd ,$bo d y )
  13. 13. Вибір циклів для перетворення 13  В коді 54 цикли  DO IB=1,NZ  Використовуємо профілювання  DO KD=1,NY для знаходження найбільш  DO … критичних фрагментів  CALL  Знаходимо всі цикли, що містять ELDENS такі фрагменти  6 циклів  PROCEDURE ELDENS  Вибрано другий ззовні цикл  DO …  DO …  DO  <hotspot>
  14. 14. Знаходження циклів 14 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))
  15. 15. Генерація коду програми з терму 15  Терм розбивається на окремі лексеми  Лексеми додаються до дерева синтаксису  Код програми будується на основі синтаксичного дерева
  16. 16. Порівняння ефективності 16  Прискорення 3,3-3,6 разів на 4 ядрах
  17. 17. Висновки 17  Побудовано методологію розпаралелення программ  Побудовано прикладні засоби розпаралелення і протестовано на цільовій задачі  Подальша робота включає поширення підходу на випадо розподілених і гетерогенних архітектур

Editor's Notes

  • Обсяг програми складає 1680 рядків коду. В коді програми присутні конструкції, характерні для різних версій мови Фортран – від Фортрану 77 до Фортрану 95

×