vak: (Улыбка)
[personal profile] vak
Вначале было слово
Вначале была статья Тони Хоара "Communicating Sequential Processes" 1978 года. Да, сэр Хоар - тот самый, который разработал язык Алгол-60 и получил за это Тьюринговскую премию. В статье он описывает некий вариант языка программирования с концепцией существенного параллелизма. Он не ставил задачу полностью определить язык, так только, набросал несколько идей с высоты своего гения. Насколько я знаю, никто так и не сделал реальный язык програмирования, но математикам идея понравилась, и они часто используют нотацию Хоара в своих статьях для рассуждения о параллельных процессах.

Пример программы в нотации Хоара: решето Эратосфена.
[SIEVE(i:1..100)::
  p,mp:integer;
  SIEVE(i-l)?p;
  print!p;
  mp := p; comment mp is a multiple of p;
 *[m:integer; SIEVE(i-l)?m ->
   *[m > mp -> mp := mp + p];
    [m = mp -> skip
    []m < mp -> SIEVE(i + l)!m
] ]
||SIEVE(0)::print!2; n:integer; n := 3;
    *[n < 10000 -> SIEVE(1)!n; n := n + 2]
||SIEVE(101)::*[n:integer; SIEVE(100)?n -> print!n]
||print::*[(i:0..101) n:integer; SIEVE(0?n --> ...]
]
Гении не ходят в одиночку. В 1985 году в Калифорнийском технологическом институте Алан Мартин обнаружил, что такой язык замечательно преобразуется в асинхронные цифровые схемы. Его статья "Compiling Communicating Processes into Delay-Insensitive VLSI Circuits" стала отправной точкой для многочисленных последователей. Мартин не изобретал язык, его увлекала исключительно возможность построения схем. Но главное - он распахнул дверь в огромную неисследованную область. Забегая вперед, стоит упомянуть, что два года назад Калтех отмечал 25-летие первого в мире асинхронного процессора, созданного под руководством профессора Алана Мартина.

Мощная бронебойная сила подошла в виде голландского математика Kees van Berkel из университета Eindhoven. В своей основополагающей работе 1993 года "Handshake circuits: an asynchronous architecture for VLSI programming" (ранний вариант в виде PDF) он досконально математически исследовал всю область асинхронных цифровых цепей и элементарных составных компонентов. Осталось дело за практиками. По ходу дела ван Беркель доопределил язык, унаследованный от Хоара, и назвал его Tangram. Вот к примеру простейший компонент типа буфер:
(a?W & c!W) · |[ x, y: var W | a?x; #[(a?y || c!x); (a?x || c!y)] ]|
Он преобразуется в следующую схему:


Идею Танграма подхватила фирма Philips. В недрах её исследовательского отделения была разработана коммерческая реализация тулчейна, а в 2003 отпочкована в виде отдельной фирмы. Первым продуктом компании был асинхронный процессор 80с51. В 2006 году был разработан асинхронный процессор с архитектурой ARM. По слухам, большинство чипованных кредитных карт и биометрических паспортов в мире сделано на процессорах этой фирмы. По каким-то причинам в 2009 году Филипс решил закрыть этот бизнес. Фирма Handshake Solutions внезапно канула в небытие вместе со всем софтом.

Но технология не умерла, нет: на помощь пришли британцы. С конца 90-х в университет Манчестера разрабатывался альтернативный вариант реализации идей ван Беркеля: упомянутый в предыдущем посте язык Balsa. Хотя работа и остановилась несколько лет назад, исходные тексты вполне доступны. Имеется описание языка и софта. Язык сильно ушёл от Хоара и стал вполне читабельным. Показанный выше буфер на Бальсе выглядит так:
type word is 8 bits

procedure buffer (input a: word; output c: word) is
local
    variable x, y: word
begin
    a -> x;
    loop
        a -> y || c <- x;
        a -> x || c <- y
    end
end

Date: 2016-09-08 10:18 (UTC)
From: [identity profile] ircicq.livejournal.com
В 90-х был популярен Occam.
Он ведь тоже для асинхронных схем.

Date: 2016-09-08 11:13 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
А как такую схему читать, кстати? Это что-то принципиально отличающееся от привычных И-ИЛИ-НЕ, или это в двух словах не описать?

Date: 2016-09-08 11:46 (UTC)
From: [identity profile] ircicq.livejournal.com
Схема описывается не как Булевская формула, а как программа для множества параллельных исполнителей.
Edited Date: 2016-09-08 11:46 (UTC)

Date: 2016-09-09 00:01 (UTC)
From: [identity profile] a-shen.livejournal.com
и он был разработан при прямом участии Хоара. Правда, не сказать, чтобы семантика была объяснена так уж внятно (в книжке Хоара или описании Оккама)...

Date: 2016-09-08 13:49 (UTC)
From: [identity profile] evol-of-sorrow.livejournal.com
Турбо балсаль :-)
Edited Date: 2016-09-08 13:51 (UTC)

Date: 2016-09-08 15:59 (UTC)
From: [identity profile] kondybas.livejournal.com
Ну, хорошо, а как всю эту асинхронную ботву можно применить в этих наших существенно параллельных энторнетиках?

Date: 2016-09-09 15:17 (UTC)
From: [identity profile] sir66.livejournal.com
Я в общем то не спец, но что то мне кажется, что свитчи испокон веков были асинхронными. Это их фича. Хабы уж точно. И вообще, ты, мне кажется, немного смешиваешь ассинхронный дизайн как подход в микроэлектронике подразумевающий отсутствие тактового генератора и параллельные архитектуры. Те же транспьютеры почти наверняка имели тактовый генератор, при том что множество схем не имеют тактирования, но при этом лишены параллелизма. Ну например, какой нибудь счетчик.

Date: 2016-09-08 16:01 (UTC)
From: [identity profile] spamsink.livejournal.com
25-летие первого в мире асинхронного процессора

МИКРОпроцессора, конечно, потому что просто процессоры бывали асинхронные как минимум 50 лет назад.

Date: 2016-09-09 04:09 (UTC)
From: [identity profile] spamsink.livejournal.com
ATLAS же пресловутый был асинхронным.

Date: 2016-09-09 06:53 (UTC)
From: [identity profile] spamsink.livejournal.com
Экстракод и режим супервизора - возможно, а индекс-регистр - это, КМК, уже позднейшее название. В оригинале они регистры-модификаторы, отсюда M1-M17.

Date: 2016-09-09 06:56 (UTC)
From: [identity profile] spamsink.livejournal.com
Да вроде не быстрее:
Floating-point add, no modification – 1.61 microseconds

Date: 2016-09-09 14:52 (UTC)
From: [identity profile] spamsink.livejournal.com
ЕМНИП, у сложения 4 такта в УУ, и в среднем 5 в АУ.

Date: 2016-09-09 21:03 (UTC)
From: [identity profile] spamsink.livejournal.com
Всё включено, раз максимальная длительность - больше сотни тактов.

Date: 2016-09-09 22:35 (UTC)
From: [identity profile] spamsink.livejournal.com
Ох, надо делать gate-accurate симулятор.

Date: 2016-09-09 23:16 (UTC)
From: [identity profile] spamsink.livejournal.com
Альбомы, вроде, все собрались.

Date: 2017-03-07 07:16 (UTC)
From: [personal profile] ygam
IAS machine фон Неймана была асинхронной.

Date: 2016-09-08 17:26 (UTC)
From: [identity profile] mtve.livejournal.com
очень круто!

Date: 2016-09-09 09:07 (UTC)
From: [identity profile] codedot.livejournal.com
Я несколько лет занимаюсь системами/сетями взаимодействия (interaction nets/interaction systems), в основном, в связи с λ-исчислением. Я заметил, что Вас заинтересовал подкласс interaction systems, называемый hard interaction systems, hardware-применения которых обычно называют как clockless computation и/или handshake technology. В своих поисках мне попались несколько статей, из них в своем архиве у меня лежат три из них. Я подумал, что они Вас могут заинтересовать:

Arjan Bink and Mrk de Clercq, Handshake Solutions, and Richard York, ARM. ARM996HS Synthesizable CPU with Clockless Technology (2006);
Denis Bechet, Sylvain Lippi. Universal Boolean Systems (2008);
Denis Bechet, Sylvain Lippi. Hard combinators (2008).

Я положил все три документа в виде PDF на Dropbox:

https://www.dropbox.com/sh/mv6a1x9lql6y3wg/AAAdSDegYkE7wRRSBFsWfOTra

Date: 2016-09-09 15:25 (UTC)
From: [identity profile] sir66.livejournal.com
В свое время вроде много писалось про то, что подобные схемы хорошо порождаются при использовании функциональных языков. Вроде все получалось очень красиво. Эта тема совсем заглохла?

Date: 2017-03-07 13:27 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Пай-калкулюс же.