Практика языка 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
* Тут пока пусто
Клиффхэнгер про конвейеры в конце был зачётный 😊
Сюжет этих лекций не отпускает ни на секунду
Подписывайтесь и ставьте лай.. Подписывайтесь и ставьте лайки!
Константин, большое спасибо за Ваш труд!
1:10:26
Данный пример также хорошо демонстрирует тот факт, что L3-кэш общий для всех ядер. Поэтому к моменту, когда наблюдаемое ядро вернется за следующим блоком информации, этот блок уже может отсутствовать вследствие работы другого ядра.
И снова лай за ранее)
Повезло сегодня с ютубчиком
Константин, благодарю за Ваши труды.
Супер! Спасибо за такой ценный труд! Очень жду продолжения. Было бы очень круто побольше примеров как это эффективно использовать, код до и код после, как с перемножением матриц!
Огромное спасибо!
Браво! Огромное спасибо!
36:30 небольшая оговорочка -- разряжаются конденсаторы, а не транзисторы
Да спасибо. Смешная оговорка. Конечно я имел в виду конденсатор.
Надеюсь студенты запомнили про политику вытеснения. На первой лекции по плюсам им пригодится😅
У них на последнем занятии защита проекта. Запомнят все ))
1:33:40 В программе ошибка, мы не добавляем в сумму, а переписываем сумму значением из массива
Да смешно получилось, спасибо за наблюдательность. Но с другой стороны вряд ли это влияет на суть примера ))
С!!!!!
branchless код и математика указателей
А чем valgrind лучше санитайзеров (asan, ubsan, etc)?
Валгринд не сравним с ubsan, это тёплое против мягкого, т.к. ub будет ub и под валгриндом (и конечно никак им не диагностируется).
А вот asan и даже asan + memsan он сильно превосходит в точности диагностики, проигрывая в скорости работы, т.к. там разные механизмы проверки.
Правильно ли я понимаю что массивы, какими они не были большими или маленькими, всегда хранятся в RAM, и когда идёт чтение, то массив забрасываеться в кеши, и после выполнения идёт перезаписываться обратно в RAM. Имеется ввиду, то что кеши не являются плацдармом для постоянного хранения памяти?
Если что то кеширована в кеше лежит копия. Когда она вытесняется из кеша туда кладётся копия для чего то нового (скажем памяти к которой только что обратились).
10:00 всегда ставлю сумматор типа sum^=j;
Ну тут компилятор в принципе может сделать ничто, аналитически это легко посчитать.
чё ютуб опять мои комментарии удаляет? (((
о. восстановился 1.
попробую тут
Не. Удаляет и всё.
Ютуб удаляет комментарии с кодом к видео про программирование 🤦♂️
попробую короткий комментарий. вдруг прокатит
12:40
Я в Visual Studio С++ вот так сделал:
template
inline void donothing(types ...args) { __asm { DONOTHING: }}
Напишите его на канал в телеграме, там тоже есть комментарии.
А как сделать чтобы работало в C?
я никогда не слышал ничего подобного. массив-чтобы быстро найти. список - чтобы быстро заменить.
Вот совсем недавно думал над такой мыслью: Оптимизировать find/ lower_bound для последовательных данных с учётом кэшей. Может стоит попробовать?