Category: техника

Category was added automatically. Read all entries about "техника".

with Cat The Cat

Хромая судьба

Мокрецы в подпроизведении этого произведения не могут жить без чтения.

В настоящий момент зависимость от смартфонов вполне доступный в ощущениях факт. Иногда просто ужасный, смею заметить.

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

На этом всё.
with Cat The Cat

Сайт модульбанка

Если кто не знает, но основным достижением айфона была возможность работать (худо-бедно, но!) с обычными сайтами, а не с ухудшенными специальными мобильными версиями.

Это 2008 год. Вы работаете с 2014 года.

Иметь специальную ущербную версию сайта для мобильников в 2017 это не сервис, а ровно наоборот. Опыт взаимодействия с банком с компьютера и через приложение не переносится - наличие приложения, которое не копирует ваш обычный сайт это трата ваших денег и времени клиентов.

Если вам, руководители модульбанка, сказали, что такая версия нужна, то вас обманули и вытянули деньги ни за что. Если вы сами так решили, это прискорбно. В любом случае, получилось плохо и вы выглядите некомпетентно.

Это я к чему - где в мобильной версии вашего сайта вход в интернет-банк?
with Cat The Cat

Замена плат проводками

Скорость современных паяльных роботов 1,8-3,0 секунды на соединение.

Современный корпус может иметь две тысячи ножек, что означает час работы на его одного.

Из приятного, мощность нагревательного элемента в районе 300 Ватт, это оставляет запас.

В общем, мощность нагрева оставляю, думаю над скоростью, она должна быть в районе трёх соединений в секунду.
with Cat The Cat

Про Верилог и VHDL, про образование.

Verilog это 1985 год, на два года позже VHDL, который был основан на языке Ada, принятом в 1979 году.

Для понимания - 1978 это год появления алгоритма вывода типов Хиндли-Милнера, когда в его имени появилось второе имя (первое - это 1968 год). Ada появилась через год после появления ML.

Поэтому Ada имеет структурную систему типов (positive это подмножество integer, или unsigned это такой специально ограниченный std_logic_vector (массив)).

Verilog пошёл по ещё более простому пути - он ВСЁ ЗАШИЛ В ЯЗЫК.

В VHDL есть тип std_logic, состоящий из девяти значений - неопределенного, не подключенного, 1 (буквально - подключение к цепи питания), 0 (подключение к земле), короткое замыкание (соединили вместе 1 и 0), питание через сопротивление, земля через сопротивление, среднее напряжение (как если бы мы смотрели на точку, подсоединённую к питанию и земле через резисторы) и "наплевать" (don't care).

Этот перечисляемый тип позволяет имитировать подключение двух (и более) выходов к одному входу. Таким образом, можно имитировать поведение многофункциональной периферии типа портов ввода-вывода микроконтроллеров.

При желании, в VHDL вы можете создавать свои типы со своими функциями разрешения, например, имитируя протокол самосинхронной логики.

В Верилоге это невозможно.

Не все типы VHDL позволяют соединять два выхода. Например, тип bit (ограничение character: только '0' и '1') так поступать не позволяет. И современная внутрикристальная микроэлектроника тоже не позволяет. Поэтому вы можете написать ядро процессора с использованием bit, bit_vector и соответствующих операций, а периферию описать с помощью std_logic(_vector).

В Верилоге это невозможно. ;)

Вышеуказанное разделение очень важно - положительно, вся современная периферия является аналоговой. Поэтому правильным решением было бы разрешить логику типа bit/bit_vector и периферию моделировать аналогово. Но в во времена создания этих языков на такое не хватило бы всех вычислительных ресурсов мира, поэтому - std_logic и тому подобное.

И если посмотреть на эти языки внимательней, вы поймёте, что такая беда не из-за злого умысла, и не потому, что авторы стандартов не пишут компиляторы. Это потому, что в то время создатели языков не знали и не могли лучшего. При этом создатели VHDL знали чуть лучшее, чем создатели Верилога, которые вообще ленивые сволочи.

А далее изначальные решения проекта языка диктуют направление последующих решений.

Поэтому создавая язык в настоящее время, попробуйте знать лучше, чем средний программист. Как минимум, мне легче будет. ;)
with Cat The Cat

iPhone 6s+

Лена подарила на ДР.

Очень приятная в использовании вещь.

Он заряд держит, как мало кто. Выходные пережил, оставив 32% заряда, работая на аккумуляторе 67 часов, из которых 4 с половиной часа я им пользовался активно (звонил, читал и так далее). Причём чтение у меня совмещено с прокруткой по горизонтали (я, обычно, увеличиваю текст).

По способности держать заряд он выходит из "весовой" категории смартфонов и приближается к моему бывшему кирпичу Нокии, которая могла в пассивном режиме заряд держать пять-шесть дней.

При этом телефончик яркий, четкий, плавный, громкий и так далее. Я им очень доволен.

Надо попробовать под него приложение какое написать.
with Cat The Cat

Продолжая про булевскую выполнимость.

Немного терминологии.

Любую формулу можно привести к коньюнктивной нормальной форме - конъюнкции дизъюнкций литералов. Конъюнкция - Логическое И. Дизъюнкция - Логическое ИЛИ. Литерал здесь - прямое или обратное значение булевой переменной. x или ~x. Дизъюнкцию ещё можно называть ограничением, именно они ограничивают возможные значения переменных КНФ.

Самый первый алгоритм вычисления выполнимости (Davis-Putnam, DP) делал так называемое разрешение (resolution): если у нас есть в КНФ две дизъюнкции x\/Y и ~x\/Z, то мы можем заменить две эти формулы на формулу y\/z. Здесь x переменная, а Z и Y - дизъюнкции. Алгоритмически это выполняется так: для всех a, содержащих x и всех b, содержащих ~x, выполнить разрешение a и b. Исходные формулы можно убрать. Если разрешение выполнялось для формул вида x\/y\/A и ~x\/~y\/B, то в результате получится тривиальная формула y\/~y\/A\/B - тождественно равная истине.

Если при итеративном применении этого правила мы пришли к пустой дизъюнкции, то формула невыполнима (пример: x/\~x). Если в конце получилась пустая формула (все разрешения завершились тривиально), то формула выполнима. Может также получиться набор независимых формул, в этом случае тоже легко найти решение. Если мы не можем произвести разрешение по какому-то литералу, то по нему нельзя сделать выбор - зафиксируем его переменную в его значении.

Этот вариант требует большого количества пространства.

Второй алгоритм, предложенный Logemann и Loveland (LL в сокращении DPLL), перебирал значения всех переменных КНФ. Зафиксировав значение переменной, он проверял, не выводятся ли значения других переменных из уже зафиксированных и не приводит ли этот вывод к противоречию. Если можно было произвести вывод значений, он производился. Если у нас вывелись два противоположных значения, то это противоречие. При противоречии производился откат, убирались все результаты текущего вывода и фиксированное значение заменялось на противоположное.

Вот простая КНФ: a \/ b \/ c /\ a \/ b \/ c. Если мы зафиксируем значения a=Ложь и b=Ложь, то из первой дизъюнкции выводится c=Истина, а из второй - c=Ложь. Противоречие. Заменив любое из фиксированных значений a и b, мы получим удовлетворяющее присваивание.

Зайдем с другой стороны. Зафиксируем c=False. Вторая дизъюнкция станет тривиально истинной. Останется только первая. Выберем a=Ложь, останется только вывод b=Истина.

Здесь пространство не так важно, зато сложность алгоритма в худшем случае экспоненциальная. Важно, что "в худшем случае". Если мы каким-то образом можем выбирать правильные значения фиксируемых переменных (по структуре задачи, по предыдущему опыту решения похожих задач, наконец, нам подсказали!), то мы можем решить задачу быстрее, чем за полный перебор всех значений.

Это очень важно. Решатель Minisat показывает отличные результаты в категории "Индустриальные задачи" в соревновании решателей булевой выполнимости в частности потому, что он выбирает для новых переменных значение v=Ложь. Оказывается, большая часть задач этой категории имеет решение с ключевыми переменными, равными Лжи. А вот в категории "Случайные задачи" он отстает - там отлично работают системы, что учитывают структуру задачи (решатель march_xx из таких, например) или просто стохастические алгоритмы типа WalkSAT.

В середине 90-х решатель GRASP совершил прорыв - он начал запоминать причины, по которым решатель пришёл к конфликту, добавляя дизъюнкции противоречия (conflict clauses) к задаче. Здесь преследуются две цели - избегнуть в будущем похожей ситуации и автоматически перещелкнуть последнее выбранное значение.

Пример приведу все на том же конфликте выше. Мы установили переменные a=Ложь и b=Ложь и получили конфликт c и ~c. Мы говорим, что мы не должны посетить в будущем такой набор переменных, при котором a=Ложь И b=Ложь. Мы добавляем к нашей задаче ещё одно ограничение - ~(~a/\~b)=a\/b. Последней мы выбрали переменную b, отменяем её выбор. Новая задача a\/b\/c /\ a\/b\/~c /\ a\/b с выбором a=Ложь автоматически выберет b=Истина (третье ограничение) и решение будет найдено.

Это риешение важно ещё и потому, что если мы запоминаем все причины конфликтов, то мы (а) экспоненциально быстрее полного перебора (доказано) и (б) можем начинать с чистого листа и не придём к той же ситуации.

Рестарт перебора с чистого листа позволяет избежать перебора в окрестности заведомо плохого решения.

Современные решатели начинают с чистого листа довольно часто - после нескольких сотен конфликтов. Есть тендениця ещё увеличить частоту рестартов.

Надо далее рассказать про способы выбора ограничений противоречий, а также надо рассказать про реальную реализацию перебора в том же MiniSAT.

Последняя ссылка на сегодня - glueminisat. Это вариант всё того же MiniSAT, только с улучшенным механизмом выбора ограничений противоречий.
with Cat The Cat

Geometric algebra.

Достаточно интересная новость: трассировка лучей с помощью операций над 5D GA представлением от 30% медленней до 40 процентов быстрей.

Цитата из статьи по ссылке: GA is not always slower than LA. We implemented inverse kinematics algorithm [10] using Gaigen 2. The algorithm is based on conformal geometric algebra. It was designed as a replacement of an existing LA-based algorithm [11]. Our result was 43% faster than the exising solution. This improvement is mostly due to the fact that GA has a superior representation for rotations built right into the algebra. The LA implementation had to convert back and forth between matrices and quaternions.

Это относится ко второй версии Gaigen, генератору операций над (3,4,5)D GA представлениями. В первом отставание для 5D GA было 3 5 с лишним раз.

Геометрическая алгебра интересна компактностью записи. Например, вращение и перемещение описываются одним и тем же механизмом - перемещение - это вращение вокруг точки в бесконечности, а обычное вращение - вращение вокруг точки 0. Поэтому комбинировать их весьма просто, запись получается короче и становится проще рассуждать.
with Cat The Cat

Тут у ivan_ghandhi случилось обсуждение...

...и я выяснил кое-что про Reduceron.

Вся его реализация занимает 14% от 17300 слайсов (slices) Xilinx Viertex-5. Прикинув, что слайс равен 4-м 4И-НЕ вентилям, я получил оценку в 10000 вентилей. Или 80000 транзисторов.

Ещё он занимает 90% полуторакилобайтной памяти. Это, исходя из оценки в 6 транзисторов на бит памяти, даёт ещё 66000 транзисторов.

Итого, 150 тысяч транзисторов. Это уровень количества транзисторов процессоров GreenArrays, творений Чака Мура.

В тысячи раз меньше, чем современные процессоры уровня Core2 Duo. Да добавим кэш, всё равно площадь будет в сотни раз меньше - единицы квадратных миллиметров.

Тактовая частота синтеза в ASIC поднимается раз в 8-10 по сравнению с частотой FPGA. Reduceron получит частоту в районе 700-800 MHz. Отставая сейчас в три раза, он будет быстрее в два раза, если сделать ASIC.

Получается, что эта штука будет работать быстрее и меньше занимать.

Сейчас в haskell-cafe напишу. ;)

PS
http://www.1-core.com/library/digital/fpga-logic-cells/

Ошибся в количестве эквивалентных 4И-НЕ. Там их 8 на slice. Ошибся в два раза.

Ну, не в 10, и то хорошо. ;)
PPS
С частотой я тоже поторопился. 5-8 раз.
with Cat The Cat

Иерархия языков.

Есть язык VHDL. У него небольшое ядро, буквально - последовательные высказывания (присваивание, функции и процедуры) и параллельные процессы (которые управляют сигналами). Ещё стоит упомянуть о функциях разрешения конфликта, которые позволяют делать монтажное И, например.

Всё. Мы готовы симулировать практически любое цифровое железо. И даже столь сложное железо, как самосинхронные схемы - в самосинхронных проводах сигнал передаётся в обе стороны, поэтому возможность менять часть состояния сигнала (запрос ли, подтверждение ли, данные ли) очень полезна, а это можно реализовать функцией разрешения конфликта.

В Verilog это всё встроено внутрь. И ограничено до нельзя. Поэтому он проще - меньше изучать, всё приближено к железу, - но и хуже, как язык - меньше проверок, тяжелее прототипировать.

Однако, для моделирования аналоговых сущностей их пришлось встраивать в VHDL. В VHDL/AMS (Analog Mixed Signal) потребовался ещё один механизм, терминалы (выводы), к которым можно подключить много всякого - конденсаторы, резисторы, источники напряжения и тока. Между выводами-терминалами измеряется некая физическая величина, а также проходит другая физическая величина. Например, измеряется "напряжение", а проходит "ток". И зависимости могут быть нелинейными: ток через конденсатор пропорционален производной от напряжения.

И вот эти "природы", с "величинами" и их частями "между" и "сквозь" уже потребовали расширения VHDL.

Причём стандарт IEEE P1076.1, VHDL/AMS разрабатывается уже 9 лет, не менее, но мне не удаётся скачать даже его черновик, настолько всё засекречено. ;)

Для сравнения. System C - библиотека на C++, что умеет всё, что и VHDL. На Хаскеле такое написать тоже раз плюнуть.

Расширить библиотеки выводами с физическими величинами в обеих языках не представляет большого труда. Это уже есть для SystemC.

Иерархию тут видно не вооружённым глазом: расширение ЯП в одном случае решается обычной библиотекой в другом. Verilog < VHDL < C++.

PS
Функция разрешения конфликта принимает на вход массив сигналов, что конфликтуют - это так называемые "управляющие значения", - и выдаёт наружу "эффективное значение". Очень разумное и гибкое решение.

Collapse )

PPS
А без типов в разработке электроники не обойтись. Цена ошибки слишком высокая.