Size: a a a

2021 March 13

ПВ

Пётр Винничук... in pro.cxx
qwerty

char arr[N][N];

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

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

Меня на каком-то собесе попросили рассказать про разницу между этими операциями. Кажется, вопрос неплохой, так же дает возможность немного углубиться...
Это по типу моего задания? Или я что-то не так понял?
источник

q

qwerty in pro.cxx
Не, там вопрос был сверху, кажется его удалили((
А я вот старался помочь человеку...
источник

IZ

Ilia Zviagin in pro.cxx
Пётр Винничук
Это по типу моего задания? Или я что-то не так понял?
Нет, не имеет никакого отношения
источник

ПВ

Пётр Винничук... in pro.cxx
Понял...
источник

IZ

Ilia Zviagin in pro.cxx
qwerty

char arr[N][N];

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

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

Меня на каком-то собесе попросили рассказать про разницу между этими операциями. Кажется, вопрос неплохой, так же дает возможность немного углубиться...
В обсуждение кэшей?
Ключевое тут - насколько велик N ...
источник

a

albert(); in pro.cxx
qwerty

char arr[N][N];

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

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

Меня на каком-то собесе попросили рассказать про разницу между этими операциями. Кажется, вопрос неплохой, так же дает возможность немного углубиться...
Это может как-то влиять на скорость? Процессор же обращается к массиву сначала по строкам, а потом по столбцам
источник

IZ

Ilia Zviagin in pro.cxx
albert();
Это может как-то влиять на скорость? Процессор же обращается к массиву сначала по строкам, а потом по столбцам
Может. А может и не влиять
источник

IZ

Ilia Zviagin in pro.cxx
albert();
Это может как-то влиять на скорость? Процессор же обращается к массиву сначала по строкам, а потом по столбцам
А может компилятор взимает эти два цикла, сделает уплощение массива, и вызовет одну команду обнуления всего массива в цикле.
источник

a

albert(); in pro.cxx
Ilia Zviagin
А может компилятор взимает эти два цикла, сделает уплощение массива, и вызовет одну команду обнуления всего массива в цикле.
Может
источник

DF

Dollar Føølish in pro.cxx
text
а тут знает кто почему первое заполнение массива медленнее повторного
Из-за деманд пейджинга скорее всего
источник
2021 March 14

AP

Antony Polukhin in pro.cxx
text
а тут знает кто почему первое заполнение массива медленнее повторного
1) кеш процессора
2) на некоторых ОС ленивое выделение памяти - вы вызвали new, вам вернули указатель, который указывает в на страницу памяти под которую ещё не выделен RAM... при первом обращени к странице происходит медленный page fault, действительно выделяется память и только потом управление возвращается вашей программе.
3) вариант 2) так же может срабатывать при выделении больших объемов данных на стеке - под часть стека может не быть выделена память и будет page fault при первом обращении
источник

F

FailsBot in pro.cxx
USAGE:
/help - prints this message;
/vzhuh [message] - do vzhuh;
/start - info about bot.
Plugins
/battery
/cdecl
/dnsflag
/ebalo
/find_hobby
/findyourselfahobby
/getsmile
/qt_bugs
/reactos_bugs
/strelka
/strelkaraw
/suggest
/uptime - shows bot's uptime since last restart;
/waifu
/xkcd - shows random or numbered XKCD comix;
источник

t

text in pro.cxx
а если человек заходит и отвлекаеца на другой монитор
источник

П

Пашечка in pro.cxx
/xkcd@FailsBot
источник

NS

Nick Shalimov in pro.cxx
albert();
Это может как-то влиять на скорость? Процессор же обращается к массиву сначала по строкам, а потом по столбцам
Обход параллельно кешлиниям в общем случае даст приличный выигрыш
источник

NS

Nick Shalimov in pro.cxx
Особенно будет заметно на больших N, советую попробовать померить
источник

a

albert(); in pro.cxx
Nick Shalimov
Особенно будет заметно на больших N, советую попробовать померить
Учитывая, что это статический массив, особо больших n не будет
источник

NS

Nick Shalimov in pro.cxx
Ну в случае небольшого N тут ничего оптимизировать и не нужно. Тем более,что у вас всë скорее всего компактно уместится в L1
источник

AG

Andrey Glebov in pro.cxx
вот интересно, ни gcc, ни clang не смогли соптимизировать второй вариант в memset, а msvc и icc смогли: https://godbolt.org/z/qxddGW
источник

NS

Nick Shalimov in pro.cxx
Может потому, что memset здесь не особо лучше сработает? Профилировать нужно, причëм лучше на целевой платформе
источник