
Профессиональный троичный логический симулятор
Moderator: haqreu
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Профессиональный троичный логический симулятор
Долго думал, года с 2014 эдак. И решил завести проект, профессиональный симулятор логических гейтов, на котором можно было бы строить логические схемки любой сложности. В частности, я хочу получить симуляцию троичного CPU, ну почти как мсье Shaos делает на тримуксах (четырёхвходовый гейт), но на уровне конкретный гейтов-логических функций, не обязательно с 4 входами. Выходит и без вложений в железо, и с более гибкой возможностью конфигурации и разработки-отладки. И это может быть обширное поле для экспериментов, без необходимости капитальных вложений денег и времени в железо на этапе проэктирования и отладки троичного цп. Кодобаза будет с нуля, ядро и бэкэнд на C/C++, фронтэнд я предполагаю на node.js, но до этого ещё дожить надо. Как будет что показать - заведу гитхаб. Может, кому будет тоже интересно или даже примут участие. Велкам 

Last edited by xakepp35 on 19 Jan 2018 13:42, edited 1 time in total.
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
Начну с описания базовых вещей и идей, своего видения деталей эффективной реализации. Итак, непосредственно сам эмулятор, исполнитель. Ядро эффективности эмуляции в том, что любая н-арная троичная логическая функция (тлф) может быть задана номером длиной 3^n трит, и иметь линейное ультрабыстрое временем вычисления O(n+1), где O(1) - это время выборки трита из памяти.
Так можно эффективно симулировать работу логического гейта любой сложности в софте, только дайте память.
Симулятор за шаг просто вычисляет массив из любого количества гейтов, причём на шаге значение каждого гейта может вычисляться параллельно, ограничиваясь лишь пропускной способностью памяти и количеством ядер/цп на хосте.
В итоге для m одинаковых гейтов с n входами мы получаем вычислительную сложность O( m*(n+1) ) свободно распараллеливающуюся по m*n. Таким образом, распалаллелив алгоритм, возможна довольно крупномасштабная симуляция на куче ксеонов, или даже на видеокартах с быстрой памятью.
Так можно эффективно симулировать работу логического гейта любой сложности в софте, только дайте память.
Симулятор за шаг просто вычисляет массив из любого количества гейтов, причём на шаге значение каждого гейта может вычисляться параллельно, ограничиваясь лишь пропускной способностью памяти и количеством ядер/цп на хосте.
В итоге для m одинаковых гейтов с n входами мы получаем вычислительную сложность O( m*(n+1) ) свободно распараллеливающуюся по m*n. Таким образом, распалаллелив алгоритм, возможна довольно крупномасштабная симуляция на куче ксеонов, или даже на видеокартах с быстрой памятью.
Last edited by xakepp35 on 19 Jan 2018 13:42, edited 1 time in total.
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
Второй компонент системы включает загрузчик, служебные форматы, чтобы читать например из файла схему соединения этих гейтов, начальные ромы, всяческий маппинг памяти, и сопутствующие утилиты например чтобы эти файлы генерировать не вручную в HEX редакторе а из более высокоуровнего языка (как ассемблер и линкер), и возможно даже гуи для наглядного редактирования. Это второстепенная задача и достаточно прозрачна для реализации. Самое сложное тут пожалуй - это наличие времени на разработку фишечек и хорошее видение гуи редактора логики, чтобы можно было оперировать как с отдельными гейтами так и с целыми блоками и с блоками блоков, разумеется с зуммированием копированием и переиспользованием рекурсивно, путём простых манипуляций мышкой с выключенным мозгом)) Это я предполагаю оставить напоследок или на аутсорс =) Сначала нужно реализовать ядро системы и оценить эффективность однопоточной работы на небольших ромах составленных вручную или специальной тестовой программой. А также решить следующий важный вопрос.
Last edited by xakepp35 on 19 Jan 2018 13:52, edited 1 time in total.
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
Я надеюсь я смог обьяснить базовую идею. Всётаки пришлось дать некоторый объём текста. И предлагаю обсудить, что в данном случае мне непонятно, и вызывает самые большие вопросы и сомнения - так это третий компонент - модуль ввода вывода для симулятора. Без него - это как проц без материнки. Как подвязать весь этот скоп гейтов и тритов, к внешним устройствам? Нужен какой-то простой интерфейс, который позволит подключать программный эмулятор монитора, клавиатуры, вшешнего накопителя, сетевой или звуковой карты. Вроде понятно что это просто куча самописных драйверов, сводящимся к вызовам sockets api или opengl. Я про саму парадигму, хочу ваших советов, мыслей, идей. Как это сделать универсально, эффективно и расширяемо? Как в процессорах ввод вывод этот организован?
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Для троичных конструкций у нас есть специальная ветка Ternary.
(Перенёс в Ternary.)
(Перенёс в Ternary.)
iLavr
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
я боюсь, что тормоза JS съедят все изыски по бинарному ускорению симуляции 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
А как же предкомпиляция в нативный код? Сам тут как-то про это рассказывал...Shaos wrote:я боюсь, что тормоза JS съедят все изыски по бинарному ускорению симуляции

iLavr
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
JavaScript? Это вряд ли...Lavr wrote:А как же предкомпиляция в нативный код? Сам тут как-то про это рассказывал...Shaos wrote:я боюсь, что тормоза JS съедят все изыски по бинарному ускорению симуляции
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Ну здрасти!Shaos wrote:JavaScript? Это вряд ли...Lavr wrote:А как же предкомпиляция в нативный код? Сам тут как-то про это рассказывал...Shaos wrote:я боюсь, что тормоза JS съедят все изыски по бинарному ускорению симуляции

Как работает JS: о внутреннем устройстве V8 и оптимизации ...
https://habrahabr.ru/company/ruvds/blog/337460/
И другие ссылки есть, хотя я этим никогда не интересовался вплотную...При первом исполнении JS-кода V8 задействует компилятор full-codegen, который напрямую, без каких-либо дополнительных трансформаций, транслирует разобранный им JavaScript-код в машинный код. Это позволяет очень быстро приступить к выполнению машинного кода.

iLavr
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
Ну никто не сказал, что тут будет V8 
Интерпретаторов JS - море

Интерпретаторов JS - море
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Не буду спорить, но про предкомпиляцию в нативный код я тут от тебя слышал,
когда ты писал какой-то он-лайн схемный интерпретатор.
Это я потом поинтересовался, насколько соответствует действительности...
когда ты писал какой-то он-лайн схемный интерпретатор.
Это я потом поинтересовался, насколько соответствует действительности...
iLavr
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
Ну на голых сях по любому было бы быстрее 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
нет никакого javascript тут нет и не было. голый c и c++. чуть позже могу выложить исходники если интересно
ночка кода, запилил бенчмарк и результаты печальные.
10000 тримуксов (четырёхвходовых гейтов) работают с частотой ~10 килогерц я правда ожидал хотя бы в 10 раз лучший результат..
ну, вкратце там нету никаких if, тоесть это branchless (добавляя if скорость падает раза так в полтора)
если я комменчу основные операции по сборке входного данного из разрозненных трит - то скорость возрастает раз эдак в 7, до 70кгц.. =)
а операции - это просто разименования указателей, выборка значений из памяти да битовые сдвиги с умножениями, над беззнаковыми целыми..
также посмотрел на зависимость частоты симуляции от разных параметров:
от количества гейтов ширины 4: от ширины входа гейта(создаю все 10к гейтов каждый одинаковой ширины inputWidth):
ночка кода, запилил бенчмарк и результаты печальные.
10000 тримуксов (четырёхвходовых гейтов) работают с частотой ~10 килогерц я правда ожидал хотя бы в 10 раз лучший результат..
ну, вкратце там нету никаких if, тоесть это branchless (добавляя if скорость падает раза так в полтора)
если я комменчу основные операции по сборке входного данного из разрозненных трит - то скорость возрастает раз эдак в 7, до 70кгц.. =)
а операции - это просто разименования указателей, выборка значений из памяти да битовые сдвиги с умножениями, над беззнаковыми целыми..
также посмотрел на зависимость частоты симуляции от разных параметров:
от количества гейтов ширины 4: от ширины входа гейта(создаю все 10к гейтов каждый одинаковой ширины inputWidth):
You do not have the required permissions to view the files attached to this post.
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
шутники.. какой яваскрипт))) код либы это и есть самый что ни наесть голый C
и один цикл фор. это всё что нужно чтобы вычислить значение гейта. я оптимизировал всё что только можно... =(
код хоста бенчмарка с++, не влияет на скорость.
и, к слову, конфиг компа не самый плохой.
и как видно просто адовая кучень разименований памяти, и выборки выборок, плюс чуть умножений делений сдвигов операций Ии один цикл фор. это всё что нужно чтобы вычислить значение гейта. я оптимизировал всё что только можно... =(
код хоста бенчмарка с++, не влияет на скорость.
и, к слову, конфиг компа не самый плохой.
You do not have the required permissions to view the files attached to this post.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Это очень сурово... так прямо сходу всё и не понять!xakepp35 wrote:адовая кучень разименований памяти, и выборки выборок, плюс чуть умножений делений сдвигов операций И

iLavr