Unified Parallel C

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

Unified Parallel C (UPC) — расширение языка программирования Си, предназначенное для high-performance computing на масштабных параллельных компьютерах, в том числе на SMP/NUMA системах с общей памятью (единым адресным пространством) и с распределенной памятью (например, на кластерах). Программисту предоставляется доступ ко всему глобальному разделённому адресному пространству (PGAS), хранимые в нем переменные могут читаться и изменяться любым процессором. При этом каждое значение хранится в физической памяти одного из процессоров. UPC использует модель SPMD (Single Program Multiple Data) в которой степень параллелизма фиксируется при запуске программы, обычно на уровне один поток исполнения на ядро процессора.

Для выражения параллелизма 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];
}

См. также

Примечания

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.