C++ and other lectures
8.47K subscribers
39 photos
2 files
210 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы. Написать автору: @Tilir
Download Telegram
Технический опрос. Давайте проголосуем какой звук вам больше нравится?
Final Results
33%
Стерео с ревербацией как в лекции по умным указателям.
67%
Моно как в лекции по полиморфным аллокаторам.
🤡2🙏1🕊1💔1
Выложил лекцию по динамическому полиморфизму.

https://youtu.be/_Jn7MAZYL2M

Я долго ходил вокруг неё кругами и думал включать или нет в магистерский курс. В прошлом году попробовал прочитать не под запись, но тогда она скорее провалилась. Последний толчок был дан благодаря моему подписчику Нику Келбону, показавшему мне библитотеку AnyAny своего авторства: https://github.com/kelbon/AnyAny

Я посмотрел и я понял что теперь я могу что-то рассказывать.

#cpp_postgraduate
🔥57👍8🤔1🎄1
Всем привет. Потёр немного оффтопика про fixed-width типы (int8_t, int16_t и т.д.) из другой ветки, но я вижу у людей накипело и предлагаю для on-topic обсуждения эту ветку.

Пока что моё нынешнее личное отношение такое: fixed-width типы это зло и любое их применение это ошибка. Но у меня действительно тут объективно слабовато с аргументацией.

По пунктам из того что есть:

(1)

Если у вас есть 32-битная архитектура (например 32-битный ARM или RISCV) и вы использовали в программе int64_t, как компилятору и библиотеке это трактовать? Вы ждёте ошибку компиляции или вы ждёте int_least64_t и обработку по кускам с хранением в двух регистрах и т.д.? Если да то почему собственно и кто вам это обещал?

(2)

Что вы вообще хотите сказать используя такие типы? Что ваша программа не будет работать если тут не 64 бита? Что вы хотели бы чтобы тут было 64 бита? Что вам всё равно сколько тут бит но вы считаете себя умнее компилятора и вот соптимизировали для x86?

В первом случае это static assert.

(3)

Люди недооценивают опасность (даже в случае если точные 64 бита есть) при переносе с платформы на платформу типов которые меняют статус в зависимости от дефайна. Рассмотрим две платформы на одной из которых int64_t определён в int, а на другой в long long. Допустим вы заводите битфилд такого типа. Вы понимаете последствия?

С удовольствием послушаю что вы думаете на эту тему и может быть скорректирую своё мнение. Только пожалуйста вежливо.

#questions
👍27🔥9🤔6🤷‍♂4🤡2🥴2🗿1🤷1
Выложил первую часть многопоточности.

На этой лекции мы выходим на коду нашего курса: многопоточность во всех её проявлениях. Начнём мы с грунтования фундамента и разбора простых и фундаментальных вещей. Что такое область памяти? Что такое поток? Что такое гонка? Зачем нужен volatile? Что такое безопасность относительно многопоточности? Мы ответим на все эти вопросы. Также мы разберём основные проблемы проектирования для многопоточной безопасности: API races и deadlocks.

Сейчас идёт премьера а после её окончания будет доступно видео с разметкой по эпизодам.

https://youtu.be/xTpAJWe7ZD4

#cpp_postgraduate
🔥69👍14❤‍🔥3👏2🫡2👾2🥰1👨‍💻1
Выложил вторую часть многопоточности.

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

https://youtu.be/vVRNJjf1MCE

#cpp_postgraduate
🔥46👍12💅32👎1
Выложил очередную лекцию магистерского курса, посвящённую многопоточным очередям. Это своего рода новация, в прошлом курсе этот материал читался иначе и не в полном объёме. Этой лекцией я искренне горжусь так как в ней есть и драматургия и композиционная согласованность: одно следует из другого, а концовка возвращает к началу.

https://youtu.be/CMnRgnoWzmA

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

#cpp_postgraduate
👍37🔥316
Работа над ошибками (нужна помощь зала).

В комментариях мой уважаемый подписчик Роман Митин указал что я на лекции показал неправильный пример bounded MPMC queue -- на самом деле извлечение и вставка там шли с одного конца и таким образом это был скорее bounded MPMC stack. Для многопоточной среды разница не так велика -- задачи ставятся в "очередь" и разбираются консьюмерами и в общем по циклограмме работы сложно отличить что там было. Но я решил сделать настоящую очередь и заодно улучшить тесты.

И вот тут я обратил внимание что у меня было ещё несколько ошибок, пока в комментариях не замеченных.

(1) В случае multi-producer делать wake_and_done надо на всех продьюсеров один раз иначе бывает так что консьюмеры повыходили но не все продьюсеры ещё закончили.
(2) Саму функцию wait_and_pop надо делать с сигнатурой bool wait_and_pop(T &Data) чтобы понимать есть там что консьюмить или нет
(3) Внутри wait_and_pop условие должно выглядеть так:

CondCons.wait(Lk, [this] { return !empty() || done(); });
if (empty())
return false;

Даже если у нас сигнализирован done, задачи могут быть недоразобраны и поэтому критерий return false это только empty.

(4) Внутри push признак done вообще проверять не надо т.к. это признак отработки всех продьюсеров. Там играет роль только full.
(5) В интерфейсе необходим метод is_empty_and_done() чтобы по нему консьюмеры понимали когда начинать выходить.

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

Полу-финальные версии bounded stack и bounded queue с тестами на то что они не теряют задач я выложил сюда:

https://github.com/tilir/cpp-masters/blob/master/queues/classic_queue.cc
https://github.com/tilir/cpp-masters/blob/master/queues/classic_stack.cc

Нужна помощь зала в проверке не упустил ли я ещё чего-нибудь. Хочу в среду с этого начать лекцию и не хотелось бы облажаться ещё в чём-нибудь столь же тонком.

#questions
👍34🤯10👏4🤨1
Выложил очередную лекцию магистерского курса — первую в длинной серии про атомики. Сейчас начинается премьера, а через полтора часа лекция будет доступна для произвольного просмотра по разметке.

https://youtu.be/JRUbzoVfkkw

На этой лекции мы начнём с обстоятельной работы над ошибками. Надеюсь мне удалось сделать её и увлекательной и поучительной. Ну а дальше всё по обычной схеме. Введение в атомики это классика жанра и что-то там менять только портить. В этом году я заново снял замеры и их можно сравнить с 2019-м, они несколько поменялись (хотя в общем разница между Intel Gen8 и Intel Gen11 не фатальная). Закончим мы разбором thread local переменных.

#cpp_postgraduate
🔥60👏5🦄52👍2👌1
log.txt
12.1 KB
Благодаря моему бывшему студенту и коллеге Саше, который сейчас работает в Канаде, получил возможность поэкспериментировать с ChatGPT4.

Прикладываю лог попытки использовать её для решения на языке C задачи HWF (это задача для первого курса).

user это я.
assistant это нейросеть.

В конце я сдался -- она так и не смогла ничего понять и пройти контест.

#llm
👍60🔥1
Выложил вторую лекцию по атомикам. Искренне ей горжусь так как впервые мне удалось, если можно так выразится, правильно расставить телегу и лошадь. Ранее я методически ориентировался на Саттера с его juggling razor blades, но, как показала практика, Саттер уделяет много внимания более редкой и экзотической проблеме ABA, упуская более распространённую и насущную проблему гонки вокруг удаления в lock-free программах (reclamation problem).

https://youtu.be/hb_kREmFnX0

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

В первые пять минут — ещё раз объяснение про иерархию свободы от блокировок. Никогда не устаю такое объяснять.

#cpp_postgraduate
27🔥24👍9😘2❤‍🔥1
Немного контента для гурманов. Шестой уже по счёту черновик допсеминара для первого курса по лексическому и синтаксическому анализу (рассматривается рекурсивный спуск, изложение на С). В чистовом варианте т.е. с видео и обработанным звуком в публичном доступе планирую в следующем году.

https://youtu.be/pZntrD8a6dc

#c_graduate
🔥39👍96❤‍🔥2🐳1
Выложил финальную лекцию по атомикам. На этой лекции мы завершаем рассмотрение этой огромной темы. Наконец-то мы напишем bounded lock-free queue и снимем замеры. Но до этого нам предстоит разобраться с моделями памяти и теорией относительности. Лекция заканчивается большим списком литературы.

https://youtu.be/Y1q_Z2T2UcE

#cpp_postgraduate
🔥43👍84🏆2
Выложил новую лекцию по C++. На этот раз она посвящена параллелизму.

https://youtu.be/nvjQTt2RM8A

После того как мы выбрались из атомиков, она гораздо более расслабленная. Начнём мы с рассмотрения параллелизма через политики стандартных алгоритмов. Далее исследуем варианты написания собственных параллельных алгоритмов через std::async. Далее нас ждут GPGPU и основы SYCL. В конце придёт время для того чтобы заглянуть в будущее и посмотреть что встретит нас в 2026-м году и далее.

#cpp_postgraduate
🔥51👍6
Это закреплённый пост, начните с его прочтения.

Прецедентные правила канала (просто почитайте и соотнесите с ними то что вы хотите написать): https://t.me/cpp_lects_rus/169

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

Для сбора запросов на новые ветки используйте direct messages на канале, они бесплатны. Информация как их найти тут: https://t.me/cpp_lects_rus/287

На канале введена система тегов для навигации. Ниже теги изложены в алфавитном порядке.

#author_event -- встречи с читателями
#books -- обзоры чужих книг
#c_graduate -- изложение на C для первого курса
#conference -- что-то касающееся конференций в которых я участвую
#combinatorics -- что-то про комбинаторику
#compilers -- алгоритмы оптимизирующей компиляции
#computability -- что-то про вычислимость
#cpp_graduate -- изложение на C++ для второго курса
#cpp_postgraduate -- изложение на C++ для магистратуры
#interview -- интервью со мной в разных местах
#graphics -- что-то про GPU или GPGPU
#happynewyear -- традиционное подведение итогов года
#knuth -- вольные переводы Дональда Кнута
#llm -- общение с микроволновками
#official -- под этим тегом я говорю от своего лица, обычно какие-то технические вещи и объявления
#publications -- публикации в научных журналах и не только
#riscv — нечто про открытую и расширяемую архитектуру RISC-V
#talks -- обзоры чужих докладов
#toolchain -- что-то про системы компиляции, а также ассемблеры линкеры и всё такое
#torrent -- публичная выкладка пакетами
#questions -- предложения что-то обсудить

Размечены все существующие посты. Если найдёте ошибки в разметке сообщайте.

Ютуб-канал с моими лекциями: https://www.youtube.com/@tilir
Рутуб-канал с ними же: https://rutube.ru/u/cpplectsrus/

Курс по языку C: https://youtube.com/playlist?list=PL3BR09unfgchRxdDws74aY4mlSk9eYGEs
Базовый курс по C++: https://www.youtube.com/playlist?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK
Магистерский курс по C++: https://www.youtube.com/playlist?list=PL3BR09unfgcgf7R88ZQRQqWOdLy4pRW2h
Оптимизирующие компиляторы: https://www.youtube.com/playlist?list=PL3BR09unfgcjBG1H9xRUesaQX6nCsobs1

#official
🔥107👍346❤‍🔥6
C++ and other lectures pinned «Это закреплённый пост, начните с его прочтения. Прецедентные правила канала (просто почитайте и соотнесите с ними то что вы хотите написать): https://t.me/cpp_lects_rus/169 В качестве технического дополнения: пожалуйста не оставляйте в группе канала постов…»
Всем привет. И снова настало время обратиться за небольшой помощью к залу.

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

И вот я подумал почему бы не попросить картинку у нейросети. Я использовал Кандинского 2.1 и пытался формулировать запросы.

Запросы были такие: "три котёнка в трубе", "три котёнка ползут по трубе", "три котёнка внутри трубы". Я сгенерировал наверное изображений тридцать, прикладываю три самых симпатичных. Но это всё не то.

Мне нужна картинка как три котёнка ползут внутри лежащей на земле трубы по одному.

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

UPD: результаты конкурса https://t.me/cpp_lects_rus/173

#llm #questions
😁42👍12🔥9💔1
Channel photo updated