Unified Parallel C (UPC) - розширення мови програмування С, призначене для високопродуктивних обчислень на масштабних паралельних комп'ютерах, в тому числі на SMP/NUMA системах з загальною пам'яттю (єдиним адресним простором) і з розподіленою пам'яттю (наприклад, на кластерах). Програмісту надається доступ до всього глобального розділеного адресного простору (PGAS), збережені в ньому змінні можуть читатися і змінюватися будь-яким процесором. При цьому кожне значення зберігається у фізичній пам'яті одного з процесорів. UPC використовує модель SPMD (Single Program Multiple Data) в якій ступінь паралелізму фіксується при запуску програми, зазвичай на рівні один потік виконання на ядро процесора.
Unified Parallel C (UPC) | |
---|---|
Парадигма | Паралельна, імперативна (процедурна), структурна |
Дата появи | 1999 |
Творці | UPC Consortium |
Останній реліз | 2.12.2/2011-5-18 |
Система типізації | Статична |
Основні реалізації | GNU UPC, IBM XL UPC Compilers, HP UPC, Berkeley UPC, Michigan Tech MuPC, Cray UPC |
Під впливом від | C, AC,Split-C, Parallel C Preprocessor |
Операційна система | Крос-платформена |
Вебсайт | upc.gwu.edu |
Для вираження паралелізму UPC додає до ISO C 99 конструкції:
- Явну паралельну модель виконання;
- Загальний (поділений) адресний простір;
- Примітиви синхронізації і модель консистентності пам'яті;
- Примітиви управління пам'яттю.
На UPC значно вплинули три більш ранніх паралельних розширення: ISO C 99: AC, [en], і Parallel C Preprocessor (PCP). UPC не є їхньою надбудовою, а скоріше спробою об'єднати кращі їх сторони. UPC комбінує зручність програмування в парадигмі загальної пам'яті, рівень контролю за розподілом даних і продуктивності парадигми передачі повідомлень. Підтримується на різних HPC платформах.
UPC доволі простий в програмуванні, особливо для С-програмістів та порівнянні с іншими парадигмами паралельного програмування (MPI, ). Продуктивність UPC схожа з MPI.
Вручну оптимізований код с блоковими пересилками даних, все ж значно простіше, ніж MPI. Мова і середовище виконання (runtime) беруть на себе рутинну роботу по комунікації.
Особливості UPC
Філософія
Філософія мови схожа на С:
- Багато можливостей;
- Потребує акуратності.
Реалізації
Існують різні реалізації стандарту UPC:
- UPC @ GWU - розробляють стандарт http://upc.gwu.edu [ 8 липня 2012 у Wayback Machine.];
- Berkeley UPC;
- UPC @ MTU;
- UPC @ Florida;
- GCC UPC.
Доступні засоби розробки і налагодження:
- TotalView;
- Eclipse Parallel Tools Platform.
Основні елементи
1) Два типи змінних:
- Private (за замовчуванням );
- Shared (спеціальна директива).
2) Shared масиви і розподіл даних по процесорам;
3) Розподіл обчислень по процесорам;
4) Синхронізація і забезпечення консистентності пам'яті;
- Бар'єри;
- М'ютекси (locks).
Модель виконання
Декілька потоків виконують одну і ту ж програму, але обробляють різні дані (SPMD):
- Подібно MPI;
- Немає неявної синхронізації;
- MYTHREAD - номер даного потоку, THREADS - загальна кількість потоків;
- Число потоків може задаватися під час компіляції, так і під час виконання (подібно mpirun - np N)
Синхронізація застосовується тільки тоді, коли це необхідно:
- Бар'єри;
- Блокування (Locks);
- Контроль консистентності пам'яті.
Модель представлення пам'яті
Пам'ять розподілена між потоками, частина цієї пам'яті є локальною і доступна тільки потоку - власнику, інша частина пам'яті — глобальна (доступна для всіх потоків).
Управління розподілом даних
Приклади:
shared int x; /* will have affinity to thread 0 */ shared int y[THREADS]; int z; THREADS = 3 /* нехай буде 3 потоки */
sharedintA[4][THREADS];
Блоковий розподіл даних (за замовчуванням розмір блоку 1)
shared [block - size ] type array[N];
Приклад:
shared [3] int A [4] [THREADS]; THREADS = 4;
Матричне множення
// vect_mat_mult.c #include<upc_relaxed.h> shared[THREADS] int a[THREADS][THREADS]; shared int b[THREADS], c[THREADS]; void main (void){ nt i, j; upc_forall( i = 0 ; i < THREADS ; i++; i){ c[i] = 0; for( j=0 ; j< THREADS ; j++) c[i] += a[i][j]*b[j]; } }
Приклад паралельного скалярного множення
Приклад:
# include <upc_relaxed.h> # define N 1000 * THREADS shared float A[N], B[N]; shared float MUL[N]; void scalar_mul_a_b() { int i; upc_forall(i = 0; i < N; i++; i) MUL[i] = A[i] * B[i]; }
Розпаралелювання циклів
Синтаксис
upc_forall (init; test; loop; affinity) statyment
Семантика
- Ітерації циклу виконуються в потоках відповідно до локалізації параметра "affinity";
- affinity - цілочисельний вираз або посилання на загальний об'єкт.
Приклад
shared int a [100], b[100], c[100]; int i; upc_forall (i = 0; i<100; i++; a[i]) a[i] = b[i] * c[i];
Службові операції
Отримання розміру локальної частини глобального об'єкта:
upc_localsizeof (type-name or expression);
Отримання розміру блока глобального об'єкта:
upc_blocksizeof ( type - name or expression);
Отримання розміру елемента глобального об'єкта:
upc_elemsizeof ( type - name or expression);
Операції копіювання і ініціалізації
Копіювання з загальної пам'ять в загальну
upc_memcpy (dst, src, size)
Копіювання з локальної пам'яті в загальну
upc_memput (dst, src, size)
Копіювання з загальної пам'яті в локальну
upc_memget (dst, src, size)
Ініціалізація загальної пам'яті
upc_memset (dst, src, size)
Використовуваний блок загальної пам'яті повинен бути безперервним і належати одному і тому ж потоку!
Динамічний розподіл пам'яті
- Динамічний розподіл пам'яті можливий для загальної пам'яті;
- Операції виділення пам'яті можуть бути, як колективними, так і локальними для потоків ( префікс колективних операцій - all ).
Синтаксис
shared void *upc_all_alloc ( size_t nblocks, size_t nbytes );
Семантика
- Виділення загальної (глобальної) пам'яті;
- block_size - розмір блока, nblocks - кількість блоків;
- Результат виділення пам'яті відповідає дійсності:
shared[nbytes] char[nblocks* nbytes]
- Дана операція виділення пам'яті є колективною.
- Виділення загальної пам'яті тільки для поточного потоку, виконується за допомогою функції upc_global_alloc.
Джерела
- (PDF). Архів оригіналу (PDF) за 1 грудня 2016.
- http://upc.gwu.edu/tutorials/UPC-SC05.pdf [ 31 січня 2012 у Wayback Machine.] slide 21
Посилання
- upc.gwu.edu [ 8 липня 2012 у Wayback Machine.] — офіційний сайт Unified Parallel C;
- http://upc.gwu.edu/tutorials/tutorials_sc2003.pdf [ 12 червня 2010 у Wayback Machine.] - Programming in the Partitioned Global Address Space Model;
- www.hpcc.unn.ru/file.php?id=316 - мова паралельного програмування UPC;
- - паралельне програмування з використанням Unified Parallel C;
- http://upc.gwu.edu/tutorials/UPC-SC05.pdf [ 31 січня 2012 у Wayback Machine.] - High Performance Parallel Programming with Unified Parallel C (UPC).
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Unified Parallel C UPC rozshirennya movi programuvannya S priznachene dlya visokoproduktivnih obchislen na masshtabnih paralelnih komp yuterah v tomu chisli na SMP NUMA sistemah z zagalnoyu pam yattyu yedinim adresnim prostorom i z rozpodilenoyu pam yattyu napriklad na klasterah Programistu nadayetsya dostup do vsogo globalnogo rozdilenogo adresnogo prostoru PGAS zberezheni v nomu zminni mozhut chitatisya i zminyuvatisya bud yakim procesorom Pri comu kozhne znachennya zberigayetsya u fizichnij pam yati odnogo z procesoriv UPC vikoristovuye model SPMD Single Program Multiple Data v yakij stupin paralelizmu fiksuyetsya pri zapusku programi zazvichaj na rivni odin potik vikonannya na yadro procesora Unified Parallel C UPC ParadigmaParalelna imperativna procedurna strukturnaData poyavi1999TvorciUPC ConsortiumOstannij reliz2 12 2 2011 5 18Sistema tipizaciyiStatichnaOsnovni realizaciyiGNU UPC IBM XL UPC Compilers HP UPC Berkeley UPC Michigan Tech MuPC Cray UPCPid vplivom vidC AC Split C Parallel C PreprocessorOperacijna sistemaKros platformenaVebsajtupc gwu edu Dlya virazhennya paralelizmu UPC dodaye do ISO C 99 konstrukciyi Yavnu paralelnu model vikonannya Zagalnij podilenij adresnij prostir Primitivi sinhronizaciyi i model konsistentnosti pam yati Primitivi upravlinnya pam yattyu Na UPC znachno vplinuli tri bilsh rannih paralelnih rozshirennya ISO C 99 AC en i Parallel C Preprocessor PCP UPC ne ye yihnoyu nadbudovoyu a skorishe sproboyu ob yednati krashi yih storoni UPC kombinuye zruchnist programuvannya v paradigmi zagalnoyi pam yati riven kontrolyu za rozpodilom danih i produktivnosti paradigmi peredachi povidomlen Pidtrimuyetsya na riznih HPC platformah UPC dovoli prostij v programuvanni osoblivo dlya S programistiv ta porivnyanni s inshimi paradigmami paralelnogo programuvannya MPI Charm Produktivnist UPC shozha z MPI Vruchnu optimizovanij kod s blokovimi peresilkami danih vse zh znachno prostishe nizh MPI Mova i seredovishe vikonannya runtime berut na sebe rutinnu robotu po komunikaciyi Osoblivosti UPCFilosofiya Filosofiya movi shozha na S Bagato mozhlivostej Potrebuye akuratnosti Realizaciyi Isnuyut rizni realizaciyi standartu UPC UPC GWU rozroblyayut standart http upc gwu edu 8 lipnya 2012 u Wayback Machine Berkeley UPC UPC MTU UPC Florida GCC UPC Dostupni zasobi rozrobki i nalagodzhennya TotalView Eclipse Parallel Tools Platform Osnovni elementi 1 Dva tipi zminnih Private za zamovchuvannyam Shared specialna direktiva 2 Shared masivi i rozpodil danih po procesoram 3 Rozpodil obchislen po procesoram 4 Sinhronizaciya i zabezpechennya konsistentnosti pam yati Bar yeri M yuteksi locks Model vikonannya Dekilka potokiv vikonuyut odnu i tu zh programu ale obroblyayut rizni dani SPMD Podibno MPI Nemaye neyavnoyi sinhronizaciyi MYTHREAD nomer danogo potoku THREADS zagalna kilkist potokiv Chislo potokiv mozhe zadavatisya pid chas kompilyaciyi tak i pid chas vikonannya podibno mpirun np N Sinhronizaciya zastosovuyetsya tilki todi koli ce neobhidno Bar yeri Blokuvannya Locks Kontrol konsistentnosti pam yati Ris 1 Predstavlennya Model predstavlennya pam yati Pam yat rozpodilena mizh potokami chastina ciyeyi pam yati ye lokalnoyu i dostupna tilki potoku vlasniku insha chastina pam yati globalna dostupna dlya vsih potokiv Upravlinnya rozpodilom danihPrikladi Ris 2 Rezultat prikladushared int x will have affinity to thread 0 shared int y THREADS int z THREADS 3 nehaj bude 3 potoki Ris 3 Rezultat sharedintA 4 THREADS sharedintA 4 THREADS Blokovij rozpodil danih za zamovchuvannyam rozmir bloku 1 shared block size type array N Priklad Ris 4 THREADS 4shared 3 int A 4 THREADS THREADS 4 Matrichne mnozhennya Ris 5 Rezultat matrichnogo mnozhennya vect mat mult c include lt upc relaxed h gt shared THREADS int a THREADS THREADS shared int b THREADS c THREADS void main void nt i j upc forall i 0 i lt THREADS i i c i 0 for j 0 j lt THREADS j c i a i j b j Priklad paralelnogo skalyarnogo mnozhennya Priklad include lt upc relaxed h gt define N 1000 THREADS shared float A N B N shared float MUL N void scalar mul a b int i upc forall i 0 i lt N i i MUL i A i B i Rozparalelyuvannya cikliv Sintaksis upc forall init test loop affinity statyment Semantika Iteraciyi ciklu vikonuyutsya v potokah vidpovidno do lokalizaciyi parametra affinity affinity cilochiselnij viraz abo posilannya na zagalnij ob yekt Priklad shared int a 100 b 100 c 100 int i upc forall i 0 i lt 100 i a i a i b i c i Sluzhbovi operaciyi Otrimannya rozmiru lokalnoyi chastini globalnogo ob yekta upc localsizeof type name or expression Otrimannya rozmiru bloka globalnogo ob yekta upc blocksizeof type name or expression Otrimannya rozmiru elementa globalnogo ob yekta upc elemsizeof type name or expression Operaciyi kopiyuvannya i inicializaciyi Kopiyuvannya z zagalnoyi pam yat v zagalnuupc memcpy dst src size Kopiyuvannya z lokalnoyi pam yati v zagalnuupc memput dst src size Kopiyuvannya z zagalnoyi pam yati v lokalnuupc memget dst src size Inicializaciya zagalnoyi pam yatiupc memset dst src size Vikoristovuvanij blok zagalnoyi pam yati povinen buti bezperervnim i nalezhati odnomu i tomu zh potoku Dinamichnij rozpodil pam yati Dinamichnij rozpodil pam yati mozhlivij dlya zagalnoyi pam yati Operaciyi vidilennya pam yati mozhut buti yak kolektivnimi tak i lokalnimi dlya potokiv prefiks kolektivnih operacij all Sintaksis shared void upc all alloc size t nblocks size t nbytes Semantika Vidilennya zagalnoyi globalnoyi pam yati block size rozmir bloka nblocks kilkist blokiv Rezultat vidilennya pam yati vidpovidaye dijsnosti shared nbytes char nblocks nbytes Dana operaciya vidilennya pam yati ye kolektivnoyu Vidilennya zagalnoyi pam yati tilki dlya potochnogo potoku vikonuyetsya za dopomogoyu funkciyi upc global alloc Dzherela PDF Arhiv originalu PDF za 1 grudnya 2016 http upc gwu edu tutorials UPC SC05 pdf 31 sichnya 2012 u Wayback Machine slide 21Posilannyaupc gwu edu 8 lipnya 2012 u Wayback Machine oficijnij sajt Unified Parallel C http upc gwu edu tutorials tutorials sc2003 pdf 12 chervnya 2010 u Wayback Machine Programming in the Partitioned Global Address Space Model www hpcc unn ru file php id 316 mova paralelnogo programuvannya UPC paralelne programuvannya z vikoristannyam Unified Parallel C http upc gwu edu tutorials UPC SC05 pdf 31 sichnya 2012 u Wayback Machine High Performance Parallel Programming with Unified Parallel C UPC