Ещё один вопрос по диапазонам. Надеюсь после моей лекции все устыдились и ответы будут обстоятельными и интересными.
Есть код:
struct S { int x, y; };
std::vector<S> v{{1, 0}, {2, 0}, {4, 0}};
auto it = ranges::find(v | views::transform(std::mem_fn(&S::x)), 4).base();
Что тут происходит: я проецирую вектор на инты, ищу там 4 и прошу итератор (base) на исходный вектор.
https://godbolt.org/z/hhWaPsjsj
Он не работает, но GCC и ToT Clang говорят разные вещи.
У clang там просто ranges::dangling (хотя как может провиснуть итератор на существующий вектор?)
У gcc там нечто более интересное.
Опять таки исходный библиотечный код один и тот же. Как бы вы это исследовали? Кто тут прав?
#questions
Есть код:
struct S { int x, y; };
std::vector<S> v{{1, 0}, {2, 0}, {4, 0}};
auto it = ranges::find(v | views::transform(std::mem_fn(&S::x)), 4).base();
Что тут происходит: я проецирую вектор на инты, ищу там 4 и прошу итератор (base) на исходный вектор.
https://godbolt.org/z/hhWaPsjsj
Он не работает, но GCC и ToT Clang говорят разные вещи.
У clang там просто ranges::dangling (хотя как может провиснуть итератор на существующий вектор?)
У gcc там нечто более интересное.
Опять таки исходный библиотечный код один и тот же. Как бы вы это исследовали? Кто тут прав?
#questions
🤔14👍1👀1
Я и не заметил, что у меня тысяча подписчиков в телеграме. Всем спасибо, это важная веха для моего телеграм-канала. Расскажите, а вы хотите приуроченный к этому числу специальный выпуск и если да то о чём? Можете писать в комментарии темы или лайкать написанные. До НГ не обещаю, но всё возможно ))
#official
#official
🎉126🍾13❤5🔥4👍2🐳2
Итак, последняя в этом семестре лекция магистерского курса.
Мне кажется что наконец-то я рассказал диапазоны правильно. Поговорим о кешировании, pull model и её проблемах, константной итерируемости и многом другом. Также заглянем внутрь некоторых нетривиальных отображений.
https://youtu.be/CVMDB3c3too
#cpp_postgraduate
Мне кажется что наконец-то я рассказал диапазоны правильно. Поговорим о кешировании, pull model и её проблемах, константной итерируемости и многом другом. Также заглянем внутрь некоторых нетривиальных отображений.
https://youtu.be/CVMDB3c3too
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 14. Диапазоны, часть 2
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
Вторая часть лекции про диапазоны сосредоточена вокруг pull model и того как работают более сложные -- фильтрующие, трансформирующие и тому подобные отображения.…
Вторая часть лекции про диапазоны сосредоточена вокруг pull model и того как работают более сложные -- фильтрующие, трансформирующие и тому подобные отображения.…
🔥41👍5👏3❤2❤🔥1
Итогов 2022 года пост.
Несмотря на некоторые всем известные обстоятельства, мне, кажется, удалось много.
1. Я записал вторую часть бакалаврского курса: https://www.youtube.com/playlist?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK
Громадное спасибо Дмитрию Рябцеву и Владиславу Белову, без них это было бы невозможно.
2. Я записал первую часть нового магистерского курса: https://www.youtube.com/playlist?list=PL3BR09unfgcgf7R88ZQRQqWOdLy4pRW2h
Громадное спасибо Юлию Тарасову, без него это было бы невозможно.
Также спасибо компании Синтакор и группе компаний Yadro которые не просто взяли мою команду на работу, но и разрешили мне продолжать выделять время на преподавание, выделили аудиторию в офисе, помогли с кафедрой в МФТИ и даже набрали несколько новых студентов этого года в интерны.
Кроме того в этом году я впервые выступил на C++Russia: https://www.youtube.com/watch?v=YJd6Ig4ihJ0&t=75s
И записал допглавы к этому выступлению: https://www.youtube.com/watch?v=-aE1hD9OWRk
Также я заснял ряд дополнительных видео. Особенно удачным, как мне кажется, получился допсеминар про SIMD: https://youtu.be/DHai10xqySU
В новом году хочется всем пожелать быстрого появления 23-го стандарта в компиляторах и много новых интересных задач. Пусть программирование и математика сплачивают нас даже там, где политика разделяет.
В комментариях можно и нужно поздравлять с Новым Годом меня и друг друга и вспоминать чем он вам запомнился в профессиональном плане, но пожалуйста давайте не трогать политику и религию )))
#official #happynewyear
Несмотря на некоторые всем известные обстоятельства, мне, кажется, удалось много.
1. Я записал вторую часть бакалаврского курса: https://www.youtube.com/playlist?list=PL3BR09unfgciJ1_K_E914nohpiOiHnpsK
Громадное спасибо Дмитрию Рябцеву и Владиславу Белову, без них это было бы невозможно.
2. Я записал первую часть нового магистерского курса: https://www.youtube.com/playlist?list=PL3BR09unfgcgf7R88ZQRQqWOdLy4pRW2h
Громадное спасибо Юлию Тарасову, без него это было бы невозможно.
Также спасибо компании Синтакор и группе компаний Yadro которые не просто взяли мою команду на работу, но и разрешили мне продолжать выделять время на преподавание, выделили аудиторию в офисе, помогли с кафедрой в МФТИ и даже набрали несколько новых студентов этого года в интерны.
Кроме того в этом году я впервые выступил на C++Russia: https://www.youtube.com/watch?v=YJd6Ig4ihJ0&t=75s
И записал допглавы к этому выступлению: https://www.youtube.com/watch?v=-aE1hD9OWRk
Также я заснял ряд дополнительных видео. Особенно удачным, как мне кажется, получился допсеминар про SIMD: https://youtu.be/DHai10xqySU
В новом году хочется всем пожелать быстрого появления 23-го стандарта в компиляторах и много новых интересных задач. Пусть программирование и математика сплачивают нас даже там, где политика разделяет.
В комментариях можно и нужно поздравлять с Новым Годом меня и друг друга и вспоминать чем он вам запомнился в профессиональном плане, но пожалуйста давайте не трогать политику и религию )))
#official #happynewyear
❤83🎉36👍20🍾15🔥6🎄4⚡1🕊1💯1
Выложил видео про twin trees.
https://youtu.be/JoaNcwBVDGE
Он продолжает традицию пересказов лекций Дональда Кнута. Я объясняю всё что нужно знать предварительно и показываю что-то связанное с реализацией. Получается в ту же тему но другой рассказ, более доступный для аудитории если это студенты.
В данном случае я очень горжусь тем что сохранил и даже усилил драматургию: лекция выстроена в виде расследования и в конце всех ждёт внезапный срыв покровов.
Оригинал лекции от проф. Кнута можно найти здесь: https://www.youtube.com/watch?v=zg6YRqT4Duo
#knuth #cpp_graduate
https://youtu.be/JoaNcwBVDGE
Он продолжает традицию пересказов лекций Дональда Кнута. Я объясняю всё что нужно знать предварительно и показываю что-то связанное с реализацией. Получается в ту же тему но другой рассказ, более доступный для аудитории если это студенты.
В данном случае я очень горжусь тем что сохранил и даже усилил драматургию: лекция выстроена в виде расследования и в конце всех ждёт внезапный срыв покровов.
Оригинал лекции от проф. Кнута можно найти здесь: https://www.youtube.com/watch?v=zg6YRqT4Duo
#knuth #cpp_graduate
YouTube
Деревья-близнецы (доп. семинар для второго курса)
Специальные выпуски о комбинаторике.
Дополнительный семинар, когда сессия уже (почти) сдана, а семестр ещё далеко -- самое время поговорить об отвлеченных вещах. Например о деревьях-близнецах. Мы рассмотрим перестановки, Бакстеровские перестановки, планирование…
Дополнительный семинар, когда сессия уже (почти) сдана, а семестр ещё далеко -- самое время поговорить об отвлеченных вещах. Например о деревьях-близнецах. Мы рассмотрим перестановки, Бакстеровские перестановки, планирование…
🔥59👍16❤3🫡3🥰1👏1
Мой доклад на C++ Russia уже утвердили. Составьте мне компанию. Я уверен вам есть что рассказать. Если что спрашивайте в комментарии или можете кидать туда же идеи для своих выступлений, обсудим. Я конечно не в программном комитете, но я думаю я понимаю их логику ))
#conference
#conference
❤19👍4
Forwarded from C++ user group moscow
Приглашаем вас выступить на конференции C++ Russia 2023!
В этом году конференция будет идти четыре дня: 11–12 мая в онлайне и 23–24 мая в офлайне в Москве. И вы можете выступить на ней.
Что даст выступление на C++ Russia?
— Развитие личного бренда и улучшение навыка публичных выступлений.
— Возможность обсудить рабочие задачи в неформальной обстановке.
— Билет на все конференции весны от JUG Ru Group.
— Общение с комьюнити и экспертами Программного комитета.
Можно выбрать любой формат — классический доклад, воркшоп, дискуссию или предложить что-нибудь свое. Вам помогут подготовиться, проведут репетиции, а после конференции вы получите запись в 4K на YouTube, чтобы поделиться ей с друзьями и коллегами.
Выбирайте тему на сайте или предлагайте свои идеи и подавайте заявку на выступление до 20 февраля.
Билеты на C++ Russia 2023 уже в продаже.
В этом году конференция будет идти четыре дня: 11–12 мая в онлайне и 23–24 мая в офлайне в Москве. И вы можете выступить на ней.
Что даст выступление на C++ Russia?
— Развитие личного бренда и улучшение навыка публичных выступлений.
— Возможность обсудить рабочие задачи в неформальной обстановке.
— Билет на все конференции весны от JUG Ru Group.
— Общение с комьюнити и экспертами Программного комитета.
Можно выбрать любой формат — классический доклад, воркшоп, дискуссию или предложить что-нибудь свое. Вам помогут подготовиться, проведут репетиции, а после конференции вы получите запись в 4K на YouTube, чтобы поделиться ей с друзьями и коллегами.
Выбирайте тему на сайте или предлагайте свои идеи и подавайте заявку на выступление до 20 февраля.
Билеты на C++ Russia 2023 уже в продаже.
👍29👏2🥰1
Выложил лекцию по полиморфным аллокаторам. Отмотаем плёнку и попробуем выйти из тупика и изобрести аллокаторы ещё раз. Что то в процессе получится, что-то нет...
https://youtu.be/QwuHX-VjhXI
#cpp_postgraduate
https://youtu.be/QwuHX-VjhXI
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 16. Полиморфные аллокаторы
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
Лекция о полиморфных аллокаторах делает шаг назад. Мы снова начнём сначала, но на этот раз пойдём другим путём -- путём стирания типов и динамического…
Лекция о полиморфных аллокаторах делает шаг назад. Мы снова начнём сначала, но на этот раз пойдём другим путём -- путём стирания типов и динамического…
🔥47👏6👍2🫡1
Выложил лекцию по умным указателям. Я очень старался не растягивать её в этом году на две части т. к. для магистрантов там не слишком много новизны. Поэтому некоторые вещи я пробежал очень быстро. Но при этом я также постарался её реорганизовать во-первых в явном виде рассмотрев и описав альтернативы владения, и вот тут я времени не жалел так как это очень важно. А во-вторых я связал её с аллокаторами и добавил систематический разбор "Санкелевских" кейсов.
https://www.youtube.com/watch?v=OzqFXMDrrgk
#cpp_postgraduate
https://www.youtube.com/watch?v=OzqFXMDrrgk
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 17. Умные указатели.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
Мы начнём с фундаментальной проблемы: проблемы владения. В современном C++ есть пять разумных альтернатив для её решения, и эта лекция посвящена разбору…
Мы начнём с фундаментальной проблемы: проблемы владения. В современном C++ есть пять разумных альтернатив для её решения, и эта лекция посвящена разбору…
🔥57👍12👏3❤2🙏2🐳2🕊1🌭1
Технический опрос. Давайте проголосуем какой звук вам больше нравится?
Final Results
33%
Стерео с ревербацией как в лекции по умным указателям.
67%
Моно как в лекции по полиморфным аллокаторам.
🤡2🙏1🕊1💔1
Выложил лекцию по динамическому полиморфизму.
https://youtu.be/_Jn7MAZYL2M
Я долго ходил вокруг неё кругами и думал включать или нет в магистерский курс. В прошлом году попробовал прочитать не под запись, но тогда она скорее провалилась. Последний толчок был дан благодаря моему подписчику Нику Келбону, показавшему мне библитотеку AnyAny своего авторства: https://github.com/kelbon/AnyAny
Я посмотрел и я понял что теперь я могу что-то рассказывать.
#cpp_postgraduate
https://youtu.be/_Jn7MAZYL2M
Я долго ходил вокруг неё кругами и думал включать или нет в магистерский курс. В прошлом году попробовал прочитать не под запись, но тогда она скорее провалилась. Последний толчок был дан благодаря моему подписчику Нику Келбону, показавшему мне библитотеку AnyAny своего авторства: https://github.com/kelbon/AnyAny
Я посмотрел и я понял что теперь я могу что-то рассказывать.
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 18. Динамический полиморфизм.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
На этой лекции мы поговорим о неудобной и в чём-то даже неуютной теме -- динамическом полиморфизме в C++. Мы рассмотрим несколько альтернатив, включая…
На этой лекции мы поговорим о неудобной и в чём-то даже неуютной теме -- динамическом полиморфизме в C++. Мы рассмотрим несколько альтернатив, включая…
🔥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
Пока что моё нынешнее личное отношение такое: 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
На этой лекции мы выходим на коду нашего курса: многопоточность во всех её проявлениях. Начнём мы с грунтования фундамента и разбора простых и фундаментальных вещей. Что такое область памяти? Что такое поток? Что такое гонка? Зачем нужен volatile? Что такое безопасность относительно многопоточности? Мы ответим на все эти вопросы. Также мы разберём основные проблемы проектирования для многопоточной безопасности: API races и deadlocks.
Сейчас идёт премьера а после её окончания будет доступно видео с разметкой по эпизодам.
https://youtu.be/xTpAJWe7ZD4
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 19. Многопоточность, часть 1.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
На этой лекции мы выходим на коду нашего курса: многопоточность во всех её проявлениях. Начнём мы с грунтования фундамента и разбора простых и фундаментальных…
На этой лекции мы выходим на коду нашего курса: многопоточность во всех её проявлениях. Начнём мы с грунтования фундамента и разбора простых и фундаментальных…
🔥69👍14❤🔥3👏2🫡2👾2🥰1👨💻1
Выложил вторую часть многопоточности.
В ней мы должны познакомиться со всем находящимся в наших руках классическим инструментарием (пока не залезая внутрь него). В первую очередь мы рассмотрим одноразовую инициализацию и разберём известный антипаттерн double-checked lock. Далее мы перейдём к идее условных переменных и введём понятия uniuque_lock, нотификаций и внезапных пробуждений. Потом нас ждёт много попыток понять что же происходит в нашем многопоточном приложении. Ну и под конец мы зароемся глубже в разделяемые и прочие виды блокировок.
https://youtu.be/vVRNJjf1MCE
#cpp_postgraduate
В ней мы должны познакомиться со всем находящимся в наших руках классическим инструментарием (пока не залезая внутрь него). В первую очередь мы рассмотрим одноразовую инициализацию и разберём известный антипаттерн double-checked lock. Далее мы перейдём к идее условных переменных и введём понятия uniuque_lock, нотификаций и внезапных пробуждений. Потом нас ждёт много попыток понять что же происходит в нашем многопоточном приложении. Ну и под конец мы зароемся глубже в разделяемые и прочие виды блокировок.
https://youtu.be/vVRNJjf1MCE
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 19. Многопоточность, часть 2.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
Продолжая многопоточность мы теперь должны познакомиться со всем находящимся в наших руках инструментарием. В первую очередь мы рассмотрим одноразовую…
Продолжая многопоточность мы теперь должны познакомиться со всем находящимся в наших руках инструментарием. В первую очередь мы рассмотрим одноразовую…
🔥46👍12💅3❤2👎1
Выложил очередную лекцию магистерского курса, посвящённую многопоточным очередям. Это своего рода новация, в прошлом курсе этот материал читался иначе и не в полном объёме. Этой лекцией я искренне горжусь так как в ней есть и драматургия и композиционная согласованность: одно следует из другого, а концовка возвращает к началу.
https://youtu.be/CMnRgnoWzmA
Мы начнём с разговора о ментальной модели мьютекса. Далее мы попробуем собрать из имеющегося инструментария очередь, убедимся что у нас остались проблемы, решим их и соберём ещё одну. Далее мы сделаем важнейший шаг перейдя от очереди данных к очереди упакованных задач. Для этого нам придётся наладить каналы коммуникации с потоками, познакомиться с маршалингом исключений и рассмотреть несколько новых концепций по дороге. Но в итоге мы придём к цели. Или почти придём, следите за руками.
#cpp_postgraduate
https://youtu.be/CMnRgnoWzmA
Мы начнём с разговора о ментальной модели мьютекса. Далее мы попробуем собрать из имеющегося инструментария очередь, убедимся что у нас остались проблемы, решим их и соберём ещё одну. Далее мы сделаем важнейший шаг перейдя от очереди данных к очереди упакованных задач. Для этого нам придётся наладить каналы коммуникации с потоками, познакомиться с маршалингом исключений и рассмотреть несколько новых концепций по дороге. Но в итоге мы придём к цели. Или почти придём, следите за руками.
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 20. Очереди.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
На прошлой лекции мы рассмотрели большую часть нашего инструментария. Давайте попробуем собрать из него очередь, убедиться что у нас остались проблемы…
На прошлой лекции мы рассмотрели большую часть нашего инструментария. Давайте попробуем собрать из него очередь, убедиться что у нас остались проблемы…
👍37🔥31❤6
Работа над ошибками (нужна помощь зала).
В комментариях мой уважаемый подписчик Роман Митин указал что я на лекции показал неправильный пример 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
В комментариях мой уважаемый подписчик Роман Митин указал что я на лекции показал неправильный пример 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
https://youtu.be/JRUbzoVfkkw
На этой лекции мы начнём с обстоятельной работы над ошибками. Надеюсь мне удалось сделать её и увлекательной и поучительной. Ну а дальше всё по обычной схеме. Введение в атомики это классика жанра и что-то там менять только портить. В этом году я заново снял замеры и их можно сравнить с 2019-м, они несколько поменялись (хотя в общем разница между Intel Gen8 и Intel Gen11 не фатальная). Закончим мы разбором thread local переменных.
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 21. Атомики, часть 1.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
Эту лекцию начинает долгая работа над ошибками. Мы ещё раз вернёмся к обычным очередям и разберём ошибки и проблемы проектирования в них, включая очень…
Эту лекцию начинает долгая работа над ошибками. Мы ещё раз вернёмся к обычным очередям и разберём ошибки и проблемы проектирования в них, включая очень…
🔥60👏5🦄5❤2👍2👌1
log.txt
12.1 KB
Благодаря моему бывшему студенту и коллеге Саше, который сейчас работает в Канаде, получил возможность поэкспериментировать с ChatGPT4.
Прикладываю лог попытки использовать её для решения на языке C задачи HWF (это задача для первого курса).
user это я.
assistant это нейросеть.
В конце я сдался -- она так и не смогла ничего понять и пройти контест.
#llm
Прикладываю лог попытки использовать её для решения на языке 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
https://youtu.be/hb_kREmFnX0
Начнём мы с того, что погрузимся в неприятные части атомиков. Начав с рассмотрения уже знакомых нам проблем проектирования, таких как API races (а также посмотрев способ их решения через формальные методы), мы пойдём к более сложным и специфичным проблемам. Первая такая проблема это и будет тот самый reclamaition -- ранний отзыв указателя. Вторая проблема это ABA. Мы поговорим о том какими способами (как аппаратными так и на уровне языка) мы решаем такие проблемы. Закончим мы тем, что потрогаем вопросы переупорядочения.
В первые пять минут — ещё раз объяснение про иерархию свободы от блокировок. Никогда не устаю такое объяснять.
#cpp_postgraduate
YouTube
Магистерский курс C++ (МФТИ, 2022-2023). Лекция 21. Атомики, часть 2.
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.
На этой лекции мы погрузимся в неприятные части атомиков: начав с рассмотрения уже знакомых нам проблем проектирования, таких как API races (а также посмотрев…
На этой лекции мы погрузимся в неприятные части атомиков: начав с рассмотрения уже знакомых нам проблем проектирования, таких как API races (а также посмотрев…
❤27🔥24👍9😘2❤🔥1
Немного контента для гурманов. Шестой уже по счёту черновик допсеминара для первого курса по лексическому и синтаксическому анализу (рассматривается рекурсивный спуск, изложение на С). В чистовом варианте т.е. с видео и обработанным звуком в публичном доступе планирую в следующем году.
https://youtu.be/pZntrD8a6dc
#c_graduate
https://youtu.be/pZntrD8a6dc
#c_graduate
YouTube
Грамматики и языки с примерами на C
Допсеминар для первого курса. Общая теория и немного примеров. Видимо final draft перед записью для канала.
🔥39👍9❤6❤🔥2🐳1