решил с гитхабом на данном этапе заморачиваться.
в аттаче - 7zip архив - там исходники и бинарник.
компилил visual studio community 2017 под win10, возможно требует vcredist для 2017й под x64
Профессиональный троичный логический симулятор
Moderator: haqreu
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
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: Профессиональный троичный логический симулятор
ну а как вы хотели.. это ж оптимизированная реализация универсального троичного логического симулятора для гейтов со входом переменной длины, на голых бородатых Сях..Lavr wrote:Это очень сурово... так прямо сходу всё и не понять!


-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Это ещё суровее!xakepp35 wrote: оптимизированная реализация универсального троичного логического симулятора для гейтов со входом переменной длины, на голых бородатых Сях..


iLavr
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
ладно, пусть на практике вышло не так производительно как того хотелось бы, не мегагерцы.. но всётаки, как бы подвязать сюда ввод-вывод?)))Lavr wrote:Это ещё суровее!Особенно "на голых" и "бородатых Сях"..!
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Профессиональный троичный логический симулятор
Спросите у модератора Ternary. Он с ввода и вывода начинал.xakepp35 wrote:но всётаки, как бы подвязать сюда ввод-вывод?)))
iLavr
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
ладно, может, придёт идея.. мне надо просто читать и читать про устройство шины ввода-вывода в пк, и я что-нибудь придумаю со временем. наверняка там не так уж и много опций по организации буферизованного I/O. ну а пока, с такими показателями производительности ввод вывод всётаки отходит на второй план.
меня посетили мысли по оптимизации.
1) если отказаться от универсальности гейта и принять что все гейты - это полюбому тримуксы, то измеряется прирост до 2.5х раз по производительности (~10кгц->~25кгц для 10к гейтов) и экономия памяти бонус 24 байт на гейт. производительность получается изза сокращения числа выборок трита из памяти с 5 (4 для 4 входов+1 для выхода) до 2 (селектор+выход)
самое ресурсозатратная операция - это выборка трита из памяти (по сути выборка двух бит, необязательно сначала слова, и сдвиг их в начало слова).
сначала мы получаем трит-индекс с селектора, который указывает, с какого из входов взять трит для выхода. вторая выборка выбирает непосредственно указанный входной трит, чтобы предстаить его как выходной.
это похоже на ситуацию в классическом программировании, когда в регистре есть указатель на указатель и нам надо получить значение. сначала нужно считать из памяти сам указатель - (или селектор), затем использовать адрес чтобы получить финальное значение. получается, это такой строительный блок на котором можно делать всё, что угодно.
2) дальнейшая оптимизация возможна, если забить на плотную упаковку тритов, и выровнять триты по границе хотябы байта. конечно это сильно профукает память, вместо четырёх трит в байте будет один. но учитывая объёмы памяти сегодняшнего дня, я думаю, этим можно пренебречь. да и гораздо проще будет работать с этим в коде, без адового битового задроства.
3) OpenCL? PROFIT... в алгоритме нет условных переходов и одновременного чтения/записи в одну и ту же ячейку памяти. значит это задачка под видяху. И следующая версия будет сразу под OpenCL. Ядро вроде маленькое, писать быстро, читаемость повысится изза отсутствия битового шаманства. Я хочу посмотреть, что можно выжать из парадигмы на максимуме производительности
меня посетили мысли по оптимизации.
1) если отказаться от универсальности гейта и принять что все гейты - это полюбому тримуксы, то измеряется прирост до 2.5х раз по производительности (~10кгц->~25кгц для 10к гейтов) и экономия памяти бонус 24 байт на гейт. производительность получается изза сокращения числа выборок трита из памяти с 5 (4 для 4 входов+1 для выхода) до 2 (селектор+выход)
самое ресурсозатратная операция - это выборка трита из памяти (по сути выборка двух бит, необязательно сначала слова, и сдвиг их в начало слова).
сначала мы получаем трит-индекс с селектора, который указывает, с какого из входов взять трит для выхода. вторая выборка выбирает непосредственно указанный входной трит, чтобы предстаить его как выходной.
это похоже на ситуацию в классическом программировании, когда в регистре есть указатель на указатель и нам надо получить значение. сначала нужно считать из памяти сам указатель - (или селектор), затем использовать адрес чтобы получить финальное значение. получается, это такой строительный блок на котором можно делать всё, что угодно.
2) дальнейшая оптимизация возможна, если забить на плотную упаковку тритов, и выровнять триты по границе хотябы байта. конечно это сильно профукает память, вместо четырёх трит в байте будет один. но учитывая объёмы памяти сегодняшнего дня, я думаю, этим можно пренебречь. да и гораздо проще будет работать с этим в коде, без адового битового задроства.
3) OpenCL? PROFIT... в алгоритме нет условных переходов и одновременного чтения/записи в одну и ту же ячейку памяти. значит это задачка под видяху. И следующая версия будет сразу под OpenCL. Ядро вроде маленькое, писать быстро, читаемость повысится изза отсутствия битового шаманства. Я хочу посмотреть, что можно выжать из парадигмы на максимуме производительности

-
- Admin
- Posts: 24083
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
а нижеследующее тогда зачем?xakepp35 wrote:нет никакого javascript тут нет и не было. голый c и c++. чуть позже могу выложить исходники если интересно
xakepp35 wrote:фронтэнд я предполагаю на node.js
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24083
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Профессиональный троичный логический симулятор
А не сделать ли автору композицию простых схем в более сложные? Тогда сигнатура будет длиннее и выборок станет меньше? Кстати наверное эту мысль надо добавить в DDT, который пока есть наоборот декомпозиция таблиц истинности в цепочки троичных мультиплексоров, а вот симуляция там тупо в лоб по отдельным мультиплексорам, хоть и компилируемое в "голые бородатые си" 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
а это - чтобы никто не догадался про бородуShaos wrote:а нижеследующее тогда зачем?xakepp35 wrote:нет никакого javascript тут нет и не было. голый c и c++. чуть позже могу выложить исходники если интересно
xakepp35 wrote:фронтэнд я предполагаю на node.js


плохая идея. увеличение количества выборок дико тормозит. по факту оказалось, что проще симулировать именно мультиплексоры и не требует память на сигнатуры функции.Shaos wrote:А не сделать ли автору композицию простых схем в более сложные? Тогда сигнатура будет длиннее и выборок станет меньше? Кстати наверное эту мысль надо добавить в DDT, который пока есть наоборот декомпозиция таблиц истинности в цепочки троичных мультиплексоров, а вот симуляция там тупо в лоб по отдельным мультиплексорам, хоть и компилируемое в "голые бородатые си"
у меня есть кое-какие наработки по рекурсивному построению простых схем в более сложные, но это чуть позже. для начала хочется просто добиться более менее высокой эффективности, производительности.
к слову я завершил OpenCL реализацию и погонял её туда-сюда. 10к гейтов на проце 100-400кгц, на видяхе R9 270 и того хуже. основная проблема в архитектуре OpenCL, в том моменте когда надо передать данные с хоста на девайс или обратно. линейная прога для проца этого не требует, и если этого делать не нужно то можно выжать приличную производительность.. я сделаю третью попытку - просто реализацию на С++ с ручным распараллеливанием на 4 ядра цпу. почему я откажусь от видях? скажем так - это невысокая скорость обмена данными с хостом, плюс ширина шины видеопамяти соизмерима с таковой у проца. увидев исходники OpenCL kernel всё становится очевидно. OpenCL вариант (возможно) подойдёт лишь для HBM-видеокарт где адовая шина памяти, и если не гонять данные на хост и обратно каждый такт, что начинает уже больше подходить на какойто бесполезный майнинг.. Ну а покачто можно полюбоваться на мой погромизм, вот исходничек OCL версии. (с отказом от упаковки всё уместилось в 1 файлик и стало читаемо):
You do not have the required permissions to view the files attached to this post.
Last edited by xakepp35 on 20 Jan 2018 13:39, edited 1 time in total.
-
- Novelist
- Posts: 26
- Joined: 10 Feb 2016 16:59
Re: Профессиональный троичный логический симулятор
Вывод:
Даже на среднем пользовательском i7 можно с комфортом симулировать десятки тысяч тримуксов, не падая ниже сотни кгц.
За сим работу над бенчмарком и анализ производительности можно считать завершённой.
И ещё, можно сильно улучшить показатели, минимум в 4 раза, если заиметь процессор 6950х.
Пожалуй, пора запускать кампанию по сбору средств на X99 платформу. Дорогая игрушка, зараза

Теперь буду думать, над вводом выводом и оформлением всего этого дела в некоторый законченный и работоспособный сервер.
До следующих выходных, наверное, не раньше.