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

preview_player
Показать описание
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.

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

Семинарист: Константин Владимиров.
Дата: 1 апреля 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.

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
* Тут пока пусто
Рекомендации по теме
Комментарии
Автор

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

sibedir
Автор

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

egor_neo
Автор

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

BeyuuKT
Автор

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

Igor_Parfenov
Автор

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

alex_s_ciframi
Автор

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

ПавелФилиппенко-иб
Автор

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

AlexSav
Автор

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

rexxxxxxar
Автор

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

tarmo
Автор

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

mod
Автор

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

alexanderspeshilov
Автор

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

nikitaq
Автор

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

dashberlin
Автор

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

wusikijeronii
Автор

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

MikhailGoncharov-tlcr
Автор

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

sibedir
Автор

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

sibedir