Как стать автором
Обновить
-8
0

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

Отправить сообщение

Быстрая медианная фильтрация с использованием AVX-512

Время на прочтение11 мин
Количество просмотров7K

Недавно Боб Стигалл сделал в конференции CppCon 2020 доклад под названием «Adventures in SIMD-thinking”, где он среди прочего рассказывал о своем опыте использования AVX512 для медианной фильтрации (с окном 7). Этот доклад вызвал у меня двоякие чувства: с одной стороны, прикольно сделано, и заявлено почти 20-кратное ускорение по сравнению с «тупейшей» реализацией через STL; с другой стороны, за один проход алгоритма из 16 входных семплов у него получалось всего 2 выходных, хотя входных данных хватало на 10, да и некоторые детали реализации вызвали желание попытаться их улучшить. Я подумал-подумал, и придумал идею, потом еще, потом попробовал их «в софте» и понял, что у меня появилось что-то, чем можно поделиться :) Так и получилась эта статья.

Читать далее
Всего голосов 45: ↑45 и ↓0+45
Комментарии17

Проверка коллекции header-only C++ библиотек (awesome-hpp)

Время на прочтение17 мин
Количество просмотров4.6K
PVS-Studio и Awesome hpp

Волею судьбы мы проверили большинство библиотек, входящих в коллекцию под названием "Awesome hpp". Это небольшие проекты на языке C++, состоящие только из заголовочных файлов. Надеемся, найденные ошибки помогут сделать эти библиотеки немного лучше. Также мы будем рады, если их авторы начнут бесплатно использовать анализатор PVS-Studio на регулярной основе.
Читать дальше →
Всего голосов 13: ↑11 и ↓2+9
Комментарии4

2. Математическое описание систем автоматического управления ч. 2.9 — 2.13

Время на прочтение10 мин
Количество просмотров21K

Лекции по курсу «Управление Техническими Системами», читает Козлов Олег Степанович на кафедре «Ядерные реакторы и энергетические установки», факультета «Энергомашиностроения» МГТУ им. Н.Э. Баумана. За что ему огромная благодарность.


Данные лекции только готовятся к публикации в виде книги, а поскольку здесь есть специалисты по ТАУ, студенты и просто интересующиеся предметом, то любая критика приветствуется.


В предыдущих сериях:

1. Введение в теорию автоматического управления
2. Математическое описание систем автоматического управления 2.1 — 2.3
3. Математическое описание систем автоматического управления 2.3 — 2.8


В это части будут рассмотрены:

2.9. Использование обратных преобразований Лапласа для решения уравнений динамики САР (звена).
2.10. Весовая и переходная функции звена (системы).
2.11. Определение переходного процесса в системе (САР) (звене) через весовую и переходную функции.
2.12. Mетод переменных состояния.
2.13. Переход от описания переменных «вход-выход» к переменным состояния.


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



Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии19

STM32F3xx + FreeRTOS. Modbus RTU с аппаратным RS485 и CRC без таймеров и семафоров

Время на прочтение9 мин
Количество просмотров26K
Всем привет! Относительно недавно, закончив ВУЗ, я попал в небольшую компанию, которая занималась разработкой электроники. Одна из первых задач с которой я столкнулся — необходимость в реализации Modbus RTU Slave протокола с использованием STM32. С грехом пополам я её тогда написал, однако этот протокол начал встречаться мне из проекта в проект и я решил зарефакторить и оптимизировать либу с использованием FreeRTOS.
Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии24

Нахождение точки пересечения двух прямых (и отрезков)

Время на прочтение3 мин
Количество просмотров54K

Введение


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

image

Популярные способы и их критика


Возможно, многие вспомнят способ из школьной алгебры — составить уравнения двух прямых, приравнять их правые части, найти x, и подставить его в уравнение прямой, чтобы найти y (Подробнее здесь).

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

В поисках более элегантного решения данной проблемы я наткнулся на весьма интересные способы, основанные на векторном умножении ( habr.com/ru/post/267037 ) и ray castinging'е ( ru.wikipedia.org/wiki/Ray_casting#Концепция ). Но на мой взгляд, они неоправданно сложные в вычислительном плане. Поэтому представляю вашему вниманию (и критике) мой способ.
Читать дальше →
Всего голосов 23: ↑13 и ↓10+3
Комментарии36

Фильтр Калмана — это легко

Время на прочтение18 мин
Количество просмотров74K


Много людей, в первый раз сталкивающихся в работе с датчиками, склонны считать, что получаемые показания — это точные значения. Некоторые вспоминают, что в показаниях всегда есть погрешности и ошибки. Чтобы ошибки в измерениях не приводили к ошибкам в функционировании системы в целом, данные датчиков необходимо обрабатывать. На ум сразу приходит словосочетание “фильтр Калмана”. Но слава этого “страшного” алгоритма, малопонятные формулы и разнообразие используемых обозначений отпугивают разработчиков. Постараемся разобраться с ним на практическом примере.
Читать дальше →
Всего голосов 73: ↑71 и ↓2+69
Комментарии34

Продолжение: обидно за мнения про статические анализаторы кода

Время на прочтение4 мин
Количество просмотров7.1K
image1.png

Планировалось, что, написав статью "Обидно за мнения про статические анализаторы кода", мы выговоримся и спокойно отпустим тему. Но неожиданно эта статья вызвала бурный отклик. К сожалению, обсуждение пошло не туда, и сейчас мы сделаем вторую попытку объяснить своё видение ситуации.
Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии72

Сложение двух чисел с плавающей запятой без потери точности

Время на прочтение9 мин
Количество просмотров78K
Здравствуйте, друзья, как вы думаете, если мы напишем такой код:

s = a+b;
z = s-a;
t = b-z;

то не кажется ли вам, что в результате его выполнения получится, что t=0? С точки зрения привычной математики действительных чисел это и правда так, а вот с точки зрения двоичной арифметики с плавающей запятой в переменной t будет кое-что другое. Там будет то, что спасает нас от потери точности при сложении чисел $a$ и $b$. Кого интересует данная тема, прошу под кат.

Всего голосов 139: ↑137 и ↓2+135
Комментарии172

Почему в EBCDIC буквы идут не подряд?

Время на прочтение3 мин
Количество просмотров16K

Стандарт ASCII был принят в 1963, и сейчас вряд ли кто-нибудь использует кодировку, первые 128 символов которой отличались бы от ASCII. Тем не менее, до конца прошлого века активно использовалась EBCDIC — стандартная кодировка для мейнфреймов IBM и их советских клонов ЕС ЭВМ. EBCDIC остаётся основной кодировкой в z/OS — стандартной ОС для современных мейнфреймов IBM Z.

То, что сразу бросается в глаза при взгляде на EBCDIC — то, что буквы идут не подряд: между I и J и между R и S остались неиспользованные коды (на ЕС ЭВМ по этим промежуткам распределили символы кириллицы). Кому могло придти в голову кодировать буквы с неравными пропусками между соседними буквами?

Читать далее
Всего голосов 63: ↑62 и ↓1+61
Комментарии71

Per aspera ad astra, или как я строил ракету. Часть 2. Собираем альтиметр на STM32 и BMP280

Время на прочтение5 мин
Количество просмотров8.7K


Всем привет! 

В предыдущей части я остановился на том, что мои ракеты удачно взлетели и приземлились, а на одной даже был установлен альтиметр. В этой статье я и расскажу о том как сделать простой высотомер на основе STM32 Nucleo L031K6 и датчика давления BMP 280 , который к тому же хранит все данные во Flash памяти.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии43

Корутины в C++20. Часть 1

Время на прочтение8 мин
Количество просмотров22K

Введение


Данная статья является переводом главы из книги Райнера Гримма Concurrency with Modern C++, которая является более доработанной и обширной версией статьи на его сайте. Так как весь перевод не умещается в рамках данной статьи, в зависимости от реакции на публикацию, выложу оставшуюся часть.


Корутины


Корутины это функции которые могут приостановить или возобновить свое выполнение при этом сохраняя свое состояние. Эволюция функций в C++ сделала шаг вперед. Корутины с наибольшей вероятностью войдут вошли в C++20.


Идея корутин, представленная как новая в C++20, довольно стара. Понятие корутины было предложено Мелвином Конвеем. Он использовал данное понятие в публикации о разработке компиляторов от 1963. Дональд Кнут называл процедуры частным случаем корутин. Иногда должно пройти время чтобы та или иная идея была принята.

Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии17

История двух стандартных библиотек Си

Время на прочтение5 мин
Количество просмотров24K
Сегодня мне пришел баг-репорт от пользователя Debian, который скормил какую-то ерунду в утилиту scdoc и получил SIGSEGV. Исследование проблемы позволило мне провести отличное сравнение между musl libc и glibc. Для начала посмотрим на стектрейс:

==26267==ERROR: AddressSanitizer: SEGV on unknown address 0x7f9925764184
(pc 0x0000004c5d4d bp 0x000000000002 sp 0x7ffe7f8574d0 T0)
==26267==The signal is caused by a READ memory access.
    0 0x4c5d4d in parse_text /scdoc/src/main.c:223:61
    1 0x4c476c in parse_document /scdoc/src/main.c
    2 0x4c3544 in main /scdoc/src/main.c:763:2
    3 0x7f99252ab0b2 in __libc_start_main
/build/glibc-YYA7BZ/glibc-2.31/csu/../csu/libc-start.c:308:16
    4 0x41b3fd in _start (/scdoc/scdoc+0x41b3fd)

В исходниках на данной строчке написано вот что:

if (!isalnum(last) || ((p->flags & FORMAT_UNDERLINE) && !isalnum(next))) {

Подсказка: p — это корректный, ненулевой указатель. Переменные last и next имеют тип uint32_t. Сегфолт случается на втором вызове функции isalnum. И, самое важное: воспроизводится только при использовании glibc, но не musl libc. Если вам пришлось перечитать код несколько раз, вы не одиноки: тут попросту нечему вызывать сегфолт.
Читать дальше →
Всего голосов 75: ↑71 и ↓4+67
Комментарии77

Попробуем выдвинуть аргументы против Rust

Время на прочтение6 мин
Количество просмотров24K
Недавно я прочитал статью c критикой Rust. Хотя в ней было много правильных вещей, она мне не понравилась — слишком многое там очень спорно. В целом, я вообще не могу рекомендовать к прочтению никакой статьи с критикой Rust. Это нехорошо, ведь важно обсуждать недостатки, а шельмование низкокачественной и неумелой критики, к сожалению, заставляет пропустить мимо внимания действительно хорошие аргументы.

Итак, попробую привести аргументы против Rust.
Читать дальше →
Всего голосов 54: ↑52 и ↓2+50
Комментарии78

Как нарисовать звезду (и не только) в полярных координатах

Время на прочтение6 мин
Количество просмотров33K
Вопрос о формуле для многоугольника в полярных координатах регулярно возникает на тематических ресурсах — и так же регулярно остаётся без внятного ответа. В лучшем случае попадается решение через функцию остатка от деления — что не является «чистым» с математической точки зрения, поскольку не позволяет производить над функцией аналитические преобразования. Видимо, настоящие математики слишком заняты решением проблем тысячелетия и поисками простого доказательства теоремы Ферма, чтобы обращать внимание на подобные банальные задачи. К счастью, в этом вопросе воображение важнее знания, и для решения этой задачи не нужно быть профессором топологических наук — достаточно знания школьного уровня.
Дальше больше картинок
Всего голосов 152: ↑150 и ↓2+148
Комментарии31

Почему обзоры кода — это хорошо, но недостаточно

Время на прочтение3 мин
Количество просмотров2.6K
image1.png

Обзоры кода однозначно нужны и полезны. Это возможность передать знания, обучение, контроль выполнения задачи, улучшение качества и оформления кода, исправление ошибок. Причем можно замечать высокоуровневые ошибки, связанные с используемой архитектурой и алгоритмами. В общем всё хорошо, но люди быстро устают. Поэтому статический анализ великолепно дополняет обзоры и помогает выявлять разнообразнейшие неприметные на глаз ошибки и опечатки. Рассмотрим хороший пример на эту тему.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии11

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

Время на прочтение8 мин
Количество просмотров2.5K
PVS-Studio and Awesome header-only C++ libraries

Современные приложения строятся из сторонних библиотек как из кирпичиков. Это нормально и единственный вариант завершить проект за разумное время, потратив разумный бюджет. Тем не менее брать все кирпичи без разбора может оказаться не такой уж хорошей идеей. Если есть несколько вариантов, то полезно уделить время анализу открытых библиотек с целью выбрать наиболее качественную.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии2

ARM против x86: В чем разница между двумя архитектурами процессоров?

Время на прочтение6 мин
Количество просмотров201K
Вы наверняка знаете, что мир процессоров разбит на два лагеря. Если вы смотрите это видео со смартфона, то для вас работает процессор на архитектуре ARM, а если с ноутбука, для вас трудится чип на архитектуре x86.

А теперь еще и Apple объявила, что переводит свои Mac на собственные процессоры Apple Silicon на архитектуре ARM. Мы уже рассказывали, почему так происходит. А сегодня давайте подробно разберемся, в чем принципиальные отличия x86 и ARM. И зачем Apple в это все вписалась?


Итак, большинство мобильных устройств, iPhone и Android'ы работают на ARM'е. Qualcomm, HUAWEI Kirin, Samsung Exynos и Apple A13/A14 Bionic — это все ARM-процессоры.

А вот на компьютере не так — там доминирует x86 под крылом Intel и AMD. Именно поэтому на телефоне мы не можем запустить Word с компьютера.
Всего голосов 98: ↑66 и ↓32+34
Комментарии197

Электробезопасность оптических изоляторов в условиях возможных отказов

Время на прочтение7 мин
Количество просмотров3.1K

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

Время чтения 15 мин

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии7

Почему так важна иммутабельность

Время на прочтение5 мин
Количество просмотров8.5K
Привет, Хабр!

Сегодня мы хотим затронуть тему иммутабельности и примериться, заслуживает ли эта проблема более серьезного рассмотрения.
Читать дальше →
Всего голосов 9: ↑6 и ↓3+3
Комментарии4

Антипаттерн “константа размера массива”

Время на прочтение3 мин
Количество просмотров11K
Перевод статьи подготовлен в преддверии старта курса «C++ Developer. Professional».




Хочу обратить ваше внимание на антипаттерн, который я часто встречаю в коде студентов на Code Review StackExchange и даже в довольно большом количестве учебных материалов (!) других людей. У них имеется массив, скажем, из 5 элементов; а затем, поскольку магические числа — это плохо, они вводят именованную константу для обозначения количества элементов «5».

void example()
{
    constexpr int myArraySize = 5;
    int myArray[myArraySize] = {2, 7, 1, 8, 2};
    ...


Но решение это так себе! В приведенном выше коде число пять повторяется: сначала в значении myArraySize = 5, а затем еще раз, когда вы фактически присваиваете элементы myArray. Приведенный выше код столь же ужасен с точки зрения обслуживания, как:

constexpr int messageLength = 45;
const char message[messageLength] =
    "Invalid input. Please enter a valid number.\n";


— который, конечно, никто из нас никогда не напишет.
Читать дальше →
Всего голосов 29: ↑20 и ↓9+11
Комментарии58

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность