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];
}

См. также

править

Примечания

править

Ссылки

править

📚 Artikel Terkait di Wikipedia

SPIR-V

Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming . www.Khronos.org (16 ноября 2015). Дата обращения: 16 ноября 2015

C++ AMP

pages 205—214 C++ AMP : Language and Programming Model — Version 1.0 : August 2012  (англ.) Parallel Programming in Native Code — C++ AMP Team Blog  (англ

Ambric

Mike Butts, Anthony Mark Jones, Paul Wasson, «A Structural Object Programming Model, Architecture, Chip and Tools for Reconfigurable Computing», Proceedings

Разделённое глобальное адресное пространство

«An Introduction to the Partitioned Global Address Space (PGAS) Programming Model» Архивная копия от 15 ноября 2013 на Wayback Machine int main() {

Координатный спуск

Performance Model Based Image Reconstruction. — Proceedings of the 21st ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. — New York

Apache Beam

FlumeJava: Easy, Efficient Data-parallel Pipelines (PDF). Proceedings of the 31st ACM SIGPLAN Conference on Programming Language Design and Implementation

Атомарная операция

McKenney, Is Parallel Programming Hard, And, If So, What Can You Do About It? (page 31), 2016-07-31 (англ.). Linux-Kernel Memory Model. Atomic Operations

Global Arrays

Littlefield, Richard J. Global arrays: A nonuniform memory access programming model for high-performance computers (англ.) // The Journal of Supercomputing[англ