nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 18 Jan 2021 14:36



Reply to topic  [ 439 posts ]  Go to page Previous  1 ... 23, 24, 25, 26, 27, 28, 29, 30  Next
Давайте думать над железкой (TRIADOR) 
Author Message
Admin
User avatar

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

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

P.P.S. Cделал картинки в линках на предыдущей страничке локальными (а также уменьшил их размер)

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 21:05
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Shaos wrote:
( на самом деле OP PON, т.к. OP NOP - это "нет операции" : )

Дмитрий, принимай патч для https://github.com/ssloy/triador/ :)
Code:
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:
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.            │

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 21:33
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, а OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота

А в PDP-8 разве не так делали? И вроде, как мне помнится, в ВЕ35 и в ВЕ48 именно так и делают! :roll:

_________________
iLavr


02 May 2020 21:33
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Говорить, что вычитания ненадо и заменять его двумя командами - инверсия второго аргумента ( на самом деле OP PON, а OP NOP - это "нет операции" : ) и сложение ADD - это подход математика из научного анекдота

А в PDP-8 разве не так делали? И вроде, как мне помнится, в ВЕ35 и в ВЕ48 именно так и делают! :roll:

Ну вот поэтому и тормозилово :)
Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 21:38
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?

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

И как-то не заметил я, чтобы вот в этом топике: Ретро-борда на i8035 (8039, 8048, 8049, КР1816ВЕ35/39/48/49)
хоть кто-то пожаловался на "тормозилово"! :roll:

_________________
iLavr


02 May 2020 22:10
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Если железо позволяет прозрачно инвертировать один из аргументов перед сложением, то почему бы не завести команду, которая будет это использовать вместо искусственного торможения в 2 раза?

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

Это в двоичном коде чтобы поменять знак числа надо его инвертировать и потом инкрементировать (aka "two's complement" или как говорят наши представить "в дополнительном коде"), а в троичном симметричном коде просто инвертируем каждый трит, что делается легко и непринуждённо на лету без расходования лишних тактов :mrgreen:

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 22:23
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Это в двоичном коде чтобы поменять знак числа надо его инвертировать и потом инкрементировать (aka "two's complement" или как говорят наши "в дополнительном коде"), а в троичном симметричном коде просто инвертируем каждый трит, что делается легко и непринуждённо без расходования лишних тактов :mrgreen:

Обрати внимание, я нигде не говорил про инкрементирование, я написал:
Lavr wrote:
...аппаратно инверсия одного из аргументов -
это дополнительное железо: инвертор и мультиплексор или управляемый инвертор.

Никакого инкрементатора не упоминал. А инверсия одного из аргументов, что в троичности,
что в двоичности требует инвертора.
И кстати "инвертировать и потом инкрементировать" - это тоже неправда, это происходит
одновременно: аргумент инвертируется, а на вход Cin мадшего разряда подаётся "1".

_________________
iLavr


02 May 2020 22:59
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 23:05
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится

Вот это взвешенный подход, но "по одному мультиплексору на трит" - задержка еще появится,
сумматор и так весьма многокаскадный...

_________________
iLavr


02 May 2020 23:14
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
haqreu wrote:
Откомментированный код сложения:
Image

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

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

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

P.S. А может даже и не на сях, а на языке Robby (aka RW1) - тогда и к вебу можно будет его легко прицепить...

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 23:24
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
у нас инвертор это троичный мультиплексор и есть - по одному мультиплексору на трит
просто буфер весит столько же - так что железо не сильно усложнится, а удобство программиста сильно повысится

Вот это взвешенный подход, но "по одному мультиплексору на трит" - задержка еще появится

Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 23:25
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:

Но в сумматоре и в самом каскадов-то прилично... пренебречь еще одним? Что-то сомневаюсь... :-?
Мультиплексоры-то не цифровые. Посмотри сам их задержку переключения.

_________________
iLavr


02 May 2020 23:29
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Эта задержка сильно меньше периода тактовой частоты - так что ей можно пренебречь :roll:

Но в сумматоре и в самом каскадов-то прилично... пренебречь еще одним? Что-то сомневаюсь... :-?
Мультиплексоры-то не цифровые. Посмотри сам их задержку переключения.

Да там и без АЛУ каскадов нехило - так что лишний управляемый инвертор в цепочке сильно картину не ухудшит (всё лучше чем 2 инструкции забирать под вычитание)

haqreu wrote:
RRC - а какой смысл в потритовых сдвигах вообще?

Умножение на 3, деление на 3, ну и до кучи всякие алгоритмы где надо кольцом крутить тритами...

_________________
:eugeek: https://twitter.com/Shaos1973


02 May 2020 23:34
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Да там и без АЛУ каскадов нехило - так что лишний управляемый инвертор в цепочке сильно картину не ухудшит ...

Очень сомнительное утверждение при вот таких временах задержки:
Attachment:
dg403t.gif
dg403t.gif [ 4.21 KiB | Viewed 1743 times ]

А один лишний управляемый инвертор - это вобще-то 2 мультиплексора, а каждый мультиплексор
у тебя - это 2 каскада ключей.

И с шуткой про математика ты, пожалуй, тут перегнул... :-?
Отсутствие аппаратного вычитания - это способ сэкономить аппаратные средства.
Когда я делал АЛУ на NAND-ах - очень хорошо прочувствовал что сколько стоит.
Поэтому не удивился, что и Intel не гнушается таких решений.

_________________
iLavr


03 May 2020 00:25
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19308
Location: Silicon Valley
Reply with quote
Так оно всё на таких задержках работает - если всё посчитать там будет не один десяток в цепочке - добавление одного каскада ухудшит времена на <10% (для всего) а вот недобавление - на +100% (для вычитания) ибо вычитание в этом случае потребует двух инструкций идущих друг за другом, что замедлит выполнение в ДВА раза - так что для меня решение очевидно :no:

_________________
:eugeek: https://twitter.com/Shaos1973


03 May 2020 00:51
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 439 posts ]  Go to page Previous  1 ... 23, 24, 25, 26, 27, 28, 29, 30  Next

Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.