Давайте думать над железкой (TRIADOR)

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, т.к. OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота :)
Решать задачу «вскипятить чайник» физик и математик будут одинаково: нальют воду, включат плиту, поставят на неё чайник и доведут его содержимое до 100 °С. А вот задачу «вскипятить наполненный водой чайник» поймут по-разному. Физик подумает: «Включим плиту, поставим, нагреем». Математик: «Выльем воду из чайника, чем сведём задачу к предыдущей».
https://kot.sh/statya/4441/nauchnyy-anekdot
У меня вполне прагматичный инженерный подход - решить задачу самым оптимальным образом ;)

P.S. Описание исправил - благодарю за внимательность! :idea:

P.P.S. Cделал картинки в линках на предыдущей страничке локальными (а также уменьшил их размер)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Shaos wrote:( на самом деле OP PON, т.к. OP NOP - это "нет операции" : )
Дмитрий, принимай патч для https://github.com/ssloy/triador/ :)

Code: Select all

157c157
<                          ttt_res[i] = ttt_arg[ttt_mem[i]+1];
---
>                          ttt_res[i] = ttt_arg[1-ttt_mem[i]];
Триадорная команда OP корнями уходит к 3niti alpha, где OPA NOP означало "нет операции" (т.е. если было N стало N, было O стало O, было P стало P), а инверсия - это PON (в тринити ещё была универсальная бинарная операция OPB xxx xxx xxx, которой тут нет ещё - там тоже порядок NOPNOPNOP, чтобы можно было таблицу истинности раскладывать без перемешивания)
Затрагивание NOP в этом топике: http://www.nedopc.org/forum/viewtopic.php?f=79&t=17752&p=140860&hilit=NOP#p140860 (ноябрь 2017)
Первоисточник (3niti alpha): http://www.nedopc.org/forum/viewtopic.php?f=79&t=58&p=70646&hilit=NOP#p70646 (декабрь 2004)
P.S. Я понимаю, это выглядит нелогично и противоестественно - старший трит отвечает за конверсию N, средний - за конверсию O, а младший - P, но для человеческого восприятия универсальных операций так проще...
P.P.S. С другой стороны в триадоре и так есть своя команда NOP - RR 0, но я всё таки предлагаю команду OP триадора считать идентичной команде OPA из 3niti alpha (и в EX будет OPB, которая также предполагалась программироваться в формате NOP, а не PON) - в этом случае OP NOP будет делать тоже самое, что и RR 0 - т.е. выполнять инструкцию "нет операции", а инвертировать R1 будет OP PON
P.P.P.S В одной из программ был OP NOP, который должен быть OP PON - gcd.txt:

Code: Select all

5c5
< OP NOP # R1 = -R1                    │ │ // This program computes    │
---
> OP PON # R1 = -R1                    │ │ // This program computes    │
9c9
< OP NOP # R1 = -R1                    │ │ // stored in R2.            │
---
> OP PON # R1 = -R1                    │ │ // stored in R2.            │
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, а OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота
А в PDP-8 разве не так делали? И вроде, как мне помнится, в ВЕ35 и в ВЕ48 именно так и делают! :roll:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Lavr wrote:
Shaos wrote:Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, а OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота
А в PDP-8 разве не так делали? И вроде, как мне помнится, в ВЕ35 и в ВЕ48 именно так и делают! :roll:
Ну вот поэтому и тормозилово :)
Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?
Я не знаю, что тут означает термин "прозрачно", но аппаратно инверсия одного из аргументов -
это дополнительное железо: инвертор и мультиплексор или управляемый инвертор.

И как-то не заметил я, чтобы вот в этом топике: Ретро-борда на i8035 (8039, 8048, 8049, КР1816ВЕ35/39/48/49)
хоть кто-то пожаловался на "тормозилово"! :roll:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Lavr wrote:
Shaos wrote:Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?
Я не знаю, что тут означает термин "прозрачно", но аппаратно инверсия одного из аргументов -
это дополнительное железо: инвертор и мультиплексор или управляемый инвертор.
Это в двоичном коде чтобы поменять знак числа надо его инвертировать и потом инкрементировать (aka "two's complement" или как говорят наши представить "в дополнительном коде"), а в троичном симметричном коде просто инвертируем каждый трит, что делается легко и непринуждённо на лету без расходования лишних тактов :mrgreen:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:Это в двоичном коде чтобы поменять знак числа надо его инвертировать и потом инкрементировать (aka "two's complement" или как говорят наши "в дополнительном коде"), а в троичном симметричном коде просто инвертируем каждый трит, что делается легко и непринуждённо без расходования лишних тактов :mrgreen:
Обрати внимание, я нигде не говорил про инкрементирование, я написал:
Lavr wrote:...аппаратно инверсия одного из аргументов -
это дополнительное железо: инвертор и мультиплексор или управляемый инвертор.
Никакого инкрементатора не упоминал. А инверсия одного из аргументов, что в троичности,
что в двоичности требует инвертора.
И кстати "инвертировать и потом инкрементировать" - это тоже неправда, это происходит
одновременно: аргумент инвертируется, а на вход Cin мадшего разряда подаётся "1".
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится
Вот это взвешенный подход, но "по одному мультиплексору на трит" - задержка еще появится,
сумматор и так весьма многокаскадный...
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:Откомментированный код сложения:
Image
Кстати по ассемблеру - я также хотел команды задавать двухбуквенными ключевыми словами, а вот по аргументам мне мыслились десятичные числа от -13 до +13 (вот тут я про это писал) - текстовый файл из описания логисимовской модели триадора:

https://gitlab.com/ternary/ternary/-/raw/master/TriadorOp.txt

(для OP предполагались макросы типа NOP=-8 и если никаких префиксов для макросов не делать, то по идее мой ассемблер твои программы тоже сможет компилировать). Я хотел свой универсальный ассемблер RASM подлатать, чтобы он такой формат тоже понимал, да всё времени небыло, но там у макросов обязателен префикс @ чтобы не путать программиста, так что возможно придётся написать новый ассемблер на голимых сях - глядишь и свою логисимовскую модель триадора удасться полностью проверить :ewink:

P.S. А может даже и не на сях, а на языке Robby (aka RW1) - тогда и к вебу можно будет его легко прицепить...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Lavr wrote:
Shaos wrote:у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится
Вот это взвешенный подход, но "по одному мультиплексору на трит" - задержка еще появится
Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:
Но в сумматоре и в самом каскадов-то прилично... пренебречь еще одним? Что-то сомневаюсь... :-?
Мультиплексоры-то не цифровые. Посмотри сам их задержку переключения.
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Lavr wrote:
Shaos wrote:Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:
Но в сумматоре и в самом каскадов-то прилично... пренебречь еще одним? Что-то сомневаюсь... :-?
Мультиплексоры-то не цифровые. Посмотри сам их задержку переключения.
Да там и без АЛУ каскадов нехило - так что лишний управляемый инвертор в цепочке сильно картину не ухудшит (всё лучше чем 2 инструкции забирать под вычитание)
haqreu wrote:RRC - а какой смысл в потритовых сдвигах вообще?
Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:Да там и без АЛУ каскадов нехило - так что лишний управляемый инвертор в цепочке сильно картину не ухудшит ...
Очень сомнительное утверждение при вот таких временах задержки:
dg403t.gif
А один лишний управляемый инвертор - это вобще-то 2 мультиплексора, а каждый мультиплексор
у тебя - это 2 каскада ключей.

И с шуткой про математика ты, пожалуй, тут перегнул... :-?
Отсутствие аппаратного вычитания - это способ сэкономить аппаратные средства.
Когда я делал АЛУ на NAND-ах - очень хорошо прочувствовал что сколько стоит.
Поэтому не удивился, что и Intel не гнушается таких решений.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Так оно всё на таких задержках работает - если всё посчитать там будет не один десяток в цепочке - добавление одного каскада ухудшит времена на <10% (для всего) а вот недобавление - на +100% (для вычитания) ибо вычитание в этом случае потребует двух инструкций идущих друг за другом, что замедлит выполнение в ДВА раза - так что для меня решение очевидно :no:
Я тут за главного - если что шлите мыло на me собака shaos точка net