UNITY (язык программирования)

Теоретический язык программирования для описания параллельных вычислений

UNITY — язык программирования, созданный К. Мани Чанди и Джаядевым Мисрой для их книги Parallel Program Design: A Foundation . Это теоретический язык, который фокусируется на what , а не where , when или how . Язык не содержит методов управления потоком , и операторы программы выполняются недетерминированным образом до тех пор, пока операторы не перестанут вызывать изменения во время выполнения. Это позволяет программам работать бесконечно, например, автопилоту или системам безопасности электростанции, а также программам, которые обычно завершаются (которые здесь сходятся к фиксированной точке ).

Описание

Все операторы являются присваиваниями и разделяются символом #. Оператор может состоять из нескольких присваиваний в форме a,b,c := x,y,z, или a := x || b := y || c := z. Вы также можете иметь список квантифицированных операторов , , где x и y выбираются случайным образом среди значений, удовлетворяющих выражению . Квантифицированное присваивание аналогично. В оператор выполняется одновременно для всех пар и , удовлетворяющих выражению .<# x,y : expression :: statement><|| x,y : expression :: statement >xy

Примеры

Сортировка пузырьком

Сортировка массива пузырьком путем сравнения соседних чисел и перестановки их, если они находятся в неправильном порядке. Использование ожидаемого времени, процессоров и ожидаемой работы. Причина, по которой у вас есть только ожидаемое время, заключается в том, что всегда выбирается случайным образом из . Это можно исправить, перевернув вручную. Θ ( н ) {\displaystyle \Тета (n)} Θ ( н ) {\displaystyle \Тета (n)} Θ ( н 2 ) {\displaystyle \Тета (n^{2})} Θ ( н ) {\displaystyle \Тета (n)} k { 0 , 1 } {\displaystyle \{0,1\}} k

Программа пузырьковой сортировкиобъявить n: целое число, A: массив [0..n-1] целых чиселизначально п = 20 # <|| i : 0 <= i и i < n :: A[i] = rand() % 100 >назначать <# к : 0 <= к < 2 :: <|| i : i % 2 = k и 0 <= i < n - 1 :: А[i], А[i+1] := А[i+1], А[i] если А[i] > А[i+1] > >конец

Ранг-сортировка

Вы можете сортировать по времени с помощью сортировки по рангам. Вам нужны процессоры, и вы делаете работу. Θ ( бревно н ) {\displaystyle \Тета (\log n)} Θ ( н 2 ) {\displaystyle \Тета (n^{2})} Θ ( н 2 ) {\displaystyle \Тета (n^{2})}

Программа рангсортобъявить n: целое число, A,R: массив [0..n-1] целых чиселизначально п = 15 # <|| я : 0 <= я < н :: A[i], R[i] = rand() % 100, i >назначать <|| я : 0 <= я < н :: R[i] := <+ j : 0 <= j < n и (A[j] < A[i] или (A[j] = A[i] и j < i)) :: 1 > > # <|| я : 0 <= я < н :: А[Р[i]] := А[i] >конец

Алгоритм Флойда-Уоршалла

Используя алгоритм Флойда-Уоршелла для всех пар кратчайших путей , мы итеративно включаем промежуточные узлы и получаем время, используя процессоры и работу. Θ ( н ) {\displaystyle \Тета (n)} Θ ( н 2 ) {\displaystyle \Тета (n^{2})} Θ ( н 3 ) {\displaystyle \Тета (n^{3})}

Программа shortestpathобъявить n,k: целое число, D: массив [0..n-1, 0..n-1] целых чиселизначально п = 10 # к = 0 # <|| i,j : 0 <= i < n и 0 <= j < n :: D[i,j] = rand() % 100 >назначать <|| i,j : 0 <= i < n и 0 <= j < n :: D[i,j] := min(D[i,j], D[i,k] + D[k,j]) > || к := к + 1 если к < n - 1конец

Мы можем сделать это еще быстрее. Следующие программы вычисляют все пары кратчайших путей за время, используя процессоры и работу. Θ ( бревно 2 н ) {\displaystyle \Тета (\log ^{2}n)} Θ ( н 3 ) {\displaystyle \Тета (n^{3})} Θ ( н 3 бревно н ) {\displaystyle \Тета (n^{3}\log n)}

Программа shortestpath2объявить n: целое число, D: массив [0..n-1, 0..n-1] целых чиселизначально п = 10 # <|| i,j : 0 <= i < n и 0 <= j < n :: D[i,j] = rand() % 10 >назначать <|| i,j : 0 <= i < n и 0 <= j < n :: D[i,j] := min(D[i,j], <min k : 0 <= k < n :: D[i,k] + D[k,j] >) >конец

После раунда содержит длину кратчайшего пути от до длины . В следующем раунде длины и т. д. г {\displaystyle r} D[i,j] я {\displaystyle я} дж {\displaystyle j} 0 г {\displaystyle 0\точки r} 0 2 г {\displaystyle 0\точки 2r}

Ссылки

  • К. Мани Чанди и Джаядев Мисра (1988) Разработка параллельных программ: фундамент .
Retrieved from "https://en.wikipedia.org/w/index.php?title=UNITY_(programming_language)&oldid=1192395750"