Практика языка C (МФТИ, 2023-2024). Семинар 7.1. Кеши и немного о бенчмаркинге.

Поділитися
Вставка
  • Опубліковано 21 тра 2024
  • Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
    На этом занятии мы погрузимся в реальный мир. Начнём с простого бенчмаркинга и особенностей поведения оптимизирующих компиляторов, разберёмся с макросами, а потом встанем перед загадкой связанной с произведением матриц и решим её.
    Семинарист: Константин Владимиров.
    Дата: 1 апреля 2024 года.
    Съёмка: Марк Гончаров.
    Звук: Юлий Тарасов.
    Предыдущий семинар: • Практика языка C (МФТИ...
    Следующий семинар: • Практика языка C (МФТИ...
    Слайды к занятиям: cs.mipt.ru/wp/?page_id=7775
    Примеры кода: github.com/tilir/c-graduate
    Задачник: olymp1.vdi.mipt.ru/
    Timeline
    00:00 As if rule и оптимизации
    13:04 Макросы
    21:32 Бенчмаркинг
    27:45 Загадочный эксперимент
    34:04 Немного о памяти
    41:34 Локальность данных
    54:27 Время ставить опыты
    01:13:20 Кеш как структура данных
    01:31:31 Небольшой тизер
    Errata
    * Тут пока пусто

КОМЕНТАРІ • 34

  • @sibedir
    @sibedir Місяць тому +8

    Клиффхэнгер про конвейеры в конце был зачётный 😊
    Сюжет этих лекций не отпускает ни на секунду

  • @egor_neo
    @egor_neo Місяць тому +9

    Подписывайтесь и ставьте лай.. Подписывайтесь и ставьте лайки!

  • @johndick996
    @johndick996 Місяць тому +16

    Константин, большое спасибо за Ваш труд!

  • @Igor_Parfenov
    @Igor_Parfenov 26 днів тому

    1:10:26
    Данный пример также хорошо демонстрирует тот факт, что L3-кэш общий для всех ядер. Поэтому к моменту, когда наблюдаемое ядро вернется за следующим блоком информации, этот блок уже может отсутствовать вследствие работы другого ядра.

  • @exx-ns4tt
    @exx-ns4tt Місяць тому +4

    И снова лай за ранее)

  • @yarburart7242
    @yarburart7242 Місяць тому +3

    Повезло сегодня с ютубчиком

  • @ElectroMan_86
    @ElectroMan_86 Місяць тому +1

    Константин, благодарю за Ваши труды.

  • @Be3y4uuK0T
    @Be3y4uuK0T Місяць тому

    Супер! Спасибо за такой ценный труд! Очень жду продолжения. Было бы очень круто побольше примеров как это эффективно использовать, код до и код после, как с перемножением матриц!

  • @ruslankhl
    @ruslankhl Місяць тому

    Огромное спасибо!

  • @user-ir4fc5kp8p
    @user-ir4fc5kp8p Місяць тому

    Браво! Огромное спасибо!

  • @user-un4sl5md6t
    @user-un4sl5md6t 26 днів тому +1

    36:30 небольшая оговорочка -- разряжаются конденсаторы, а не транзисторы

    • @tilir
      @tilir  26 днів тому

      Да спасибо. Смешная оговорка. Конечно я имел в виду конденсатор.

  • @zaebalivse
    @zaebalivse Місяць тому +1

    Надеюсь студенты запомнили про политику вытеснения. На первой лекции по плюсам им пригодится😅

    • @tilir
      @tilir  Місяць тому +2

      У них на последнем занятии защита проекта. Запомнят все ))

  • @AlexSav
    @AlexSav Місяць тому +2

    1:33:40 В программе ошибка, мы не добавляем в сумму, а переписываем сумму значением из массива

    • @tilir
      @tilir  Місяць тому +2

      Да смешно получилось, спасибо за наблюдательность. Но с другой стороны вряд ли это влияет на суть примера ))

  • @johoaprl2505
    @johoaprl2505 Місяць тому +1

    С!!!!!

  • @mod3528
    @mod3528 Місяць тому

    branchless код и математика указателей

  • @nikitaq123
    @nikitaq123 Місяць тому

    А чем valgrind лучше санитайзеров (asan, ubsan, etc)?

    • @tilir
      @tilir  Місяць тому +1

      Валгринд не сравним с ubsan, это тёплое против мягкого, т.к. ub будет ub и под валгриндом (и конечно никак им не диагностируется).
      А вот asan и даже asan + memsan он сильно превосходит в точности диагностики, проигрывая в скорости работы, т.к. там разные механизмы проверки.

  • @dashberlin6682
    @dashberlin6682 Місяць тому

    Правильно ли я понимаю что массивы, какими они не были большими или маленькими, всегда хранятся в RAM, и когда идёт чтение, то массив забрасываеться в кеши, и после выполнения идёт перезаписываться обратно в RAM. Имеется ввиду, то что кеши не являются плацдармом для постоянного хранения памяти?

    • @tilir
      @tilir  Місяць тому

      Если что то кеширована в кеше лежит копия. Когда она вытесняется из кеша туда кладётся копия для чего то нового (скажем памяти к которой только что обратились).

  • @tarmo9010
    @tarmo9010 Місяць тому

    10:00 всегда ставлю сумматор типа sum^=j;

    • @tilir
      @tilir  Місяць тому

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

  • @sibedir
    @sibedir Місяць тому

    чё ютуб опять мои комментарии удаляет? (((

    • @sibedir
      @sibedir Місяць тому

      о. восстановился 1.
      попробую тут

    • @sibedir
      @sibedir Місяць тому

      Не. Удаляет и всё.
      Ютуб удаляет комментарии с кодом к видео про программирование 🤦‍♂️

    • @sibedir
      @sibedir Місяць тому

      попробую короткий комментарий. вдруг прокатит
      12:40
      Я в Visual Studio С++ вот так сделал:
      template
      inline void donothing(types ...args) { __asm { DONOTHING: }}

    • @tilir
      @tilir  Місяць тому

      Напишите его на канал в телеграме, там тоже есть комментарии.

    • @tilir
      @tilir  Місяць тому

      А как сделать чтобы работало в C?

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr Місяць тому

    я никогда не слышал ничего подобного. массив-чтобы быстро найти. список - чтобы быстро заменить.

  • @sibedir
    @sibedir Місяць тому +1

    Вот совсем недавно думал над такой мыслью: Оптимизировать find/ lower_bound для последовательных данных с учётом кэшей. Может стоит попробовать?