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

  Рет қаралды 6,513

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Практические занятия по языку 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
* Тут пока пусто

Пікірлер: 42
@sibedir
@sibedir 2 ай бұрын
Клиффхэнгер про конвейеры в конце был зачётный 😊 Сюжет этих лекций не отпускает ни на секунду
@egor_neo
@egor_neo 2 ай бұрын
Подписывайтесь и ставьте лай.. Подписывайтесь и ставьте лайки!
@alex_s_ciframi
@alex_s_ciframi 9 күн бұрын
Константин, спасибо за лекцию. 48:06 - а можно ведь не маллок делать, а вторую матрицу по месту транспонировать, а после вычислений вернуть обратно. Так будет даже шустрее, наверное. Понимаю, что входной параметр менять - это так себе решение, но этот момент можно отразить в документации к функции
@ElectroMan_86
@ElectroMan_86 2 ай бұрын
Константин, благодарю за Ваши труды.
@Be3y4uuK0T
@Be3y4uuK0T 2 ай бұрын
Супер! Спасибо за такой ценный труд! Очень жду продолжения. Было бы очень круто побольше примеров как это эффективно использовать, код до и код после, как с перемножением матриц!
@johndick996
@johndick996 2 ай бұрын
Константин, большое спасибо за Ваш труд!
@yarburart7242
@yarburart7242 2 ай бұрын
Повезло сегодня с ютубчиком
@ruslankhl
@ruslankhl 2 ай бұрын
Огромное спасибо!
@exx-ns4tt
@exx-ns4tt 2 ай бұрын
И снова лай за ранее)
@user-ir4fc5kp8p
@user-ir4fc5kp8p 2 ай бұрын
Браво! Огромное спасибо!
@Igor_Parfenov
@Igor_Parfenov Ай бұрын
1:10:26 Данный пример также хорошо демонстрирует тот факт, что L3-кэш общий для всех ядер. Поэтому к моменту, когда наблюдаемое ядро вернется за следующим блоком информации, этот блок уже может отсутствовать вследствие работы другого ядра.
@user-un4sl5md6t
@user-un4sl5md6t Ай бұрын
36:30 небольшая оговорочка -- разряжаются конденсаторы, а не транзисторы
@tilir
@tilir Ай бұрын
Да спасибо. Смешная оговорка. Конечно я имел в виду конденсатор.
@rexxxxxxar
@rexxxxxxar 2 ай бұрын
Надеюсь студенты запомнили про политику вытеснения. На первой лекции по плюсам им пригодится😅
@tilir
@tilir 2 ай бұрын
У них на последнем занятии защита проекта. Запомнят все ))
@alexanderspeshilov839
@alexanderspeshilov839 17 күн бұрын
Несколько раз за лекцию прозвучало, что умножение матриц "квадратичное" по количеству операций. То ли я перегрелся от погоды, то ли это неточность. Если считать, что обе матрицы N x N, то количество умножений и сложений порядка N^3. Если за N взять количество элементов в матрице, то тоже N^2 не получается.
@AlexSav
@AlexSav 2 ай бұрын
1:33:40 В программе ошибка, мы не добавляем в сумму, а переписываем сумму значением из массива
@tilir
@tilir 2 ай бұрын
Да смешно получилось, спасибо за наблюдательность. Но с другой стороны вряд ли это влияет на суть примера ))
@johoaprl2505
@johoaprl2505 2 ай бұрын
С!!!!!
@mod3528
@mod3528 2 ай бұрын
branchless код и математика указателей
@dashberlin6682
@dashberlin6682 2 ай бұрын
Правильно ли я понимаю что массивы, какими они не были большими или маленькими, всегда хранятся в RAM, и когда идёт чтение, то массив забрасываеться в кеши, и после выполнения идёт перезаписываться обратно в RAM. Имеется ввиду, то что кеши не являются плацдармом для постоянного хранения памяти?
@tilir
@tilir 2 ай бұрын
Если что то кеширована в кеше лежит копия. Когда она вытесняется из кеша туда кладётся копия для чего то нового (скажем памяти к которой только что обратились).
@tarmo9010
@tarmo9010 2 ай бұрын
10:00 всегда ставлю сумматор типа sum^=j;
@tilir
@tilir 2 ай бұрын
Ну тут компилятор в принципе может сделать ничто, аналитически это легко посчитать.
@nikitaq123
@nikitaq123 2 ай бұрын
А чем valgrind лучше санитайзеров (asan, ubsan, etc)?
@tilir
@tilir 2 ай бұрын
Валгринд не сравним с ubsan, это тёплое против мягкого, т.к. ub будет ub и под валгриндом (и конечно никак им не диагностируется). А вот asan и даже asan + memsan он сильно превосходит в точности диагностики, проигрывая в скорости работы, т.к. там разные механизмы проверки.
@wusikijeronii4510
@wusikijeronii4510 29 күн бұрын
Они для разных целей. Asan валидирует доступ к памяти. Valgrind утечки. Да, они оба могут проверять вещи из обоих категорий, но это не гарантированно. Лично я пишу на винде. И среди этого использую asan. Утечки памяти он прям почти никогда не находит.
@wusikijeronii4510
@wusikijeronii4510 29 күн бұрын
А зачем эта тема с пустыми вставками ассемблера? Чем gcc push /__attribute не устраивает? Типо под msvc может не работать? Я только на clang пишу. А под другие не знаю
@tilir
@tilir 29 күн бұрын
Я не очень понимаю как вы будете выкручиваться через прагмы и атрибуты. Отмените оптимизации вокруг конкретной функции? Ну так там компилятор понавтыкает обращений к памяти и удачных замеров. Пустая ассемблерная вставка хороша тем что позволяет нам оставить O2 и это O2 будет честным везде вокруг неё. То есть мы отменяем оптимизацию очень точечно, ни атрибутами ни прагмами такого (насколько мне известно) не достичь.
@wusikijeronii4510
@wusikijeronii4510 29 күн бұрын
@@tilir ага. Просто перед и после push/pop отключения оптимизаций. А в чем проблема? Думаете не сработает? Как по мне должно. Никогда просто не делал бенчмаркинг без оптимизаций. Увидел дополнение. Ну просто как по мне это написание велосипеда. Я готов поспорить. Завтра проверю. Отпишусь
@wusikijeronii4510
@wusikijeronii4510 28 күн бұрын
​​@@tilir уже дважды написал. Удаляется комментарии. Прочитал политику размещения комментариев. Оказывается ссылки нельзя. Думал спек скинуть. Ну, в общем был не прав. Я думал прагмы работают везде. По спецификации gcc только над функциями. Печально. В любом случае спасибо за снипет
@tilir
@tilir 28 күн бұрын
@@wusikijeronii4510можете ссылку в телеграм-канал заслать. В комментарии сюда: t.me/cpp_lects_rus/165
@sibedir
@sibedir 2 ай бұрын
чё ютуб опять мои комментарии удаляет? (((
@sibedir
@sibedir 2 ай бұрын
о. восстановился 1. попробую тут
@sibedir
@sibedir 2 ай бұрын
Не. Удаляет и всё. Ютуб удаляет комментарии с кодом к видео про программирование 🤦‍♂️
@sibedir
@sibedir 2 ай бұрын
попробую короткий комментарий. вдруг прокатит 12:40 Я в Visual Studio С++ вот так сделал: template inline void donothing(types ...args) { __asm { DONOTHING: }}
@tilir
@tilir 2 ай бұрын
Напишите его на канал в телеграме, там тоже есть комментарии.
@tilir
@tilir 2 ай бұрын
А как сделать чтобы работало в C?
@MikhailGoncharov-tl4cr
@MikhailGoncharov-tl4cr 2 ай бұрын
я никогда не слышал ничего подобного. массив-чтобы быстро найти. список - чтобы быстро заменить.
@sibedir
@sibedir 2 ай бұрын
Вот совсем недавно думал над такой мыслью: Оптимизировать find/ lower_bound для последовательных данных с учётом кэшей. Может стоит попробовать?
Luck Decides My Future Again 🍀🍀🍀 #katebrush #shorts
00:19
Kate Brush
Рет қаралды 3,3 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 187 МЛН
Must-have gadget for every toilet! 🤩 #gadget
00:27
GiGaZoom
Рет қаралды 9 МЛН
Указатель на функцию в языке С++
16:54
Оксана Еськова. Основы программирования
Рет қаралды 231
Как в 44 года стать программистом на Python. Объясняю с чего начать.
19:32
Luck Decides My Future Again 🍀🍀🍀 #katebrush #shorts
00:19
Kate Brush
Рет қаралды 3,3 МЛН