Pull to refresh
194
0
Андрей Дмитриев @AndreyDmitriev

Пользователь

Send message

Часть блоков в завимости от математического выражения в них и схемы соединения, требует наличе на входе результата расчета других блоков (возникает алгебраическая петля). 

Йоу, да это одно из лучших описаний парадигмы потоков данных LabVIEW.

Вот, смотрите, у меня есть цикл for на четыре итерации, я беру счётчик итераций (он с нуля начинается, да домножаю его на два, получаю на выходе 0, 2, 4, 6:

Теперь перед умножителем я вкорячу сумматор и заведу выход умножителя на вход сумматора, LabVIEW мне скажет, мол так нельзя:

Это алгебраическая петля. Чтобы разрешить противоречие, мне нужно добавить сдвиговый регистр и перебрасывать данные через него, соответственно сумматор будет получать результат предыдущего умножения, на первой итерации ноль, и на второй ноль, и лишь на третьей прилетит двойка, которая сложится с двойкой и на неё же умножится, что даст 8, и так далее, поэтому будет 0, 2 ,8, 22:

Чтобы не выносить мозг программисту есть и другая запись того что выше, называется Feedback Node, но это просто "синтаксический сахар", просто чтобы было нагляднее, от того, что выше ничем не отличается:

Ну а всё, что не связано потоками данных, будет выполняться параллельно, в примере ниже оба сумматора будут ждать прихода значения индекса, а вот умножители отработают параллельно, и я не могу наверняка утверждать, в каком порядке они будут выполнены - умножение на двойку вперёд умножения на три или наоборот:

и кстати, в Си мне таки придётся повозиться, если я захочу выполнить асинхронно и параллельно что.то типа a *= 2; b *= 3, (оптимизатор может переставить инструкции, если они не влияют на результат, но создавать потоки он точно не будет). На самом деле и LabVIEW не всегда будет ибо накладные расходы на создание потоков тоже ненулевые, но стоит мне взять пару увесистых циклов и они мгновенно сядут на два ядра процессора. Факт в том, что

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

лучше и не скажешь.

Я вот не вижу тут ничего уникального, налицо неверно настроенный контроллер нечёткой логики. На верхних графиках там фактически два состояния открыто/закрыто, соотвтетственно, клапан при низком уровне открывается на всю катушку и уровень воды проскакивает установленный уровень и клапан резко закрывется. При большом шаге дискретизации при закрытом клапане мы проваливаемся по уровню до 1,4, что вызывает резкое открытие клапана и начинаются осцилляции. Начинаются они на втором периоде потому что значально уровень был нулевой, а на втором периоде мы стартуем с 0,5. При малом шаге мы не даём системе провалиться до такого низкого уровня, поскольку ловим уровень мéньшим шагом и осцилляций нет. При правильно настроенном контроллере открытие и закрытие происходят плавно, и система не так чувствительна к шагу. Никакой мистики тут нет на мой взгляд, я вам ровно такие же осцилляции в LabVIEW могу устроить, если шаг в десять раз увеличу:

 параллельна ли "коробка" LabView?

Я вроде уже много раз писал, что LabVIEW — суть компилируемый язык программирования. Самый обычный язык, просто представление кода там графическое, а не текстовое, только и всего. Алгоритм — это действительно главное. И вот я беру на себя смелость утверждать, что любой алгоритм (абсолютно любой, без исключений), который можно реализовать, скажем на С++, я могу переписать один-в-один на LabVIEW. Справедливо и обратное утверждение — любой алгоритм, написанный на LabVIEW, можно переписать на С++. Где-то надо будет больше кода, где-то меньше, но в этом алгоритмическом смысле эти языки полностью эквивалентны и С++ вы вроде знаете. Я, кажется, это даже практически показывал, когда мы RS триггер обсуждали. Ну а теперь вопрос к вам — удовлетворяет ли с вашей персональной точки зрения язык программирования С++ вашим личным критериям "параллельного программирования" и какова его "степень параллелизма"?

Исключения обеспечивают более высокую производительность

Вот с этим утверждением я не совсем согласен, поскольку это зависит от многих факторов, хотя синтетический Фибоначчи и показывает ускорение. Пару лет назад я расширял библиотеку-wrapper для использования OpenCV в LabIVEW, где изначально обработка ошибок (размер картинок, тип, нулевой указатель и т.п.) была сделана как раз на исключениях. Это было красиво с точки зрения архитектуры, удобно и элегантно, но отжирало несколько процентов от общей производительности, а там где это использовалось был реалтайм и потоковое видео с детектора, мне была важна каждая миллисекунда. Я попробовал пооптимизировать всяко разно, но по итогу мне пришлось перейти к "Си-стилю" обработки ошибок на кодах возврата. К сожалению у меня под рукой нет кода, чтоб продемонстрировать. Это разумеется не значит, что утверждение абсолютно неверно, но это повод в случаях необходимости по крайней мере практически проверить и сделать трассировку и бенчмарк.

Вероятно у них есть свой интерес поднять продажи своих ноутов, куда они это хозяйство устанавливают. Я, кстати, почему пользуюсь Pop_OS - в основном из-за беспроблемности. И я так понимаю, что определённая дисциплина разработки таки оказывает положительное влияние. В каждом Линуксе, что я пробовал что-то да не работало - либо WiFi, либо траблы с док станцией, либо NVidia, либо что.то ещё. Это решаемо всё, но вы знаете как это с линуксом. У меня старенький Dell с NVidia, а у system76 есть дистр с вшитым драйвером, и там всё заработало сразу и из коробки, да и система приятная. Кстати, ноуты по слухам тоже неплохие - мой знакомый купил, был доволен как слон.

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

Cosmic Desktop, что на Расте написан также используется в Pop_OS. В релиз он пока не вышел, но попробовать альфу уже можно - https://system76.com/cosmic. Для меня Pop_OS! - основной домашний Линукс, и на ней вполне можно работать (мне комфортно). Cosmic десктоп, я ,правда пока не пробовал.

И тем не менее я всё-же не до конца понимаю словосочетание "степень параллелизма" в вашей интерпретации. Для меня параллелизм — это когда что-то с чем-то выполняется параллельно. Два потока в компьютере, к примеру. Да, там есть тонкости типа псевдопараллельности в зависимости от модели многозададачности, но LabVIEW параллельна сама по себе априори и из коробки, вплоть до того, что отдельные циклы (автоматы, если хотите) там вообще на разные ядра процессора раскидать можно и они будут выполняться параллельно (можно с синхронизацией, можно и без). Что значит "степень параллелизма?"

Но в контексте конкретно данного обсуждения я, кажется, начинаю вас понимать, и вот мне кажется, что вы в какой-то мере подменяете понятия "непрерывности/дискретности" понятиями "параллельно/последовательно". Вероятно вы считаете автоматы клапана и бака некими "параллельными" системами с "мгновенной" реакцией.

Давайте в качестве примера упростим всё до предела, рассмотрим сливной бачок унитаза. Там есть кнопка слива, поплавок и клапан, соединённый с поплавком. Чем ниже уровень воды, тем сильнее открывается клапан. Нас интересует уровень воды как функция времени после нажатия кнопки, определённая на временнóм участке до следующего наполнения. Это типичная непрерывная (аналоговая, если будет угодно) система. Чтобы хоть как-то проконтролировать нашу модель, мы вкорячим туда ардуинку, замеряющую уровень в определённые моменты времени. Понятно, что если мы будем менять частоту опроса ардуинки, то на систему это никак не повлияет, разве что график станет грубее. Также и в симуляции, если мы меняем частоту дискретизации, но модель возвращает одни и те же значения в одни и те же моменты времени, то это непрерывная модель. Я могу хоть через пять секунд попросить время и моделб мне скажет количество воды в этот момент.Всё просто.

Теперь мы слегка изменим наш бачок — добавим сервомотор, и ардуинка теперь будет не просто опрашивать уровень поплавка, но будет управлять мотором, подключённому к клапану. В этом месте мы внесли дискретность в наше устройство, причём не только временнýю, но и по значениям (что поплавок, что серва имеют ограниченный набор допустимых значений). Вот теперь время цикла ардуинки будет очень даже влиять на результат — если я поставлю пять секунд, то мало того, что бачок начнёт наполняться с задержкой, он ещё и запросто может переполниться. Очевидным образом при уменьшении времени дискретизации (увеличении частоты) наша система будет ближе и лучше приближаться к непрерывной (догонит ли Ахиллес черепаху?). Я так понял из вашего отчёта выше, что при 0,01 сек это примерно и произошло и "диаграммы совпали идеально".

Пока что всё просто, это просто азы САУ. Современные средства симуляции позволяют моделировать оба типа систем, равно как и смешанные, гибридные. Тот скриншот, что я показал в комменте к предыдущему посту — это классический пример симуляции дискретной, или последовательной, если будет угодно. Я подогнал результат под SimInTech, но меняя время дискретизации, я безусловно буду влиять на результат. Там всё исполнение в цикле идёт последовательно — вычисление управляющего воздействия контроллером нечёткой логики -> вычисление значений уровня воды и потока, и на следующей итерации (такте) передача их в контроллер (там сдвиговый регистр), и так далее по кругу, никакой "параллельности" там нет и в помине.

Однако LabVIEW Control Design and Simulation Module умеет и в непрерывную систему. Я не стал усложнять там коммент, но установка этого модуля добавляет специальный цикл для симуляции, и вот в нём возможно соединить выход напрямую с входом вот таким образом (что в общем противоречит парадигме потоков данных):

Но это даёт нам ту самую "параллельность" (хотя бы визуальную), когда выход мгновенно распространяется на вход, как если бы наш поплавок был жёстко соединён с клапаном. На самом деле авторы тулкита просто вдохновились Симулинком.

Для симуляции дискретной системы там свои отдкльные инструменты (поэтому и примеры отдельно для разных типов и инструменты для непрерывных и дискретных систем разные).

Цикл симуляции, кстати, универсален, вот посмотрите на его свойства, непрерывное и дискретное время раздельно:

Как я уже отметил выше, при уменьшении времени дискретизации наша дискретная система начинает приближаться к непрерывной, но расчёт с использованием очень большого количества шагов непродуктивен с точки зрения разбазаривания вычислительных ресурсов, поэтому тут всё хитрее — используется Рунге-Кутта с переменным шагом, и шаг уменьшается лишь на сильных изменениях. Так что симуляция в общем всегда дискретна, просто шаг очень маленький. При этом я могу задать требуемую точность симуляции, как относительную, так и абсолютную, а LabVIEW сама подгонит необходимый шаг. Документация: https://www.ni.com/docs/en-US/bundle/labview-control-design-and-simulation-module/page/lvsim/sim_configparams.html?srsltid=AfmBOopYUDq60ORMmPloKvwHHDw7du6r_GpWTyGoCd1bOwyr6plxTNRH Дискретный шаг на симуляцию непрерывной системы не влияет, а лишь на количество данных (но в точках отсчёта данные должны быть валидны).

Если же я выполняю симуляцию чисто дискретной системы, то переключусь вот так:

А так, кстати, там вот что доступно:

(надо будет на досуге разобраться с остальными, а то кроме Рунге-Кутта да Эйлера ничё не знаю). Вот это всё или почти всё есть и в Simulink в той или иной форме. Там, к примеру, также как и в LabVIEW есть как дискретный, так и непрерывный интегратор (https://de.mathworks.com/help/sps/ref/integratordiscreteorcontinuous.html).

SimInTech если верить документации также умеет симулировать как дискретные так и непрерывные системы, причём их можно комбинировать.

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

Я, признаться, совершенно не понял сути вашей проблемы из набора приведённых графиков.

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

Ну а если серьёзно, то нечёткая логика тут особо ни при чём, там довольно примитивный контроллер на два входа и один выход, и это первое же, что я проконтролировал, перекладывая код SimInTech на LabVIEW, так как там фактически библиотечные функции вне моего контроля (меня немного смутила "асимметрия" в параметрах контроллера, так что я довольно дотошно проверил, подавая на входы сгенерированные рампы и визуально контролируя форму сигнала на выходе, и там всё в общем честно, хотя расхождения и есть, но они незначительны). Если вам нужна реализация на плюсплюсах, то её вероятно можно найти готовую (на Питоне уж точно).

А вот дальше там два интегратора и обратная связь (кстати, интегратор в клапане мне кажется избыточным, можно обойтись и одним в баке, ну да ладно), и меняя шаг дискретизации мы также можем получить всё что душе угодно. Кстати, насколького я вижу, SimInTech автоматом подгоняет шаг интегрирования к шагу дискретизации, а вот в LabVIEW параметр dt интегратора настраиваемый:

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

Вообще если вы по-какой-то причине не доверяете SimInTech, так возьмите Simulink, ведь пример SimInTech почти один в один взят вот отсюда:

Water Level Control in a Tank

Там вот так всё устроено:

И да, выходы контроллерва нечёткой логики тоже настроены слегка несимметрично (я имею ввиду close_slow/open_slow):

Ну и результат:

Если же начать накручивать параметры в симулинке, то, разумеется, тоже появятся всякие весёлые эффекты.

Либо вас смущает лёгкая специфика реализации на автоматах, но это вроде вот тут уже обсуждалось: Нечеткая логика и конечные автоматы против ПИД-регулятора. https://habr.com/ru/articles/500268/.

Короче, я не поленился, да скачал SimInTech, там взял этот пример, разве что добавил на график расхода обратного тока выход контроллера нечёткой логики для самоконтроля:

Собственно контроллер устроен вот так:

Там гаусс используется:

Правила выхода:

Переложил это дело на LabVIEW как есть:

Гаусс, к счастью там тоже поддерживается, вот два входа::

и

Выход настроен также как и в SimInTech:

Правила:

Я вижу тут маленькую ошибку в Antecedent connective и Consequent implication, но пусть будет, скриншоты переделывать лень, там влияние минимально, да и разобраться надо поглубже

Тут можно проверить:

Ну и вот, это SimInTech:

А это LabVIEW:

Визуализация клапана, что я взял из исходного LabVIEW примера, мне отчаянно не нравится, но пусть будет, я и так полдня угрохал, чтобы с этим хотя бы поверхностно разобраться. Как-то так.

О, спасибо огромное, любопытно.

Я, как обычно со своими пятью копейками, как пример нечёткой логики в графическом программировании (LabVIEW в данном случае). С Control and Simulation нечёткая логика там идёт из "коробки". вот некоторые примеры:

Блок-диаграмма пары баков с клапаном как есть из примера:

Вот как-то так оно работает:

Пример поинтереснее — парковка машины задним ходом в гараж:

Тут два контроллера нечёткой логики — один для езды передом, а второй — для езды задом, вот так это на передней панели выглядит:

Для настройки контроллеров там такая вот утилитка прилагается:

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

Как владелец предыдущей модели reMarkable 2 (причем в комплекте с Marker Plus и Type Folio) не могу не заметить, что гаджет сильно переоценён, такой комплект сейчас обойдётся в 899 Евро.

Причём там довольно примитивное приложение-заметочник, и больше нет ничего, ни календаря, ни часов, ни органайзера. Поддерживает только pdf да epub, даже djvu нет. Кнопок листания нет. При зуммировании лагает нещадно. Облако платное, три евро в месяц. Разрешение экрана низкое — 229 точек на дюйм. Он на Линуксе, кстати. Умельцы расширяют функционал, на него по SSH можно зайти, хотя его довольно легко окирпичить. Я его купил давно по программе краудфандинга, тогда мне это сотни в четыре обошлось, и облако бесплатное. Мой, кстати, ещё тоньше - 4,7 мм, но без подсветки. Использую эпизодически, в основном детям домашку объяснять, ну и на совещаниях почирикать. На мой взгляд современный планшет на андроиде с пером с более высоким разрешением ничуть не хуже, а эта игрушка — для тех, кому денег не жалко. Но писать довольно приятно, это да — там покрытие такое чуть шершавое.

Новая функция — кнопка Camera Control сбоку. С ее помощью можно моментально включить камеру, сделать снимок, 

Мой древний смартофон на четвёртом Андроиде, которому в этом году исполнится десять лет, хотя по очевидным причинам и не умеет в 4К и оптический зум, но всё же снисходительно посмеивается:

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

После прочтения поста я (каюсь, грешен) таки скачал упомянутую выше книгу Récoltes et Semailles (она гуглится на раз А. Гротендик - Урожаи и посевы file:epub), а сегодня, пока ждал машину супруги из ремонта, имел удовольствие ознакомиться и залип. Она переведена не полностью, но и той части, что я прочитал, достаточно, чтобы смело порекомендовать. Понравится, вероятно, не всем, но я не мог оторваться, тем более что я ещё помню Риманово многообразие, Группы Галуа, Гильбертовы пространства, это было в прошлой жизни универе, и эти фамилии встретятся в книге, а вот сам Гротендик во время учёбы как-то прошёл мимо. Но в принципе знания математики и не требуется чтобы прочитать, там "за жизнь" больше. На английский она тоже переведена, похоже, лишь фрагментарно, и я уже почти готов начать учить французский, чтобы прочесть труд полностью.

Как владелец не только планшетов, но и в том числе Onyx Boox Color на цветном e-ink, согласен с одной поправкой - на правильной читалке есть кнопки листания страниц. Листать по экрану мне отчаянно не нравится (не всегда срабатывает, отпечатки пальцев, и т.д.), так что Kindle Oasis - лучшее что у меня есть для чтения, это реально удобный форм фактор, особенно когда я его одел в нескользящий силиконовый чехольчик, а сзади прилепил этакую пимпочку, чтоб в открытой ладони держать. И да, меньше трёхсот точек на дюйм быть не должно.

Дом Гротендика – единственный двухэтажный дом в Лассёре

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

А дом Гротендика в этом городе выглядит сбоку вот так:

Просто у французов первый этаж, что на земле, не считается, он типа "нулевой" — un rez-de-chaussée (как и у немцев — Erdgeschoß).

У меня вот такая шпаргалка с прошлой работы завалялась, может вдруг пригодится кому:

И MPL — это вроде "Mozilla Public License", a Microsoft Public License — это Ms-PL или MS-PL.

  • Ношу android телефон с USB ЦАП-ом как второй, чтобы слушать через него то, что скачал, как в старые добрые времена (неудобно жесть)

Есть же High Res плееры, типа iBasso, FiiO, Astell & Kern, Hidizs, Sony... После того как мой старенький iBasso DX50 куда-то (простите за каламбур) проibasso, я себе взял отчаянно китайский Surfans F35, который по сути перелицованный Aigo Eros H05 с добавленным Bluetooth. Наушники Sennheiser HD599 с балансным кабелем 4,4 мм, либо дома на акустике Kenwood LS-880 A. На природе гриль пожарить и послушать — Bose SoundLink Max. Больше в общем-то и не надо, ну мне во всяком случае.

Rav4 гибрид?

Не, Мини Купер Кантримэн гибрид:

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

Information

Rating
6,325-th
Location
Ahrensburg, Schleswig-Holstein, Германия
Date of birth
Registered
Activity