- •Оглавление
- •1. Архитектура, технологические характеристики, принципы работы, проблемы развития компьютеров и вс. 3
- •2. Принципы, языки, технологии параллельного программирования. 16
- •3. 3. Реализация параллельных языков программирования 34
- •Архитектура, технологические характеристики, принципы работы, проблемы развития компьютеров и вс.
- •Краткая история развития параллелизма в архитектуре эвм.
- •Введение и основные понятия.
- •Ряд основных понятий и определений.
- •Архитектурный облик современного компьютера.
- •Режимы работы компьютера и связь с работой процессора.
- •Два вида параллелизма.
- •Показатели вс, сравнение.
- •Принципы, языки, технологии параллельного программирования.
- •Параллелизм задач, его особенности и характеристики.
- •Процессы, их характеристики.
- •Типы и характеристики параллелизма.
- •Типы и особенности параллелизма.
- •Процессы модели и языки.
- •Сети Петри
- •Событийная модель; статические процессы.
- •Расширение сети Петри
- •1. Одновременность.
- •2. Сети с порождение процессов.
- •3. Расширение: рекурсивные сети
- •4. Раскрашивание сети
- •Модели взаимодействующих последовательных процессов Хоара
- •3. Реализация параллельных языков программирования
- •Примитивы и языки параллельного программирования
- •Язык граф - схемного потокового параллельного программирования (ягспп)
- •Функциональное параллельное программирование
- •3.4.1.1. Операции композиции
- •3.4.1.2. Задание данных и базисных функций
- •Модель асинхронного выполнения функциональных программ
3.4.1.2. Задание данных и базисных функций
Данные в общем случае представляют собой множества кортежей одинаковой длины. С теоретической точки зрения, данные в языке представляются как (0, m)-арные, m0, d-отношения. Определение данных осуществляется путем замыкания операций композиции,,,и оператора наименьшей фиксированной точки над непустым множеством конструкторов. Каждое определяемое множество данных относится к определенному типу данных, который характеризуется в некотором смысле и общей структурой построения этого множества и используемыми при этом конструкторами. Идентификация типа данных осуществляется путем однозначного сопоставления ему имени.
Отметим, что операция на данных (при определении абстрактных типов данных, которые представляются как (0, m)-арные d-отношения), равносильна операции декартова произведения; операция по-прежнему имеет интерпретацию теоретико-множественного объединения.
Пусть – множество символов конструкторов и– множество символов парных им деструкторов. С каждым конструктором сi и деструктором связана их арность: (ni, 1) и (1, ni) соответственно.
Конструкторы и деструкторы интерпретируются как функциональные d-отношения на эрбрановском универсуме – индуктивном классе DC:
если арность ci есть (0, 1), то ciDC;
если ci имеет арность (ni, 1), ni>0, то ci12…nDC1 для любых iDC, i = 1, 2, …, ni;
других элементов, кроме определенных в п. 1 и 2 в DC нет.
Введем интерпретацию конструкторов:
и
.
Легко видеть, что конструкторы – всюду определенные функции на DC, а деструкторы в общем случае – частичные функции, обратные функциям, сопоставляемым конструкторам.
Множество DC представимо в языке в виде наименьшей фиксированной точки реляционного уравнения:
.
Более того, можно расширить сигнатуру операций композиции d-отношений путем добавления к ней унарной операции взятия обратного отношения:
.
Рассмотрим множество базисных функций , где INT – натуральный ряд чисел, m>0, 1im, .
Можно показать, что на DC теперь выразима любая вычислимая функция при условии, что C содержит хотя бы один (0, 1)-арный конструктор и хотя бы один (m, 1)-арный конструктор для m>0.
В частности, в языке с этой сигнатурой операций и этим множеством базисных функций выразимы все комбинаторные d-отношения из [7]. В качестве примера приведем здесь некоторые из них:
> (функция-нуллификатор): , где (ni, 1) – арность конструктора ci;
(тождественная функция): ;
> (функция равенства или на DC – тождества кортежей длины n):
(первое уравнение говорит о том, что кортежи равны, если равны их соответствующие элементы; второе уравнение утверждает, что два элемента множества DC равны, если они тождественны);
>/– (функция неравенства кортежей длины n):
.
Эти функции имеют интерпретацию:
>,
,
>,
>– /–, где n>0;
для n = 0 график первых трех функций есть {((, ()}, у последней он пуст.
Аналогично можно определить комбинаторное функциональное d-отношение:
<, n>0 и для n=0<.
Определимость в языке функции > позволяет исключить операцию композиции функций (условие), как зависящую операцию: = >.
Кроме того, операция взятия обратного отношения становится конструктивной и для всякого определения d-отношения может быть «опущена» на уровень базисных функций путем использования следующих правил [7]:
;
(>), где1 и 2 имеют арности (n, n1) и (n, n2) соответственно.
Пусть Xi = i, i = 1, 2, …, k; обратным для X1 (не нарушая общности, положим, что в этой системе уравнений нас интересует X1) является наименьшее решение для системы уравнений, i = 1, 2, …, k, где.
Введение понятия конструктора и деструктора служит основой для построения ортогональных функций на абстрактных типах данных.
Очевидно, что любая пара деструкторов ипри ij представляет пару ортогональных функций. Полагая, что арности ci и cj одинаковы, отношение будет функциональным. Также, если1 и 2 – ортогональные функции, а 3 и 4 – произвольные функциональные композиции, то 13 и 24, 13 и 24, 13 и 24 являются парами ортогональных функций. Очевидно, что если в представлении 12…k, k>1, функциональные композиции i и j, ij, попарно ортогональны или совместны, то отношение является функциональным.
Отметим, что введенная конструктивная операция взятия обратного отношения позволяет легко (в принципе автоматически) строить обратные отношения для функций, а для определяемых абстрактных данных – предикаты принадлежности этим данным (см. пример ниже).
Пример.
Определим в языке натуральный ряд чисел следующим образом:
, где o и succ (0, 1)-арный и (1, 1)-арный конструкторы с графиками: ,, где C = {o, succ}.
Обратным для NAT является разрешимый предикат принадлежности DC:
.
Если определить аппликацию для функций-деструкторов o-1 и succ-1 в форме:
,
и рассматривать как вычислимое неопределенное значение, то
, где – наименьшее решение для PNAT в его определении выше.
Пример.
Для иллюстрации задания функций рассмотрим определение в языке функции умножения на NAT:
Для ясности здесь указаны арности определяемых функций Fум и Fсл; очевидно их тип принадлежит множеству отображений NATNATNAT.
Как только указаны типы базисных функций (в данном примере это функции o: {}NAT, succ: NATNAT, : ‘t‘t‘t, i = 1, 2, где ‘t – произвольный тип, тип определяемых функций Fум и Fсл может быть выведен путем реконструкции типов правых частей их определений в уравнениях выше согласно согласованию типов для операций композиции и решению типовых уравнений, вытекающих из этих уравнений. Таким образом построен алгоритм типового контроля в разработанном языке функционального параллельного программирования
В рассматриваемом языке функционального программирования в качестве базисных включены реализованные и эффективно вычисляемые компьютером арифметические, логические и другие функции вместе с множеством базисных типов (real, int и др.) на которых они определены.
По аналогичным соображениям эффективности реализации в язык включены механизмы импортирования функций из других, в том числе, последовательных языков программирования (C, C++, Java и др.), что естественно, существенно расширяет возможности задания «базисных» функций, а сам языке превращается в некотором смысле в полиязычную систему программирования.