Спасибо. Но я, если честно, так и не разобрался в Вашей идее. Надо будет как нибудь засесть основательно. А поскольку не разобрался, то и не критикую более. (про сырость идеи — просто, высказал мнение. Вам виднее, разумеется).
Модель Маллера — это ведь система уравнений, как ее можно не уважать? Но я лично никогда не пробовал их получать по таблицам истинности, у меня были чисто инженерные задачи: проверить небольшой автомат на самосинхронность, а для этого достаточно описать его сетью Петри и проверить в Петрифае. Т.е. таблицы истинности, диаграммы переходов, модель Маллера — знаю только в теории.
Очень глубоко заблуждаетесь.
В синхронной схеме переходной процесс начинается с тактового импульса, поэтому неисправность одного элемента, в логике, к примеру, означает только, что приемный триггер защелкнет неверную информацию. Схема при этом останется рабочей. А в некоторых случаях неисправность и вовсе будет незаметна: к примеру, если в 32-х битном умножителе подавать на вход только 8-ми разрядные числа, никто и не заметит что разряды 30-31 перестали переключаться в 1, поскольку на них всегда подан 0.
В синхронных схемах ошибки отлавливают проверкой четности, Хеммингом/Хсяо и т.д.
А в самосинхронной схеме любой сбой (в любом элементе) просто приведет к остановке работы (защелкиванию) всей схемы — почувствуйте разницу.
Я там вверху пару оговорок сделал. Чистые самосинхронные схемы на ПЛИС делать нельзя, потому что нет индицируемости неисправностей некоторых транзисторов. А квази-самосинхронные, или другие асинхронные — делать можно. Поскольку ajrec и не заявлял, что его схемы — чистые самосинхронные, то почему бы их и не помоделировать на ПЛИС.
p.s. по поводу мультиплексора я там выше немного погорячился. LUT на схеме — мультиплексор, но имеет состояния, хранимые на паразитных ёмкостях. В современной схемотехнике такое часто используют, к примеру — в схемах D-триггеров. Но это уже не КМОП-логика, а скорее ближе к схемотехнике ячеек памяти. Бенефит от такого дизайна — меньшая площадь и большая скорость. Чистые самосинхронные схемы так делать нельзя, они теряют независимость от задержек. А для традиционной синхронной схематехники — вполне нормальный и понятный подход.
В универе Айзу они работали. Он тогда только создавался, специалистов по всему миру искали.
На мой взгляд, уважаемому ajrec надо со своими идеями оппонентов искать, а не заниматься популяризацией своих сырых идей здесь, на хабре. Ведь сырые же, идеи, правда?
p.s. если же речь идет о асинхронных схемах вообще, то, разумеется, их можно делать на FPGA. Потому что асинхронная схема по определению, это просто схема, работающая без внешней синхронизации (от тактового генератора). Асинхронных схем существует несколько разновидностей, поэтому надо всегда указывать, о каких схемах идет речь. Чтобы не было путаницы.
Под «fpga в сути своей синхронны» понимается скорее то, что на fpga нельзя сделать чистую самосинхронную схему. Объясню, почему:
Под чистой понимается схема, у которой неисправность любого транзистора (перестал переключаться) приводит к остановке всей схемы или ее части. В таком случае, не-чистая схема, их еще называют квази-самосинхронные, это схемы с различной степенью отхождения от этого правила. Далее, что есть FPGA? это эмулятор, в котором эмулируемая схема использует только часть транзисторов. Есть еще служебные транзисторы, которые поддерживают зашитую конфигурацию. Тот же LUT — избыточная функция, из которой используется только часть. Кроме того, архитектура LUT это вовсе не мультиплексор, а сложная мостиковая схема. Вот так выглядит альтеровский LUT4
Это даже не КМОП-логика, и уж тем более не мультиплексор. Из всего этого следует, что чистые самосинхронные схемы на FPGA не сделать. Именно это видимо и имелось ввиду на вики.
Небольшое уточнение, полумодулярность — это свойство замкнутого автомата, а не отдельных фрагментов. Когда говорят о полумодулярности фрагмента, то это жаргон: имеется ввиду, что этот фрагмент можно замкнуть внешним окружением до полного автомата, и уже полный автомат будет самосинхронным.
Сергей, я не коллега Плеханова, хотя знаком — встречал пару раз, несколько лет назад.
По поводу замыкания. Во-первых, Вы ведь сами замкнули граф(!). Без внешней среды должны получиться только отдельные треки зависимостей входных переменных от выходных, а у Вас все замкнуто — входы на выходы. Почему Вы его замкнули? Второе: все известные тулы вроде петрифая работают только с замкнутыми графами, видимо — по той же причине что и Ваш алгоритм. Мне приходилось проектировать самосинхронные защелки — для их проверки в петрифае пришлось выдумывать внешнюю обвязку схемы, чтобы полный замкнутый граф получился полумодулярный. В принципе, идея понятна, поскольку проектируемая схема все равно предназначена для использования в неком самосинхронном окружении, чью полумодулярность она не должна нарушать. Поэтому делается заглушка, эмулирующая это окружение, и вполне логично что с этой заглушкой проверяемая схема должна получиться полумодулярной. Если же Вы предлагаете использовать неполумодулярную заглушку, то как судить о том, что разрабатываемая схема не испортит полумодулярности конечной схемы, в которой она должна быть использована потом?
Таким образом, Вам надо либо самому перестать замыкать граф, и придумать какое то доказательство, что полученная синтезом схема будет полумодулярна, когда ее встроят в общую схему (где она будет использоваться в дальнейшем), либо доказать полумодулярность разрабатываемой схемы при том, что заглушка неполумодулярна. Либо — делать как все, т.е. замыкаемый граф обязан быть полумодулярным.
По поводу опредления полумодулярности — я его сформулировал выше. Суть сводится к тому, что у Вашего графа (с учетом замыкания) нет верхней грани. На самом деле, я допускаю, что требование верхней грани может оказаться избыточным — Маллер, Варшавский, и последователи тоже могли ошибаться. В таком случае, это дырка в теории самосинхронных схем, и Вам надо ее закрыть математикой, раз уж Вы этой (гипотетической) дырой решили воспользоваться.
С другой стороны, я ведь не комиссия по науке, а просто высказываю свое мнение. И тоже могу ошибаться, поскольку самосинхронными схемами занялся сравнительно недавно — 4 года назад, всего лишь. Наверное, Вам лучше пообщаться с корифеями — Мараховским, Стародубцевым, Кондратьевым, Яковлевым… да Вы их и так знаете всех.
Еще один момент. Вы ведь хотите получить схему — фаргмент графа со сходами а,b и выходами x,y, но вынуждены замыкать схему, чтобы получить автомат. Т.е. достраиваете избыточное окружение для замыкания. Из этого следует, что полумодулярность может нарушаться и в замыкании — Вы просто неправильно достроили часть графа, отвечающую за внешнюю среду. Но может быть и так, что неполумодулярность заключается в части схемы между а,b и x,y. Так что надо поработать еще с замыканием графа — может быть и получится сделать его полумодулярным за счет внешней части. Но формула x=AND(b,a) y=AND(b,!a) тут никак не получается, мне кажется.
Это синтез в MPSat (входит в пакет воркрафт), петрифай вообще отказался работать с такой схемой. Про этот тул мне ничего не известно, кроме того что это альтернатива петрифаю.
что переключать после b+: x+ (если a=1), или y+ (если a=0).
Должно учитываться, ведь это следует из графа. Хотя, за MPSat ручаться не буду — раньше я только петрифаем пользовался.
Размышлял, почему петрифай не считает этот граф полумодулярным. Накопления точек нет, граф безопасный — это выяснили. Второе условие полумодулярности — живая сеть, и вот тут нашла коса на камень. С одной стороны, все переменные могут переключаться. С другой — могут и не переключиться. К примеру, если точка не будет попадать в нижнюю часть графа, то Y вообще не будет переключаться. Что из это следует. Условие полумодулярности — это представление состояний автомата в виде алгебраической структуры с верхней и нижней гранью. Верхняя и нижняя грани означают, что есть конечное число смен состояний графа от начальной маркировки, за которое все переменные переключатся хотя бы один раз в 1 (+) и один раз в 0 (-). А здесь получается, что верхней грани нет. Поэтому живая или не живая эта сеть, но она точно не полумодулярна. И вот тут возникает опасный момент. Если мы имеем дело с полумодулярными схемами, то их свойство DI доказано математикой (возможностью представить автомат полумодулярной алгебраической структурой — это фактически независимость от задержек). А если схема не полумодулярна, как у Вас, то где гарантия независимости от задержек? Вы попадаете на необходимость доказывать DI-свойство своей схемы, пробел в теории однако…
p.s. Загнал схему в воркрафт, был не прав касательно накопления точек. Признаю.
Тем не менее, петрифай подтвердил что схема не полумодулярна.
Синтез дал следующее:
assign a = (~a | b | x) & a | ~a & ~b & ~y;
assign b = ~x & ~y | b & ~x & ~y;
assign x = a & b | b & x;
assign y = ~a & b | b & y;
Итого, получилась какая то асинхронная схема, но не самосинхронная. Что с этим делать и как использовать, мне не понятно. Но что то в этом есть, наверное. За сим, с критикой завязываю.
Сергей, у меня никакого желания Вас уесть, поверьте. Как видите, я тут единственный, кто задает вопросы и высказывает сомнения. Мой интерес исключительно спортивный — самосинхронными схемами я больше не занимаюсь, поэтому докопать до истины для меня не есть дело принципа. Но пока существует диалог — почему бы и не поговорить?
По поводу графа и накопления точек, объясню свою позицию еще раз, кратко. Представьте что в левом верхнем графе здесь несколько раз отрабатывает нижняя часть b+ x+ b- x-, а верхняя арка а+ а- не работает (или там внезапно случилась огромная задержка). Поскольку нижняя часть отработала несколько раз, в а+ накопятся точки. Отсюда следуют и состязания, и несоответствие классу SI, и все остальное, о чем я писал выше. Что Вас в этом смущает: что арка а+ а- может «залипнуть», или что в а+ в случае залипания начнут накапливаться точки?
Вот что я могу еще посоветовать. Графы в этом последнем примере небольшие, их можно засунуть в Петрифай. Можете сами убедиться, что они небезопасны. Петрифай можно взять из пакета Workraft — под линукс или виндос, я об этом писал здесь https://habrahabr.ru/post/306056/. Я понимаю, что синтез в Петрифай Вы не приемлете, но проверку на полумодулярность почему бы не сделать.
Сергей, а Вы очень напрасно не разобрались с полумодулярностью, поскольку используете общепринятые графы. Суть полумодулярности — отсутствие состязаний (гонок, races, glitches). Посмотрите на свой левый граф первого рисунка: ветка b+x+b-x-b+… может циклически переключаться независимо от всей другой схемы (которая может вообще остановиться из-за задержки в одном из проводов). Или же, судя по графу, допустимо циклическое переключение а+а-а+а-… независимо от другой схемы. С такими независимыми сегментами графа в кружках могут накапливаться точки — а значит возможны состязания. Это не только не DI схема, но даже и не SI!
Что я могу сказать. Вы используете общепринятые графы, но читаете их как то по своему, видимо. А значит, мы говорим на разных языках. Это значит, что и Вы, возможно, не поймете мои аргументы выше. Могу посоветовать только разобраться с сетями Петри, как ими принято описывать СС, и если окажется что Вы читаете графы как то иначе, то подробно изложите, как их следует читать (хотя я предпочел бы иметь дело с традиционными графами). А может и сами ошибки у себя увидите.
Событие "?" означает, что с этого момента и до наступления события "/" (или "\") сигнал может произвольным образом менять свое значение: с 0 на 1 и обратно произвольное количество раз.
Тогда это будет уже не полумодулярная схема, поскольку Вы множественные переходные процессы прячете под одним событием. Более того, это атрибут синхронных схем — маскировать переходные процессы в проводе сигналом управления.
Вот, посмотрите, как сделано у Варшавского: код фазы спэйсера 00 сменяется на код фазы данных (10 или 01), а затем снова входит в спейсер 00. Смена фаз дает монотонность, а значит и полумодулярность; данные могут спокойно меняться произвольным образом, поскольку между любым их изменением стоит разделитель.
Корректно синхронные и асинхронные схемы сравнивать нельзя. Тем более, что асинхронных схем существует несколько разновидностей, и самосинхронные — только одни из.
Вот Вам пример, сравните две эквивалентных схемы:
1. Синхронный триггер, у которого выход замкнут на вход через инвертор
2. Три инвертора в последовательном включении, замкнутых в кольцо.
Первая схема — синхронная, вторая — самосинхронная, делают одно и то же — подают на вход инверсию выхода. Где будет больше частота?
Можно придумать и более сложные примеры, где синхронная реализация будет быстрее, а асинхронная медленнее (или наоборот), либо синхронная окажется больше по площади чем асинхронная (или наоборот). Т.е. вопрос сравнения «вообще» — некорректен, надо рассматривать каждый частный случай отдельно.
Сергей, спасибо конечно, что назвали меня доктором наук, да еще компетентным. Последнее — может быть, а вот первое не так, увы — я простой к.т.н.
Теперь по делу. Вы вот пишете, что у сигнала есть три типа событий — ("?", "/" и "\"). Но в бинарной логике (и в классической цифровой электронике) у лог. сигнала возможно всего два состояния — 0 и 1. А Вы хотите получить 3 состояния. Варшавский с командой еще 40 лет назад нашли выход из положения — сигнал закодировали парой бинарных кодов: коды 01 и 10 соответствовали лог. 0 и 1 ("/" и "\" в Вашей интерпретации), а коды 11 и 00 они назвали служебными или спэйсером ("?" по-Вашему). Таким образом, сигнал передавался по двум проводам и в две фазы: служебной фазе ("?") и фазе данных ("/" или "\"). Чувствуете похожесть идеи? При этом, проектировать такие схемы методом Варшавского можно вообще без сетей Петри и Petrify, гораздо проще. Как? Слишком много печатать, читайте первоисточники. Впрочем, оказалось, что кодировать сигнал двумя проводами и вводить служебную фазу — ущербно, по ряду причин. Поэтому, революция отменяется, к сожалению. Но попытка засчитана.
Спасибо! Если я правильно понял, аппаратное перемножение матриц — просто надстройка на DSP, с целью распараллеливания. Вполне доходчиво объяснили, вопрос снят :-)
И про гугло-процессор тоже теперь понятно, зачем его сделали.
И все таки, в чем прикладной аспект действий с матрицами?
Прочитав тему и комменты, я этого так и не понял. Я не математик, и, увы, не понимаю прелести науки ради науки, но с матрицами учился работать в институте, как и многие в этой теме. Поэтому интерес к матрицам у меня тоже привит, хоть и очень приземленный. Так может кто то прямым текстом написать, что, к примеру, умножение матриц используется в: обработке звука, распознавании образов, расчете траектории, в криптомайнинге, или чем то еще? Назовите востребованную задачу и/или алгоритмы, где это используется на практике.
Для затравки, есть такой тензорный процессор от гугл ссылка на вики, который якобы творит чудеса распознавания образов. Здесь вот пишут, что операции над матрицами — это будущее микропроцессоров, следующая ступень эволюции. Есть здесь специалисты, кто понимает в чем бенефит от использования матриц при распознавании образов? Или, скажем, при замене скалярного набора операций типового FPU на аналогичный набор операций, но с матрицами?
С чего бы частоте расти? Частота уже лет 10 не может планку в 5 ГГц взять, и все больше в районе 2-3 ГГц болтается. 5ГГц это технологический предел CMOS, тупик.
Плотность — разве растет? Размеры затворов может и уменьшаются, но за счет того что их делают двойными->тройными->четверными, размер транзистора все равно тот же остается.
Модель Маллера — это ведь система уравнений, как ее можно не уважать? Но я лично никогда не пробовал их получать по таблицам истинности, у меня были чисто инженерные задачи: проверить небольшой автомат на самосинхронность, а для этого достаточно описать его сетью Петри и проверить в Петрифае. Т.е. таблицы истинности, диаграммы переходов, модель Маллера — знаю только в теории.
В синхронной схеме переходной процесс начинается с тактового импульса, поэтому неисправность одного элемента, в логике, к примеру, означает только, что приемный триггер защелкнет неверную информацию. Схема при этом останется рабочей. А в некоторых случаях неисправность и вовсе будет незаметна: к примеру, если в 32-х битном умножителе подавать на вход только 8-ми разрядные числа, никто и не заметит что разряды 30-31 перестали переключаться в 1, поскольку на них всегда подан 0.
В синхронных схемах ошибки отлавливают проверкой четности, Хеммингом/Хсяо и т.д.
А в самосинхронной схеме любой сбой (в любом элементе) просто приведет к остановке работы (защелкиванию) всей схемы — почувствуйте разницу.
p.s. по поводу мультиплексора я там выше немного погорячился. LUT на схеме — мультиплексор, но имеет состояния, хранимые на паразитных ёмкостях. В современной схемотехнике такое часто используют, к примеру — в схемах D-триггеров. Но это уже не КМОП-логика, а скорее ближе к схемотехнике ячеек памяти. Бенефит от такого дизайна — меньшая площадь и большая скорость. Чистые самосинхронные схемы так делать нельзя, они теряют независимость от задержек. А для традиционной синхронной схематехники — вполне нормальный и понятный подход.
На мой взгляд, уважаемому ajrec надо со своими идеями оппонентов искать, а не заниматься популяризацией своих сырых идей здесь, на хабре. Ведь сырые же, идеи, правда?
Под чистой понимается схема, у которой неисправность любого транзистора (перестал переключаться) приводит к остановке всей схемы или ее части. В таком случае, не-чистая схема, их еще называют квази-самосинхронные, это схемы с различной степенью отхождения от этого правила. Далее, что есть FPGA? это эмулятор, в котором эмулируемая схема использует только часть транзисторов. Есть еще служебные транзисторы, которые поддерживают зашитую конфигурацию. Тот же LUT — избыточная функция, из которой используется только часть. Кроме того, архитектура LUT это вовсе не мультиплексор, а сложная мостиковая схема. Вот так выглядит альтеровский LUT4
Это даже не КМОП-логика, и уж тем более не мультиплексор. Из всего этого следует, что чистые самосинхронные схемы на FPGA не сделать. Именно это видимо и имелось ввиду на вики.
По поводу замыкания. Во-первых, Вы ведь сами замкнули граф(!). Без внешней среды должны получиться только отдельные треки зависимостей входных переменных от выходных, а у Вас все замкнуто — входы на выходы. Почему Вы его замкнули? Второе: все известные тулы вроде петрифая работают только с замкнутыми графами, видимо — по той же причине что и Ваш алгоритм. Мне приходилось проектировать самосинхронные защелки — для их проверки в петрифае пришлось выдумывать внешнюю обвязку схемы, чтобы полный замкнутый граф получился полумодулярный. В принципе, идея понятна, поскольку проектируемая схема все равно предназначена для использования в неком самосинхронном окружении, чью полумодулярность она не должна нарушать. Поэтому делается заглушка, эмулирующая это окружение, и вполне логично что с этой заглушкой проверяемая схема должна получиться полумодулярной. Если же Вы предлагаете использовать неполумодулярную заглушку, то как судить о том, что разрабатываемая схема не испортит полумодулярности конечной схемы, в которой она должна быть использована потом?
Таким образом, Вам надо либо самому перестать замыкать граф, и придумать какое то доказательство, что полученная синтезом схема будет полумодулярна, когда ее встроят в общую схему (где она будет использоваться в дальнейшем), либо доказать полумодулярность разрабатываемой схемы при том, что заглушка неполумодулярна. Либо — делать как все, т.е. замыкаемый граф обязан быть полумодулярным.
По поводу опредления полумодулярности — я его сформулировал выше. Суть сводится к тому, что у Вашего графа (с учетом замыкания) нет верхней грани. На самом деле, я допускаю, что требование верхней грани может оказаться избыточным — Маллер, Варшавский, и последователи тоже могли ошибаться. В таком случае, это дырка в теории самосинхронных схем, и Вам надо ее закрыть математикой, раз уж Вы этой (гипотетической) дырой решили воспользоваться.
С другой стороны, я ведь не комиссия по науке, а просто высказываю свое мнение. И тоже могу ошибаться, поскольку самосинхронными схемами занялся сравнительно недавно — 4 года назад, всего лишь. Наверное, Вам лучше пообщаться с корифеями — Мараховским, Стародубцевым, Кондратьевым, Яковлевым… да Вы их и так знаете всех.
Должно учитываться, ведь это следует из графа. Хотя, за MPSat ручаться не буду — раньше я только петрифаем пользовался.
Размышлял, почему петрифай не считает этот граф полумодулярным. Накопления точек нет, граф безопасный — это выяснили. Второе условие полумодулярности — живая сеть, и вот тут нашла коса на камень. С одной стороны, все переменные могут переключаться. С другой — могут и не переключиться. К примеру, если точка не будет попадать в нижнюю часть графа, то Y вообще не будет переключаться. Что из это следует. Условие полумодулярности — это представление состояний автомата в виде алгебраической структуры с верхней и нижней гранью. Верхняя и нижняя грани означают, что есть конечное число смен состояний графа от начальной маркировки, за которое все переменные переключатся хотя бы один раз в 1 (+) и один раз в 0 (-). А здесь получается, что верхней грани нет. Поэтому живая или не живая эта сеть, но она точно не полумодулярна. И вот тут возникает опасный момент. Если мы имеем дело с полумодулярными схемами, то их свойство DI доказано математикой (возможностью представить автомат полумодулярной алгебраической структурой — это фактически независимость от задержек). А если схема не полумодулярна, как у Вас, то где гарантия независимости от задержек? Вы попадаете на необходимость доказывать DI-свойство своей схемы, пробел в теории однако…
Тем не менее, петрифай подтвердил что схема не полумодулярна.
Синтез дал следующее:
assign a = (~a | b | x) & a | ~a & ~b & ~y;
assign b = ~x & ~y | b & ~x & ~y;
assign x = a & b | b & x;
assign y = ~a & b | b & y;
Итого, получилась какая то асинхронная схема, но не самосинхронная. Что с этим делать и как использовать, мне не понятно. Но что то в этом есть, наверное. За сим, с критикой завязываю.
По поводу графа и накопления точек, объясню свою позицию еще раз, кратко. Представьте что в левом верхнем графе здесь несколько раз отрабатывает нижняя часть b+ x+ b- x-, а верхняя арка а+ а- не работает (или там внезапно случилась огромная задержка). Поскольку нижняя часть отработала несколько раз, в а+ накопятся точки. Отсюда следуют и состязания, и несоответствие классу SI, и все остальное, о чем я писал выше. Что Вас в этом смущает: что арка а+ а- может «залипнуть», или что в а+ в случае залипания начнут накапливаться точки?
Что я могу сказать. Вы используете общепринятые графы, но читаете их как то по своему, видимо. А значит, мы говорим на разных языках. Это значит, что и Вы, возможно, не поймете мои аргументы выше. Могу посоветовать только разобраться с сетями Петри, как ими принято описывать СС, и если окажется что Вы читаете графы как то иначе, то подробно изложите, как их следует читать (хотя я предпочел бы иметь дело с традиционными графами). А может и сами ошибки у себя увидите.
Тогда это будет уже не полумодулярная схема, поскольку Вы множественные переходные процессы прячете под одним событием. Более того, это атрибут синхронных схем — маскировать переходные процессы в проводе сигналом управления.
Вот, посмотрите, как сделано у Варшавского: код фазы спэйсера 00 сменяется на код фазы данных (10 или 01), а затем снова входит в спейсер 00. Смена фаз дает монотонность, а значит и полумодулярность; данные могут спокойно меняться произвольным образом, поскольку между любым их изменением стоит разделитель.
Вот Вам пример, сравните две эквивалентных схемы:
1. Синхронный триггер, у которого выход замкнут на вход через инвертор
2. Три инвертора в последовательном включении, замкнутых в кольцо.
Первая схема — синхронная, вторая — самосинхронная, делают одно и то же — подают на вход инверсию выхода. Где будет больше частота?
Можно придумать и более сложные примеры, где синхронная реализация будет быстрее, а асинхронная медленнее (или наоборот), либо синхронная окажется больше по площади чем асинхронная (или наоборот). Т.е. вопрос сравнения «вообще» — некорректен, надо рассматривать каждый частный случай отдельно.
Теперь по делу. Вы вот пишете, что у сигнала есть три типа событий — ("?", "/" и "\"). Но в бинарной логике (и в классической цифровой электронике) у лог. сигнала возможно всего два состояния — 0 и 1. А Вы хотите получить 3 состояния. Варшавский с командой еще 40 лет назад нашли выход из положения — сигнал закодировали парой бинарных кодов: коды 01 и 10 соответствовали лог. 0 и 1 ("/" и "\" в Вашей интерпретации), а коды 11 и 00 они назвали служебными или спэйсером ("?" по-Вашему). Таким образом, сигнал передавался по двум проводам и в две фазы: служебной фазе ("?") и фазе данных ("/" или "\"). Чувствуете похожесть идеи? При этом, проектировать такие схемы методом Варшавского можно вообще без сетей Петри и Petrify, гораздо проще. Как? Слишком много печатать, читайте первоисточники. Впрочем, оказалось, что кодировать сигнал двумя проводами и вводить служебную фазу — ущербно, по ряду причин. Поэтому, революция отменяется, к сожалению. Но попытка засчитана.
И про гугло-процессор тоже теперь понятно, зачем его сделали.
Прочитав тему и комменты, я этого так и не понял. Я не математик, и, увы, не понимаю прелести науки ради науки, но с матрицами учился работать в институте, как и многие в этой теме. Поэтому интерес к матрицам у меня тоже привит, хоть и очень приземленный. Так может кто то прямым текстом написать, что, к примеру, умножение матриц используется в: обработке звука, распознавании образов, расчете траектории, в криптомайнинге, или чем то еще? Назовите востребованную задачу и/или алгоритмы, где это используется на практике.
Для затравки, есть такой тензорный процессор от гугл ссылка на вики, который якобы творит чудеса распознавания образов. Здесь вот пишут, что операции над матрицами — это будущее микропроцессоров, следующая ступень эволюции. Есть здесь специалисты, кто понимает в чем бенефит от использования матриц при распознавании образов? Или, скажем, при замене скалярного набора операций типового FPU на аналогичный набор операций, но с матрицами?
Плотность — разве растет? Размеры затворов может и уменьшаются, но за счет того что их делают двойными->тройными->четверными, размер транзистора все равно тот же остается.