OpenHMPP (HMPP для Hybrid Multicore Parallel Programming) — стандарт програмування для гетерогенних обчислень. Базується на основі набору директив компілятора, модель програмування призначена для маніпулювання апаратними прискорювачами без складнощів пов'язаних з GPU програмуванням. Цей підхід на основі директив був реалізований тому, що він дозволяє вільні зв'язки між програмний кодом і використанням апаратного прискорювача.
Опис
OpenHMPP модель програмування заснована на директивах надає синтаксис, щоб розвантажити обчислювання на апаратних прискорювачах та оптимізувати переміщення даних на/із апаратної пам'яті.
Модель заснована на праці CAPS (Compiler and Architecture for Embedded and Superscalar Processors) [ 16 червня 2011 у Wayback Machine.], є спільним проектом з , CNRS, University of Rennes 1 і INSA Rennes.
Поняття OpenHMPP
OpenHMPP заснована на концепції codelets, функції можуть бути виконані віддалено на апаратних прискорювачах.
Концепція OpenHMPP codelet
Codelet має наступні властивості:
- Це чиста функція.
- Вона не містить статичних чи динамічних змінних, не посилається на якісь глобальні змінні за винятком того, коли вона була оголошена в HMPP директиві «resident»
- Не містить викликів функцій які можуть бути вбудованими. Це включає в себе використання бібліотек і системних функцій таких як malloc, printf, …
- Кожен виклик функції повинен посилатись до статичної чистої функції (без покажчиків на функції).
- Вона не повертає ніякого значення(функція void в C або subroutine в Fortran).
- Число аргументів повинно бути виправлено (тобто це не може бути функція зі змінним числом аргументів як в stdarg.h C).
- Вона не рекурсивна.
- Його параметри вважаються не псевдонімом (перегляньте Aliasing (computing)).
- Він не містить директив callsite (тобто RPC на інший codelet) або інших HMPP директив.
Ці властивості гарантують, що RPC може бути віддалено виконана на апаратних прискорювачах. Цей RPC і пов'язані з ним передачі даних можуть бути асинхронними.
Codelet RPCs
HMPP надає синхронний і асинхронний RPC. Виконання асинхронних операцій залежить від апаратних засобів.
Модель пам'яті HMPP
HMPP розглядає два адресних простори: хост процесор і пам'ять апаратного прискорювача.
Поняття директив
Директиви OpenHMPP можуть розглядатися як «мета-інформація» додана у вихідний код програми. Вони гарантують безпеку мета-інформації, тобто вони не змінюють поведінку початкового коду. Вони стосуються віддаленого виконання (RPC) функції, а також передачі даних в/з пам'яті апаратного прискорювача.
В таблиці нижче представлені директиви OpenHMPP. В директивах OpenHMPP розглядаються різні проблеми: деякі з них присвячені оголошенню та інші призначені для управління виконанням.
Інструкції керування потоком | Директиви для управління даними | |
---|---|---|
Оголошення | codelet group | resident map mapbyname |
Оперативні директиви | callsite synchronize region | allocate release advancedload delegatedstore |
Концепція набору директив
Однією з основних точок НМРР підходу є поняття директив і пов'язаних з ними міток, що дозволяють виявити цілісну структуру на весь набір директив поширений в додатку.
Існує два види міток:
- Один пов'язаний з codelet. Загалом, директиви які несуть цей вид міток обмежуються тільки одним codelet (викликається автономний codelet в іншій частині документа щоб відрізнити його від групи codelets).
- Інший пов'язаний з групою codelets. Ці мітки позначені таким чином: «<LabelOfGroup>», де «LabelOfGroup» — це ім'я, задане користувачем. Загалом, директиви, які мають позначку цього типу відносяться до цілої групи.
OpenHMPP Синтаксис Директив
Для того, щоб спростити позначення, регулярні вирази будуть використані для опису синтаксису HMPP директив.
Кольорові позначення нижче використовується для опису синтаксису директив:
- Зарезервовані HMPP ключові слова зелені;
- Елементи граматики, які можуть бути відкинуті в ключових словах HMPP червоні;
- Змінні користувача залишаються в чорними.
Загальний синтаксис
Загальний синтаксис директив OpenHMPP є:
- Для мови C:
#pragma hmpp <grp_label> [codelet_label]? directive_type [,directive_parameters]* [&]
- Для мови FORTRAN:
!$hmpp <grp_label> [codelet_label]? directive_type [,directive_parameters]* [&]
Де:
<grp_label>
: це унікальний ідентифікатор іменування групи codelets. У тих випадках, коли жодна з груп не визначена в додатку, ця мітка може просто пропущена. Дозволені назви міток повинні дотримуватись цієї граматики: [a-z, A-Z,_][a-z, A-Z,0-9,_]*. Зверніть увагу, що «< >» символи відносяться до синтаксису і є обов'язковими для такого роду міток.codelet_label
: унікальний ідентифікатор іменування codelet. Дозволені назви міток повинні дотримуватись цієї граматики: [a-z, A-Z,_][a-z, A-Z,0-9,_]*directive
: це ім'я директиви;directive_parameters
: визначає деякі параметри, пов'язані з директивою. Ці параметри можуть бути різних видів і уточнювати деякі аргументи наведені в директиві з будь-яким режимом виконання (асинхронний в порівнянні з синхронним, наприклад);[&]
: це символ, який використовується для продовження директиви на наступному рядку(те ж для C і FORTRAN).
OpenHMPP директиви
Директиви для оголошення і виконання codelet
Директива codelet
оголошує обчислення для віддаленого виконання на апаратному прискорювачі.
Для директиви codelet
:
- Мітка codelet є обов'язковою і повинна бути унікальною в додатку
- Мітка групи не вимагається, якщо жодна з груп не визначена.
- Директива codelet вставляється безпосередньо перед оголошенням функції.
Синтаксис директиви:
#pragma hmpp <grp_label> codelet_label codelet [, version = major.minor[.micro]?]? [, args[arg_items].io=[[in|out|inout]]* [, args[arg_items].size={dimsize[,dimsize]*}]* [, args[arg_items].const=true]* [, cond = "expr"] [, target=target_name[:target_name]*]
Директива callsite
визначає, яким чином Використовувати codelet в даний момент в програмі.
Синтаксис директиви:
#pragma hmpp <grp_label> codelet_label callsite [, asynchronous]? [, args[arg_items].size={dimsize[,dimsize]*}]* [, args[arg_items].advancedload=[[true|false]]* [, args[arg_items].addr="expr"]* [, args[arg_items].noupdate=true]*
Приклад показаний тут:
/* declaration of the codelet */ #pragma hmpp simple1 codelet, args[outv].io=inout, target=CUDA static void matvec(int sn, int sm, float inv[sm], float inm[sn][sm], float *outv){ int i, j; for (i = 0 ; i < sm ; i++) { float temp = outv[i]; for (j = 0 ; j < sn ; j++) { temp += inv[j] * inm[i][ j]; } outv[i] = temp; } int main(int argc, char **argv) { int n; ........ /* codelet use */ #pragma hmpp simple1 callsite, args[outv].size={n} matvec(n, m, myinc, inm, myoutv); ........ }
У деяких випадках, певне управління даних у всьому додатку потрібно (CPU/GPU оптимізації переміщення даних, загальні змінні...). Директива group
дозволяє оголошувати групу codelets. Параметри, зазначені в цій директиві, застосовуються до всіх codelets, що належать до цієї групи.
Синтаксис директиви:
#pragma hmpp <grp_label> group [, version = <major>.<minor>[.<micro>]?]? [, target = target_name[:target_name]*]]? [, cond = “expr”]?
Обмін даними між codelets
Типи та розміри всіх зіставлених аргументи повинні бути ідентичними.
Директива map
відображає кілька аргументів на пристрої.
#pragma hmpp <grp_label> map, args[arg_items]
Ця директива дуже схожа на map
за винятком того, що аргументи, які будуть зіставлені визначаються по їменам. Директива mapbyname
є еквівалентом кількох директив map
.
#pragma hmpp <grp_label> mapbyname [,variableName]+
Глобальні змінні
Директива resident
оголошує деякі змінні як глобальні всередині групи. Ці змінні можуть бути доступні безпосередньо з будь-якого codelet, що належить до групи. Ця директива застосовується до оператора оголошення тільки наступною за ним в вихідному коді.
Синтаксис цієї директиви: #pragma hmpp "/span>grp_label<span style="color:#339933;"" resident
[, args[::var_name].io=[[in|out|inout]]* [, args[::var_name].size={dimsize[,dimsize]*}]* [, args[::var_name].addr="expr"]* [, args[::var_name].const=true]*
Позначення ::var_name
з префіксом ::
означає, що змінна програми оголошена як resident.
Прискорення регіонів
Region це злиття директив codelet/callsite. Мета полягає в тому, щоб уникнути реструктуризації коду для побудови codelet. Тому, всі атрибути доступні для codelet
або callsite
директив можуть бути використані в директивах regions
.
В мові C:
#pragma hmpp [<MyGroup>] [label] region [, args[arg_items].io=[[in|out|inout]]* [, cond = "expr"]< [, args[arg_items].const=true]* [, target=target_name[:target_name]*] [, args[arg_items].size={dimsize[,dimsize]*}]* [, args[arg_items].advancedload=[[true|false]]* [, args[arg_items].addr="expr"]* [, args[arg_items].noupdate=true]* [, asynchronous]? [, private=[arg_items]]* { C BLOCK STATEMENTS }
Зовнішні посилання
- CAPS Entreprise SAS and PathScale, Inc to Jointly Collaborate on Making HMPP a New Open Standard [ 7 жовтня 2012 у Wayback Machine.]
- How Hardware Will Shape Languages [ 13 січня 2012 у Wayback Machine.] By David Chisnall
- By ICHEC (Irish Center for High-End Computing)
- Expérience de programmation avec HMPP By IRMA (Institut de Recherche Mathématique Avancée) — FORTRAN examples
- Directive-based Heterogeneous Programming — A GPU-Accelerated RTM Use Case [ 17 липня 2011 у Wayback Machine.] By TOTAL Technical and Scientific Center and CAPS Entreprise
- HMPP Port [ 20 липня 2011 у Wayback Machine.] By CEA (Commissariat à l'Energie Atomique et aux Energies Alternatives) for PRACE (Partnership for Advanced Computing in Europe)
Примітки
- Dolbeau, Romain; Bihan, Stéphane; Bodin, François (4 October 2007). HMPP: A Hybrid Multi-core Parallel Programming Environment [ 16 січня 2014 у Wayback Machine.] . Workshop on General Purpose Processing on Graphics Processing Units [ 23 вересня 2011 у Wayback Machine.]. Retrieved 14 January 2014.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
OpenHMPP HMPP dlya Hybrid Multicore Parallel Programming standart programuvannya dlya geterogennih obchislen Bazuyetsya na osnovi naboru direktiv kompilyatora model programuvannya priznachena dlya manipulyuvannya aparatnimi priskoryuvachami bez skladnoshiv pov yazanih z GPU programuvannyam Cej pidhid na osnovi direktiv buv realizovanij tomu sho vin dozvolyaye vilni zv yazki mizh programnij kodom i vikoristannyam aparatnogo priskoryuvacha OpisOpenHMPP model programuvannya zasnovana na direktivah nadaye sintaksis shob rozvantazhiti obchislyuvannya na aparatnih priskoryuvachah ta optimizuvati peremishennya danih na iz aparatnoyi pam yati Model zasnovana na praci CAPS Compiler and Architecture for Embedded and Superscalar Processors 16 chervnya 2011 u Wayback Machine ye spilnim proektom z CNRS University of Rennes 1 i INSA Rennes Ponyattya OpenHMPPOpenHMPP zasnovana na koncepciyi codelets funkciyi mozhut buti vikonani viddaleno na aparatnih priskoryuvachah Koncepciya OpenHMPP codelet Codelet maye nastupni vlastivosti Ce chista funkciya Vona ne mistit statichnih chi dinamichnih zminnih ne posilayetsya na yakis globalni zminni za vinyatkom togo koli vona bula ogoloshena v HMPP direktivi resident Ne mistit viklikiv funkcij yaki mozhut buti vbudovanimi Ce vklyuchaye v sebe vikoristannya bibliotek i sistemnih funkcij takih yak malloc printf Kozhen viklik funkciyi povinen posilatis do statichnoyi chistoyi funkciyi bez pokazhchikiv na funkciyi Vona ne povertaye niyakogo znachennya funkciya void v C abo subroutine v Fortran Chislo argumentiv povinno buti vipravleno tobto ce ne mozhe buti funkciya zi zminnim chislom argumentiv yak v stdarg h C Vona ne rekursivna Jogo parametri vvazhayutsya ne psevdonimom pereglyante Aliasing computing Vin ne mistit direktiv callsite tobto RPC na inshij codelet abo inshih HMPP direktiv Ci vlastivosti garantuyut sho RPC mozhe buti viddaleno vikonana na aparatnih priskoryuvachah Cej RPC i pov yazani z nim peredachi danih mozhut buti asinhronnimi Codelet RPCs Sinhronnij proti asinhronnogo RPC HMPP nadaye sinhronnij i asinhronnij RPC Vikonannya asinhronnih operacij zalezhit vid aparatnih zasobiv Model pam yati HMPP Model pam yati HMPP HMPP rozglyadaye dva adresnih prostori host procesor i pam yat aparatnogo priskoryuvacha Ponyattya direktiv Div takozh Direktiva programuvannya Direktivi OpenHMPP mozhut rozglyadatisya yak meta informaciya dodana u vihidnij kod programi Voni garantuyut bezpeku meta informaciyi tobto voni ne zminyuyut povedinku pochatkovogo kodu Voni stosuyutsya viddalenogo vikonannya RPC funkciyi a takozh peredachi danih v z pam yati aparatnogo priskoryuvacha V tablici nizhche predstavleni direktivi OpenHMPP V direktivah OpenHMPP rozglyadayutsya rizni problemi deyaki z nih prisvyacheni ogoloshennyu ta inshi priznacheni dlya upravlinnya vikonannyam Instrukciyi keruvannya potokom Direktivi dlya upravlinnya danimiOgoloshennya codelet group resident map mapbynameOperativni direktivi callsite synchronize region allocate release advancedload delegatedstoreKoncepciya naboru direktiv Odniyeyu z osnovnih tochok NMRR pidhodu ye ponyattya direktiv i pov yazanih z nimi mitok sho dozvolyayut viyaviti cilisnu strukturu na ves nabir direktiv poshirenij v dodatku Isnuye dva vidi mitok Odin pov yazanij z codelet Zagalom direktivi yaki nesut cej vid mitok obmezhuyutsya tilki odnim codelet viklikayetsya avtonomnij codelet v inshij chastini dokumenta shob vidrizniti jogo vid grupi codelets Inshij pov yazanij z grupoyu codelets Ci mitki poznacheni takim chinom lt LabelOfGroup gt de LabelOfGroup ce im ya zadane koristuvachem Zagalom direktivi yaki mayut poznachku cogo tipu vidnosyatsya do ciloyi grupi OpenHMPP Sintaksis Direktiv Dlya togo shob sprostiti poznachennya regulyarni virazi budut vikoristani dlya opisu sintaksisu HMPP direktiv Kolorovi poznachennya nizhche vikoristovuyetsya dlya opisu sintaksisu direktiv Zarezervovani HMPP klyuchovi slova zeleni Elementi gramatiki yaki mozhut buti vidkinuti v klyuchovih slovah HMPP chervoni Zminni koristuvacha zalishayutsya v chornimi Zagalnij sintaksis Zagalnij sintaksis direktiv OpenHMPP ye Dlya movi C pragma hmpp lt grp label gt codelet label directive type directive parameters amp Dlya movi FORTRAN hmpp lt grp label gt codelet label directive type directive parameters amp De lt grp label gt ce unikalnij identifikator imenuvannya grupi codelets U tih vipadkah koli zhodna z grup ne viznachena v dodatku cya mitka mozhe prosto propushena Dozvoleni nazvi mitok povinni dotrimuvatis ciyeyi gramatiki a z A Z a z A Z 0 9 Zvernit uvagu sho lt gt simvoli vidnosyatsya do sintaksisu i ye obov yazkovimi dlya takogo rodu mitok codelet label unikalnij identifikator imenuvannya codelet Dozvoleni nazvi mitok povinni dotrimuvatis ciyeyi gramatiki a z A Z a z A Z 0 9 directive ce im ya direktivi directive parameters viznachaye deyaki parametri pov yazani z direktivoyu Ci parametri mozhut buti riznih vidiv i utochnyuvati deyaki argumenti navedeni v direktivi z bud yakim rezhimom vikonannya asinhronnij v porivnyanni z sinhronnim napriklad amp ce simvol yakij vikoristovuyetsya dlya prodovzhennya direktivi na nastupnomu ryadku te zh dlya C i FORTRAN OpenHMPP direktiviDirektivi dlya ogoloshennya i vikonannya codelet Direktiva codelet ogoloshuye obchislennya dlya viddalenogo vikonannya na aparatnomu priskoryuvachi Dlya direktivi codelet Mitka codelet ye obov yazkovoyu i povinna buti unikalnoyu v dodatku Mitka grupi ne vimagayetsya yaksho zhodna z grup ne viznachena Direktiva codelet vstavlyayetsya bezposeredno pered ogoloshennyam funkciyi Sintaksis direktivi pragma hmpp lt grp label gt codelet label codelet version major minor micro args arg items io in out inout args arg items size dimsize dimsize args arg items const true cond expr target target name target name Direktiva callsite viznachaye yakim chinom Vikoristovuvati codelet v danij moment v programi Sintaksis direktivi pragma hmpp lt grp label gt codelet label callsite asynchronous args arg items size dimsize dimsize args arg items advancedload true false args arg items addr expr args arg items noupdate true Priklad pokazanij tut declaration of the codelet pragma hmpp simple1 codelet args outv io inout target CUDA static void matvec int sn int sm float inv sm float inm sn sm float outv int i j for i 0 i lt sm i float temp outv i for j 0 j lt sn j temp inv j inm i j outv i temp int main int argc char argv int n codelet use pragma hmpp simple1 callsite args outv size n matvec n m myinc inm myoutv U deyakih vipadkah pevne upravlinnya danih u vsomu dodatku potribno CPU GPU optimizaciyi peremishennya danih zagalni zminni Direktiva group dozvolyaye ogoloshuvati grupu codelets Parametri zaznacheni v cij direktivi zastosovuyutsya do vsih codelets sho nalezhat do ciyeyi grupi Sintaksis direktivi pragma hmpp lt grp label gt group version lt major gt lt minor gt lt micro gt target target name target name cond expr Obmin danimi mizh codelets Tipi ta rozmiri vsih zistavlenih argumenti povinni buti identichnimi Direktiva map vidobrazhaye kilka argumentiv na pristroyi pragma hmpp lt grp label gt map args arg items Cya direktiva duzhe shozha na map za vinyatkom togo sho argumenti yaki budut zistavleni viznachayutsya po yimenam Direktiva mapbyname ye ekvivalentom kilkoh direktiv map pragma hmpp lt grp label gt mapbyname variableName Globalni zminni Direktiva resident ogoloshuye deyaki zminni yak globalni vseredini grupi Ci zminni mozhut buti dostupni bezposeredno z bud yakogo codelet sho nalezhit do grupi Cya direktiva zastosovuyetsya do operatora ogoloshennya tilki nastupnoyu za nim v vihidnomu kodi Sintaksis ciyeyi direktivi pragma hmpp span gt grp label lt span style color 339933 resident args var name io in out inout args var name size dimsize dimsize args var name addr expr args var name const true Poznachennya var name z prefiksom oznachaye sho zminna programi ogoloshena yak resident Priskorennya regioniv Region ce zlittya direktiv codelet callsite Meta polyagaye v tomu shob uniknuti restrukturizaciyi kodu dlya pobudovi codelet Tomu vsi atributi dostupni dlya codelet abo callsite direktiv mozhut buti vikoristani v direktivah regions V movi C pragma hmpp lt MyGroup gt label region args arg items io in out inout cond expr lt args arg items const true target target name target name args arg items size dimsize dimsize args arg items advancedload true false args arg items addr expr args arg items noupdate true asynchronous private arg items C BLOCK STATEMENTS Zovnishni posilannya CAPS Entreprise SAS and PathScale Inc to Jointly Collaborate on Making HMPP a New Open Standard 7 zhovtnya 2012 u Wayback Machine How Hardware Will Shape Languages 13 sichnya 2012 u Wayback Machine By David Chisnall By ICHEC Irish Center for High End Computing Experience de programmation avec HMPP By IRMA Institut de Recherche Mathematique Avancee FORTRAN examples Directive based Heterogeneous Programming A GPU Accelerated RTM Use Case 17 lipnya 2011 u Wayback Machine By TOTAL Technical and Scientific Center and CAPS Entreprise HMPP Port 20 lipnya 2011 u Wayback Machine By CEA Commissariat a l Energie Atomique et aux Energies Alternatives for PRACE Partnership for Advanced Computing in Europe Primitki Dolbeau Romain Bihan Stephane Bodin Francois 4 October 2007 HMPP A Hybrid Multi core Parallel Programming Environment 16 sichnya 2014 u Wayback Machine Workshop on General Purpose Processing on Graphics Processing Units 23 veresnya 2011 u Wayback Machine Retrieved 14 January 2014