024. Модель памяти C++ - Андрей Янковский
HTML-код
- Опубликовано: 21 янв 2015
- Подробнее о С++ Party events.yandex.ru/events/cpp-p...
В докладе Андрей расскажет о моделях памяти различных процессоров, о тонкостях реализации неблокирующих алгоритмов и о том, какое отношение всё это имеет к С++.
Большое спасибо! Очень помогло в понимании вопроса.
Все чотко и понятно. Спасибо за доклад
Спасибо за лекцию
Спасибо очень интересная информация
Большое спасибо, Андрей! Уверен, даже Энтони Уильямсу не помешало бы посмотреть это перед тем, как выпускать очередное издание книги "C++ Concurrency in Action" :) Вначале - зачем, и только потом как. После этого всё ложится по полочкам.
очень круто! Помогло, спасибо!!
1 момент: в примере 3 на 20:54 опечатка. подшаманивать надо CPU1, а не CPU0
Круто, спасибо. Читал Энтони Уильямса, описание казалось несколько размытым. Здесь все по полочкам.
Спасибо за прояснение ;)
Доходчиво! Спасибо!
Красава! Я столько прочитал про это, чтобы хоть как-то понять и разобраться в модели памяти. А ты за 40 минут все четко разъяснил.
Сергей, спасибо за фидбек! Рады, что доклад Андрея оказался для вас полезным 🤝
да, очень толково
Наконец-то спикер без деффектов речи и волнуещегося голоса. Топич
соотношение сторон для эстетов?
32:40 На одноядерных процессорах тоже были проблемы с многопоточностью - процессор так же мог переставить операции, а ОС могла в неудачный момент передать управление другому потоку.
Я не очень часто пишу на С++, но почему-то смотрю)
это у вас врождённая тяга к истине
Из определения Acquire следует что операции после барьера можно перекидывать наверх и ставить после последней операции чтения ? Может быть, оно так не работает, но определение не запрещает этого?
Только не понял, почему мъютекс остался даже после описания модели памяти
Аааа как с этим жить..
19:12 как инструкция может попасть выше, то есть за пределы самого условия IF? это же уже нарушение логики алгоритма
Чем отличаются memory_order_seq_cst и memory_order_acq_rel?
В первом случае инструкции выполняются в том порядке в котором они в программе, во втором случае блок между акуре-релиз будет выполнятся в том порядке что есть и без забрасывания записи наверх перед акуром. Соответствеено инструкции вне блока могут перемещаться процессором и компилятором
Савельев:"Компьютерные мальчики"
что то я не понимаю, разве программа не выполняется сверху вниз? почему процессор путает местами порядок выполнения команд?
Если не поставить барьеры то пограмма может выполнится из конца в начало. Закончится выполнение ровно на точке входа main. Будьте осторожны!
6:00 Это неправильный singleton, начиная с С++11 его надо делать через static переменную и без мьютексов. Получается это синтетический пример того как делать не надо, что Ок в контексте выступления.
очень интересно, но ничего не понял....
и чем птред удобен или непереносим? это ка5к раз единственный стандарт который есть ...
просто божественно! дикий контраст с джавистами, которые любят рассказывать свою элитарную муть про memory model по 2 часа с нулевым итогом для понимания!
Я более чем уверен что если бы парень писал на джаве, обьяснил бы также ясно. При чём тут язык программирования к стилю ведения доклада?
псс, суть в том что плюсовики обычно досконально понимают низкоуровневые вещи ибо это критично ибо важна производительность. Поэтому у плюсовиков более простым языком изложены вещи про память, кэши процессора, предсказания переходов и прочее прочее, а самое главное при этом не теряется вся высокоуровневая магия.
Меня выгнали из джава, когдя я им начал толковать как написать сборщик мусора в режиме ядра
@@user-qKjP откуда выгнали?)
@@x-path точнее не смог пройти интервью. Им нужна вера, что джава - это hi performance. А я не уверовал
когда я пишу комментарий я немного чувствую себя многопоточным, пшиешь пишешь много текста, а оказывается некоторые независимые от контектса буквы в слове меняются местами, и замечаешь это не сразу :)
судя по докладу программы вообще не должны работать, так как процессор постоянно путает порядок выполнения
Кроме x86))
Ребята, почитайте литературу Pentium IV, работа с конвеером хеш (там некоторые команды выполняются на перед, там используются вероятностные методы выполнения операций бинарных и унарных .... т... действий , потом обратная польская нотация, но это старый процессор. В новых, как это работает я не видел.
Ведение атомиков в цпп было ошибкой. Контроль когерентности памяти не решает всех проблем связанных с "атомарными операциями" в многопроцессорных системах. Натянули сову на глобус как всегда.
Не решает всех проблем - да. "Атомики были ошибкой" - безусловно нет. Глобус - только в вашем воображении, у атомиков есть своя важная роль, даже когда они не решают всё.
Сначала добивались самой оптимальной оптимизации, теперь ломают голову, как же ее отключить. Идиёты
А вы знали, что ++ оператор есть в чистом С? :)
Интересно, а чем новеньким порадуют нас разработчики стандарта С++ 20 ?
Очень не терпится узнать !
C++ 17 большинство разработчиков уже освоили, это вчерашний день, это школоте мозги разминать перед контрольной по информатике ... .
Может быть в C++ 20 наконец то появится что-нибудь для настоящих матёрых программистов, а не для школоты ?
Это я прикалываюсь, конечно ... .
А если серьёзно,
что то C++ сильно разогнался с новыми стандартами в языковом синтаксическом сахаре, как бы "с рельс не сошёл" на такой скорости ... .
Ладно, прикалываемся дальше ... .
C++ 11 это уже позавчерашний день, этот стандарт уже старушки на лавочках днём обсуждают ... ! А по вечерам 10-ти летних внуков C++ 11 обучают !
А ВЫ хорошо знаете C++ 11 ?
@@addressmodel2121 мы еще третий используем, лет через двадцать на 11 перейдем
Общая теория типов, и интерпретатор Haskell в compile time
А Вы знаете что .net framework написан на языке C, а не на C++ ?
А знаете что основная часть кода ядра, и 80 % кода системных сервисов Windows 10 - это тоже на чистом СИ без плюсОв ?
А знаете что если принять на работу психологически вменяемых людей с реальным высшим образованием в области информатики и программирования,
то они на СИ пишут быстрее и качественнее чем на C++ ?
верится с трудом
@@Pafnut01,
вы шутите что ли про то что вам "верится с трудом" ?
Информация о языке "Си без плюсов" как основном языке программирования базовых системных модулей есть в интернете в широком доступе. В Википедии про это много написано, и на других ресурсах тоже. Ну вообщем, захотите - найдёте информацию про это.
@@addressmodel2121 Что какая-то часть ядра и сервисов написана на чистом Си, это факт. Я просто про > 80% не уверен и инфы про это в Википедии не нашёл. Может, Вы дадите ссылочку?
@@Pafnut01 ,
давайте сначала определимся, что считать за ядро:
- код реализации Native API - это ядро ?
- системные сервисы - это ядро ?
- фоновый процесс "бездействие системы" - это ядро ?
+ обработчики прерываний - это точно ядро !
+ программные прерывания и их планировщик - это точно ядро !
+ механизмы отложенных процедур - это точно ядро ! (это такая реал-тайм корпоративная многозадачность внутри ядра)
Ответ на ваш вопрос про проценты будет зависеть от того, что МЫ договоримся считать ядром ... .
@@Pafnut01 ,
ссылочка на другом компе, пока не могу дать ...
Вижу яндекс и ставлю сразу дизлайк.
наверное ты дурачок просто =)
@@Airaleais ты сам кто? Почему на ютубе отвечают только на самые неважные для меня комментарии, а на важные, не для дураков, реакции никакой?))
@@Airaleais Распределение памяти я доверяю компилятору. Бред этот слушать надобности не вижу. С памятью я могу работать и со своих программ.
@@Русь-Родина ну вот видишь какое ты глупое ламо, и судя по всем даже ролик не посмотрел, а уже все решил, я такой же был =) лет в 6