Unified Parallel C (UPC) — расширение языка программирования Си, предназначенное для high-performance computing на масштабных параллельных компьютерах, в том числе на 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, Split-C, и Parallel C Preprocessor (PCP). UPC не является их надмножеством, а скорее попыткой объединить лучшие их стороны. UPC комбинирует удобство программирования в парадигме общей памяти и уровень контроля за распределением данных и производительность парадигмы передачи сообщений.
Пример параллельного скалярного умножения[1]
# 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];
}
Для улучшения этой статьи по информационным технологиям желательно: |
ПО для распределённых и параллельных вычислений | |
|---|---|
| Стандарты, библиотеки |
|
| ПО для мониторинга |
|
| Управляющее ПО |
|
Параллельные вычисления | |
|---|---|
| Общие положения |
|
| Уровни параллелизма |
|
| Поток выполнения |
|
| Теория |
|
| Элементы |
|
| Взаимодействие |
|
| Программирование |
|
| Компьютерная техника |
|
| API |
|
| Проблемы |
|