Обновить
-26
Александр Ковалёв@Koval97read⁠-⁠only

Программист С++ низкого уровня

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

Магия тензорной алгебры: Часть 1 — что такое тензор и для чего он нужен?

Время на прочтение7 мин
Охват и читатели427K

Содержание


  1. Что такое тензор и для чего он нужен?
  2. Векторные и тензорные операции. Ранги тензоров
  3. Криволинейные координаты
  4. Динамика точки в тензорном изложении
  5. Действия над тензорами и некоторые другие теоретические вопросы
  6. Кинематика свободного твердого тела. Природа угловой скорости
  7. Конечный поворот твердого тела. Свойства тензора поворота и способ его вычисления
  8. О свертках тензора Леви-Чивиты
  9. Вывод тензора угловой скорости через параметры конечного поворота. Применяем голову и Maxima
  10. Получаем вектор угловой скорости. Работаем над недочетами
  11. Ускорение точки тела при свободном движении. Угловое ускорение твердого тела
  12. Параметры Родрига-Гамильтона в кинематике твердого тела
  13. СКА Maxima в задачах преобразования тензорных выражений. Угловые скорость и ускорения в параметрах Родрига-Гамильтона
  14. Нестандартное введение в динамику твердого тела
  15. Движение несвободного твердого тела
  16. Свойства тензора инерции твердого тела
  17. Зарисовка о гайке Джанибекова
  18. Математическое моделирование эффекта Джанибекова


Введение



Это было очень давно, когда я учился классе в десятом. Среди довольно скудного в научном плане фонда районной библиотеки мне попалась книга — Угаров В. А. «Специальная теория относительности». Эта тема интересовала меня в то время, но информации школьных учебников и справочников было явно недостаточно.



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



Читать дальше →

От генерации к рассуждению: эволюция языковых моделей от GPT до RL

Уровень сложностиСложный
Время на прочтение93 мин
Охват и читатели9K

В контексте стремительного развития больших языковых моделей (LLM) особое внимание уделяется повышению их способности к логическим рассуждениям. Одним из значимых достижений в этой области является модель DeepSeek-R1, разработанная для стимулирования reasoning-способностей LLM с помощью методов обучения с подкреплением (Reinforcement Learning, RL). DeepSeek-R1 представляет собой инновационный подход, направленный на улучшение качества генерации ответов в задачах, требующих многошаговых логических выводов.

Читать далее

Vision Transformers: всё, что вам нужно — это внимание

Время на прочтение16 мин
Охват и читатели13K

С появлением статьи «Attention Is All You Need» закончилось доминирование рекуррентных нейронных сетей (Recurrent Neural Network — RNN). Поскольку трансформеры показывают лучшие результаты на практике по сравнению с RNN, давайте разберёмся, что они собой представляют и как работают в области компьютерного зрения.

Читать далее

Reasoning-LLM: архитектура и обзор передовых моделей

Время на прочтение24 мин
Охват и читатели22K

Reasoning-LLM — это большие языковые модели, нацеленные на логическое рассуждение при решении сложных задач. В отличие от обычных LLM, которые часто выдавали ответы сразу, такие модели способны «думать» пошагово — как человек, анализируя задачу и выстраивая цепочку вывода.

Появление reasoning-LLM связано с тем, что традиционные LLM (например, GPT-4 или Llama 3.1) хотя и хорошо справляются с языковыми и энциклопедическими запросами, нередко ошибались в задачах, требующих сложных вычислений, планирования или логического вывода. В этой статье мы подробно разберем, как работают reasoning-LLM, их внутреннее устройство (Transformer, self-attention, механизмы «мышления»). А еще — рассмотрим передовые модели (OpenAI o1, DeepSeek R1 и Claude 3.7 Sonnet), факторы, влияющие на их точность, и дадим практические рекомендации по применению.
Читать дальше →

Оптимизация генеративной модели на основе дистилляции

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.2K

Одним из важнейших направлений работы над моделями машинного обучения является их оптимизация. Оптимизированная модель работает быстрее, требует меньше вычислительных ресурсов, и как следствие — снижает себестоимость работы ПО, использующего модель. Для задач, когда существует ограничение по типам изображений при использование генеративных моделей, возможный путь оптимизации — дистилляция существующих "больших" универсальных моделей. Например Stable Diffusion (далее — SD).Также для некоторых задач, связанных с демонстрацией пользователям изображений, необходимо как можно скорее выводить результат генерации.

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

Читать далее

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

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели13K

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

ИИ-модель, управляющая собственным бизнесом. И новая модель Anthropic, Opus 4.6, установила новый рекорд баланса — более $8000, на $3000 больше предыдущего рекорда.

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

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

Читать далее

Трое в лодке, не считая контекста

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели9.4K

Как подружить MCP-сервер, клиент и LLM в вашем приложении - практическое руководство.

Всем привет! Меня зовут Владимир, последние несколько лет я занимаюсь разработкой приложений с использованием моделей  компьютерного зрения (CV), обработки естественного языка (NLP) и больших языковых моделей (LLM).

Буду делиться своими наработками в этих областях. Начнем с серии материалов про МСР

Читать далее

IT больше не проклято. Как я перестал бояться и начал любить AI разработку

Уровень сложностиПростой
Время на прочтение34 мин
Охват и читатели12K

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

Дисклеймер (обязательно к прочтению)

Если вы гоняете клауд-код по подписке от антропиков за 20+ баксов и у вас все работает — это нормально. Если наоборот, вы попробовали этот самый вайб-кодинг и получили кучу бесполезного кода — это тоже нормально. У всех опыт разный, и я хочу примирить адептов двух лагерей, потому что каждый лагерь по-своему прав.

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

go deeper

Разработчик пинбола для Windows XP рассказал о том, почему игра не появится в Windows 11

Время на прочтение7 мин
Охват и читатели54K

Привет, меня зовут Дейв Пламмер, я бывший разработчик операционных систем Microsoft. Я работал в компании ещё с эпохи MS-DOS и Windows 95. Так получилось, что мне довелось портировать игру Space Cadet, поставлявшуюся в комплекте с Windows. Сегодня я поговорил с разработчиком из Microsoft, который полностью удалил её из операционной системы, чтобы понять, почему это было сделано, а также чтобы оценить перспективы возврата игры. Также я покажу как запустить этот пинбол в Windows 10 и протестирую его работу в новой Windows 11, чтобы проверить, работает ли он спустя почти 25 лет. Сразу должен сказать, что я не занимался графикой, звуком, дизайном стола и разработкой геймплея, даже оригинальный код писал не я. Изначально это была отдельная игра Full Tilt! Pinball, выпущенная Maxis в 1995 году. Я могу лишь похвастаться тем, что взял относительно малоизвестную игру и портировал её на платформу, получившую больше миллиарда пользователей. Изначально я добровольно вызвался портировать игру на Windows NT 4.0.
Читать дальше →

Краткий обзор развития лямбда-выражений в C++11, C++14, C++17 и C++20

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели27K

Привет, Хабр!

Сегодня рассмотрим лямбда-выражения в C++ и их эволюцию с момента появления в стандарте C++11 и до последних обновлений в C++20.

Лямбда-выражения в C++ — это анонимные функции, которые позволяют писать инлайн-выражения прямо там, где они используются. С их помощью можно легко определять функции обратного вызова, передавать их в функции высшего порядка или использовать для инициализации функциональных объектов.

Читать далее

Профайлер Бедного Человека: первое знакомство и (приятные) последствия

Время на прочтение9 мин
Охват и читатели17K


Если вам приходилось оптимизировать работу программ, то вы могли слышать о Профайлере Бедного Человека. Этой идее даже посвящён целый сайт. ПБЧ собирает статистику времени выполнения отдельных функций программы, «подглядывая» в процесс её исполнения с помощью дебаггера. Концепт ПБЧ хорошо прижился у нас в движке баннерной крутилки — не буду в 100 500-й раз напоминать, что у Яндекса всё высоконагруженное, ресурсоёмкое и нуждающееся в профилировании. Статья будет полезна тем, кто пилит инфраструктуру, адаптирует какой-нибудь общеизвестный профайлер под себя или просто хочет больше знать про свои программы. Как мы пришли к необходимости в ПБЧ и что именно сделали? Сейчас постараюсь рассказать, местами буду закапывать глубоко в технологии (если переусердствую, пишите в комментариях). А начну со стандартного инструмента статистического профилирования в Linux — perf.
Читать дальше →

saneex.c: try/catch/finally на базе setjmp/longjmp (C99) быстрее стандартных исключений C++¹

Время на прочтение19 мин
Охват и читатели14K

Пока писал эту сугубо техническую статью, Хабр успел превратиться в местное отделение ВОЗ и теперь мне даже стыдно ее публиковать… но в душе теплится надежда, что айтишники еще не разбежались и она найдет своего читателя. Или нет?




Меня всегда восхищала стандартная библиотека Си, да и сам Си — при всей своей минималистичности от них так и веет духом тех самых первых красноглазиков хакеров. В черновике первого официального стандарта (ANSI C, он же C89, он же ANS X3.159-1989, он же, позднее, C90 и IEC 9899:1990) определяется 145 функций и макросов, из них около 25 — это вариации (ввиду отсутствия в языке перегрузок), а 26 чисто математических. K&R во второй редакции² приводят 114 функций (плюс математические), считая остальные за экзотику. В черновике³ C11 функций уже 348, но больше сотни — математика, а еще штук 90 это «перегрузки». А теперь посмотрим на Boost, где одних только библиотек — 160. Чур меня…


И среди этой сотни-полутора функций всегда были: обработка сигналов, вариативные функции (которые до интерпретируемого PHP дошли 25 лет спустя, а в Delphi, бурно развивавшемся одно время, их нет до сих пор) и порядка 50 строковых функций вроде printf() (м-м-м… JavaScript), strftime() (…) и scanf() (дешевая альтернатива регуляркам).



А еще всегда были setjmp()/longjmp(), которые позволяют реализовать привычный по другим языкам механизм исключений, не выходя за рамки переносимого Си. Вот о них и поговорим — Quake World, стеки, регистры, ассемблеры и прочая матчасть, а вишенкой будет занятная статистика (спойлер: Visual Studio непостоянна, как мартовский заяц, а throw saneex.c в два раза быстрее всех).


Текста много, не порежьтесь!

У Линукс нет перспектив в качестве операционной системы для десктопа

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели112K

Судя по результатам которых достиг GNU/Linux за более чем 30 лет своего существования, перспективы на на домашних компьютерах и ноутбуках (десктопе) у него отсутствуют, и вызвано это сразу несколькими причинами.

Читать далее

Ускоряем неускоряемое или знакомимся с SIMD

Время на прочтение9 мин
Охват и читатели87K
Есть класс задач, которые нельзя ускорить за счёт оптимизации алгоритмов, а ускорить надо. В этой практически тупиковой ситуации к нам на помощь приходят разработчики процессоров, которые сделали команды, позволяющие выполнять операции на большим количеством данных за одну операцию. В случае x86 процессоров это инструкции сделанные в расширениях MMX, SSE, SSE2, SSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, AVX512.

В качестве «подопытного кролика» я взял следующую задачу:
Есть неупорядоченный массив arr с числами типа uint16_t. Необходимо найти количество вхождений числа v в массив arr.
Классическое решение, работающее за линейное время выглядит так:

int64_t cnt = 0;
for (int i = 0; i < ARR_SIZE; ++i)
    if (arr[i] == v)
        ++cnt;

В таком виде бенчмарк показывает следующие результаты:

------------------------------------------------------------
Benchmark                     Time           CPU Iterations
------------------------------------------------------------
BM_Count                   2084 ns       2084 ns     333079

Под катом я покажу как его ускорить в 5+ раз.
Читать дальше →

Ускоряем умножение матриц float 4x4 с помощью SIMD

Время на прочтение19 мин
Охват и читатели24K
Уже немало лет прошло, как я познакомился с инструкциями MMX, SSE, а позже и AVX на процессорах Intel. В своё время они казались какой-то магией на фоне x86 ассемблера, который уже давно стал чем-то обыденным. Они меня настолько зацепили, что пару лет назад у меня появилась идея написать свой собственный софт рендерер для одной известной игры. Сподвигло меня на это то, какую производительность обещали эти инструкции. В какой-то момент я даже думал об этом написать. Но писать текст оказалось куда сложнее кода.

В то время я хотел избежать проблем с поддержкой на разных процессорах. Хотелось иметь возможность проверить мой рендерер на максимально доступном количестве. У меня до сих пор остались знакомые со старыми AMD процессорами, и их потолок был SSE3. Поэтому на тот момент я решил ограничиться максимум SSE3. Так появилась векторная математическая библиотека, чуть менее, чем полностью реализованная на SSE, с редким включением до SSE3. Однако в какой-то момент мне стало интересно, какую максимальную производительность я смогу выжать из процессора для ряда критичных операций векторной математики. Одной из таких операций является умножение матриц float 4 на 4.

Если интересно, что из этого получилось, добро пожаловать под кат

Компиляция Python

Время на прочтение7 мин
Охват и читатели124K

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

Во-первых, к вам прибегает озадаченный проджект-менеджер и говорит: «Мы решили не отдавать исходный код, ведь это наша интеллектуальная собственность. Придумайте что-нибудь, чтобы заказчик был доволен, а мы оставили у себя исходники».

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

И, наконец, хочется,  чтобы конечное приложение работало быстрее, чем в среде разработки.

И вот тут настало время скомпилировать Python-код.

Меня зовут Руслан, я старший разработчик компании «Цифровое проектирование». Сегодня я расскажу, как выбрать тот самый компилятор из множества доступных.

Читать далее

Руководство по созданию ActiveX-контролов на C++ с помощью ATL

Время на прочтение13 мин
Охват и читатели32K
В интернете существует множество учебников по использованию ATL, и в частности, по созданию COM-компонентов с его помощью, в том числе и ActiveX/OLE контролов, но большинство из них почему-то описывают процесс тыкания мышкой в разные интересные места Visual Studio, использование графических инструментов последней, и мало какой из них затрагивает нутро сгенерированного средой разработки кода в достаточно глубоком объеме. В русскоязычном сегменте интернета ситуация и того хуже — материалов по ATL крайне мало, практически нет(да и не только по ATL, а и по созданию COM-компонентов вообще), поэтому я решил этот недостаток компенсировать.
Читать дальше →

Тысяча и одна библиотека С++

Время на прочтение65 мин
Охват и читатели103K

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

Тайм-менеджмент для разработчика. Секреты эффективности в работе и в жизни

Время на прочтение7 мин
Охват и читатели15K

Привет! Меня зовут Макс Нечаев и я iOS-разработчик. Буквально два года назад я абсолютно не понимал реального значения тайм-менеджмента. Это привело меня к крайне неэффективному использованию своего времени, выгоранию и ряду переживаний.

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

На самом деле менеджмент времени - это не про использование задачников, таймеров или блокнота...

Читать далее

«Кто согласовал такую фигню?» — будни переговорщиков из IT

Время на прочтение8 мин
Охват и читатели15K

Привет, Хабр! Я работаю исполнительным директором в HFLabs, а до того, как им стать, больше восьми лет занимался продажами в B2B. Моя первая сделка началась с того, что меня позвали на переговоры с вице-президентом банка. Я подумал: не с моей же рожей к вице-президентам ходить. И позвал взрослых — генерального. В день встречи утром он мне позвонил и сказал, что я уже готов к таким встречам и могу смело идти один. Было страшно.

Так вот, лето, жара, погода изматывающая. Приходит вице-президент и начинает разговор примерно так: «Вот видите во дворе Audi стоят? Я их все купил со скидкой 60%. Так что и вам придется нас услышать». Но вся штука была в том, что я уже успел по этому проекту дать скидку 30%. И это был хороший жизненный урок: скидку я дал вообще не тому человеку — он не был тем самым ЛПР. Я не разобрался в процессе и даже не спросил, кто и как будет решать по сделке. Пришлось в итоге каждый пункт коммерческого предложения объяснять, каждую строчку сметы. Например, написано у нас тестирование 2 дня. А клиент мне в ответ — зачем два, давайте один день будете тестировать!..

Дальше расскажу, какие еще истории у нас случались на переговорах и вокруг них. 

Читать далее

Информация

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