Лекция 12. Барьеры памяти. Модели памяти

Поделиться
HTML-код
  • Опубликовано: 17 ноя 2024

Комментарии • 8

  • @FujiSnail
    @FujiSnail 2 месяца назад

    Теперь когда меня на собеседовании спросят про volatile я перескажу эту лекцию)

  • @user-NgmYyoIOU
    @user-NgmYyoIOU 5 лет назад +4

    наконец то хорошее объяснение на русском

  • @axrorxojayodgorov3416
    @axrorxojayodgorov3416 2 года назад

    какой мошный урок, столко нового узнал, вот был бы шанс удаленна учиться в этом курсе :)

  • @anton_98
    @anton_98 4 года назад +1

    Не понятно почему между отправкой запроса invalidate и его приемом на втором ядре проходит так много операций. Это разве нормально иметь такую задержку во взаимодействии ядер?

  • @daniyarkhairutdinov5275
    @daniyarkhairutdinov5275 4 года назад +1

    Добавьте видео на страницу курса

  • @FilenkovMaxim
    @FilenkovMaxim 4 года назад +1

    Некрокомментарий (в надежде, что может быть кто-то ответит).
    Евгений, во-первых, спасибо большое за лекции. Очень интересные.
    Вопрос следующий. Почему проектировщики решили работать со сложными барьерами, вместо того чтобы заставить ядро при обращении к линии в статусе Shared проверять Invalidated queue на присутствие в ней этой линии? Издержки на проверку слишком высокие и превышают замедление всех учавствующих ядер?
    В вашем примере это было бы так:
    Тайминг 16:09 - выполняется assert(a==1) вот здесь ядро сначала смотрит в Invalidated queue, видит там запрос на инвалидацию "a", выполняет его и проблемы нет, не так ли? Остальные ядра при этом работают и никого не ждут.
    Попутно устранилась бы протечка абстракции наверх и сильно бы упростилась жизнь на верхних уровнях. Например проблема с futex_wait() просто бы не возникла. Мне кажется по цене выигрыша решение стоит некоторого замедления одного ядра?

    • @JohnWickMovie
      @JohnWickMovie 2 года назад

      Пример довольно абстрактный, возможно в некоторых архитектурах оно так и происходит либо не соотносится с реальностью + не забывай что современные CPU,
      суперскалярные и могут выполнять сразу несколько инструкций одновременно (Instuction Level Parallelism)
      Пример который описан не происходит на архитектурах со стронг моделью памяти как например x86