Size: a a a

IT KPI C/C++ ХВ (не UB)

2021 March 01

JC

Julian =) Coffee in IT KPI C/C++ ХВ (не UB)
А что это за прога в такое может?
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
типа, рассматривается скорость роста количества тактов в зависимости от выполенных операций
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
qwerty
ну ок, тогда у меня вопрос, почему в области L2 кэша такой график
Ось х это размер массива?
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
ось x - количество выполненных константных операций
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
Julian =) Coffee
А что это за прога в такое может?
я нашел эту пикчу и там не совсем описывается поведение  в L2 зоне
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
qwerty
char a[N][N];

for (std::size_t i = 0; i < N; ++i)
   for (std::size_t j = 0; j < N; ++j)
        a[i][j] = 0


for (std::size_t i = 0; i < N; ++i)
   for (std::size_t j = 0; j < N; ++j)
        a[j][i]
= 0

Какой варик быстрее и почему? (Понятно, что они обе константные операции и на bit O нотацию смотреть не будем)
Крч, с точки зрения тактов
Ты понимаешь их расположение в памяти?
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
Как хранится двумерный массив
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
да
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
я понимаю, как происходит аллокация
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
Тогда просто утвердим что двумерным массив это продолжительный кусок памяти
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
да это понятно
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
И в первом случае ты читаешь этот кусок по байту
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
ну смотри, тут он не просто берет и обращается в оперативке при каждом обращении к памяти если шо
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
А во втором прыгая на N байт
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
ибо простое обращение к оперативке стоит 200+ циклов
источник

q

qwerty in IT KPI C/C++ ХВ (не UB)
ладно, я понял, я почитаю
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
И вот, данные в кэш подгружаются блоками, на х86 по 64байта. Когда ты читаешь память как бы прямо, то проц загрузил в кэш кусок памяти, обработал его и забил
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
А во втором случае ты читаешь каждый раз через N байт
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
И из-за этого проц каждый раз загружает новый блок памяти в кэш
источник

EH

E1 (не бот) Hephaest... in IT KPI C/C++ ХВ (не UB)
E1 (не бот) Hephaestus
И из-за этого проц каждый раз загружает новый блок памяти в кэш
А это дорого
источник