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

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 พ.ย. 2024

ความคิดเห็น • 45

  • @somebody198
    @somebody198 8 วันที่ผ่านมา +1

    Великолепный преподаватель!

  • @sibedir
    @sibedir 7 หลายเดือนก่อน +10

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

  • @egor_neo
    @egor_neo 7 หลายเดือนก่อน +9

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

  • @ElectroMan_86
    @ElectroMan_86 7 หลายเดือนก่อน +2

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

  • @Be3y4uuK0T
    @Be3y4uuK0T 7 หลายเดือนก่อน

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

  • @yarburart7242
    @yarburart7242 7 หลายเดือนก่อน +3

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

  • @ИванСемухин-н1б
    @ИванСемухин-н1б 7 หลายเดือนก่อน

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

  • @Igor_Parfenov
    @Igor_Parfenov 6 หลายเดือนก่อน

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

  • @exx-ns4tt
    @exx-ns4tt 7 หลายเดือนก่อน +4

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

  • @ruslankhl
    @ruslankhl 7 หลายเดือนก่อน

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

  • @alex_s_ciframi
    @alex_s_ciframi 5 หลายเดือนก่อน

    Константин, спасибо за лекцию.
    48:06 - а можно ведь не маллок делать, а вторую матрицу по месту транспонировать, а после вычислений вернуть обратно. Так будет даже шустрее, наверное.
    Понимаю, что входной параметр менять - это так себе решение, но этот момент можно отразить в документации к функции

    • @tilir
      @tilir  4 หลายเดือนก่อน

      Изящная идея. Попробуйте замерить сколько сэкономите.

  • @rexxxxxxar
    @rexxxxxxar 7 หลายเดือนก่อน +1

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

    • @tilir
      @tilir  7 หลายเดือนก่อน +2

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

  • @ПавелФилиппенко-и3б
    @ПавелФилиппенко-и3б 6 หลายเดือนก่อน +2

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

    • @tilir
      @tilir  6 หลายเดือนก่อน +1

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

  • @alexanderspeshilov839
    @alexanderspeshilov839 5 หลายเดือนก่อน

    Несколько раз за лекцию прозвучало, что умножение матриц "квадратичное" по количеству операций. То ли я перегрелся от погоды, то ли это неточность. Если считать, что обе матрицы N x N, то количество умножений и сложений порядка N^3. Если за N взять количество элементов в матрице, то тоже N^2 не получается.

    • @tilir
      @tilir  4 หลายเดือนก่อน +1

      Вы конечно правы, кубическая сложность. Про квадратичное это оговорка.

  • @AlexSav
    @AlexSav 7 หลายเดือนก่อน +2

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

    • @tilir
      @tilir  7 หลายเดือนก่อน +2

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

  • @wusikijeronii4510
    @wusikijeronii4510 5 หลายเดือนก่อน

    А зачем эта тема с пустыми вставками ассемблера? Чем gcc push /__attribute не устраивает? Типо под msvc может не работать? Я только на clang пишу. А под другие не знаю

    • @tilir
      @tilir  5 หลายเดือนก่อน

      Я не очень понимаю как вы будете выкручиваться через прагмы и атрибуты. Отмените оптимизации вокруг конкретной функции? Ну так там компилятор понавтыкает обращений к памяти и удачных замеров.
      Пустая ассемблерная вставка хороша тем что позволяет нам оставить O2 и это O2 будет честным везде вокруг неё. То есть мы отменяем оптимизацию очень точечно, ни атрибутами ни прагмами такого (насколько мне известно) не достичь.

    • @wusikijeronii4510
      @wusikijeronii4510 5 หลายเดือนก่อน

      @@tilir ага. Просто перед и после push/pop отключения оптимизаций. А в чем проблема? Думаете не сработает? Как по мне должно. Никогда просто не делал бенчмаркинг без оптимизаций.
      Увидел дополнение. Ну просто как по мне это написание велосипеда. Я готов поспорить. Завтра проверю. Отпишусь

    • @wusikijeronii4510
      @wusikijeronii4510 5 หลายเดือนก่อน

      ​​@@tilir уже дважды написал. Удаляется комментарии. Прочитал политику размещения комментариев. Оказывается ссылки нельзя. Думал спек скинуть.
      Ну, в общем был не прав. Я думал прагмы работают везде. По спецификации gcc только над функциями. Печально. В любом случае спасибо за снипет

    • @tilir
      @tilir  5 หลายเดือนก่อน

      @@wusikijeronii4510можете ссылку в телеграм-канал заслать. В комментарии сюда: t.me/cpp_lects_rus/165

  • @dashberlin6682
    @dashberlin6682 7 หลายเดือนก่อน

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

    • @tilir
      @tilir  7 หลายเดือนก่อน

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

  • @nikitaq123
    @nikitaq123 6 หลายเดือนก่อน

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

    • @tilir
      @tilir  6 หลายเดือนก่อน +1

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

    • @wusikijeronii4510
      @wusikijeronii4510 5 หลายเดือนก่อน

      Они для разных целей. Asan валидирует доступ к памяти. Valgrind утечки. Да, они оба могут проверять вещи из обоих категорий, но это не гарантированно. Лично я пишу на винде. И среди этого использую asan. Утечки памяти он прям почти никогда не находит.

  • @mod3528
    @mod3528 7 หลายเดือนก่อน

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

  • @tarmo9010
    @tarmo9010 7 หลายเดือนก่อน

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

    • @tilir
      @tilir  7 หลายเดือนก่อน

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

  • @johoaprl2505
    @johoaprl2505 7 หลายเดือนก่อน +1

    С!!!!!

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 7 หลายเดือนก่อน

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

  • @sibedir
    @sibedir 7 หลายเดือนก่อน

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

    • @sibedir
      @sibedir 7 หลายเดือนก่อน

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

    • @sibedir
      @sibedir 7 หลายเดือนก่อน

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

    • @sibedir
      @sibedir 7 หลายเดือนก่อน

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

    • @tilir
      @tilir  7 หลายเดือนก่อน

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

    • @tilir
      @tilir  7 หลายเดือนก่อน

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

  • @sibedir
    @sibedir 7 หลายเดือนก่อน +1

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