powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / как правильно хранить значения в объекте с т.з. кеша
25 сообщений из 56, страница 1 из 3
как правильно хранить значения в объекте с т.з. кеша
    #39996059
вот, например:
Код: plaintext
1.
2.
3.
4.
struct s{
    int a,b,c;
    int fixed;
};


имеем vector<s>, который итерируем, и для каждого i будет своё a,b,c, но в целом, для каждого i они константа (их только один раз надо посчитать).
А вот итераций по этому вектору будет много. Но если их зафиксировать, то они займут кэш.
Вопрос - делать много итераций по фиксированным значениям (сохранить их в структуре) ИЛИ каждый раз считать заново?
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996065
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-хорошему просто запусти оба варианта и сравни.

Получение данных из кэша быстрее примерно раза в 2 чем из памяти, т.е. времени на расчет остается немного. Возможно какие-то примитивные вычисления окажутся быстрее.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мало исходных данных.

Если f(a,b,c) простая функция и ее расчет занимает несколько тактов - то можно не хранить.

Если у тебя под капотом что-то вроде .....эээ функции Аккермана - то лучше рассчитывать и хранить результат.

Называется - мемоизация.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996082
да не, там расчёты простые.
Dima T
Получение данных из кэша быстрее примерно раза в 2 чем из памяти

107 раз было... L1 vs память.
50 раз - L2 vs память.

А вот если каждый раз считать, то там расчёты a,b,c будут ложиться в отдельную struct, значит в кеше будет находиться итерируемый вектор + эта struct. И на всё время итерации по вектору они будут лежать в кеше и быстро-быстро считаться? Т.е. там вообще в память заходов не будет?
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996114
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,

надо корректнее выражаться, что вы понимаете под кешем и каким
в вашем случае, последовательный доступ естественно будет самый быстрый
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996124
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой тут int? Ну допустим 4х байтный. Я перепишу структуру по другому для удобства подсчета.

Код: plaintext
1.
2.
3.
4.
5.
6.
struct s{
    int a;      // 4 bytes +
    int b;      // 4 bytes +
    int c;      // 4 bytes +
    int fixed; // 4 bytes
}; //              16 bytes



В одной кеш-линии 64 байта. Тоесть 4 таких структуры лягут в 1 кеш-линию при условии
что vector<s> аллоцирует их по границе кратной 64 байтам.

При неудачном раскладе в кеш-линию лягут 3 структуры и два "хвостика" справа и слева.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996134
mayton, и что именно это значит?
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значат "хвостики"?
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996146
вот это мне как поможет?
mayton
В одной кеш-линии 64 байта. Тоесть 4 таких структуры лягут в 1 кеш-линию при условии что vector<s> аллоцирует их по границе кратной 64 байтам.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996150
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020Вопрос - делать много итераций по фиксированным значениям (сохранить их в структуре) ИЛИ
каждый раз считать заново?

Ответ зависит от того как часто тебе нужны значения и что делают итерации. Например, если
итерации читают fixed, а не a,b,c, то эти a,b,c надо просто из структуры выкинуть и
оставить вектор fixed.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996171
каждую итерацию проверяется fixed, если 1, то continue (для этого i расчёты НЕ нужны).
А если 0, то эти a,b,c отправляются в другую ф-ю, где с ними делают много всяких расчётов.
Т.е. в каждой итерации этот s обычно едет куда-то далее и там считается.

Тут 2 варианта, надо разобраться:
На каждой итерации происходит считывание 4х s подряд (кеширование вперёд заранее посчитанных a,b,c).
И если вот в этом и есть суть кеширования (что он потом не будет за ними ходить), то тогда он эти 4 s посчитает в другой ф-и быстро и сразу.
Но кеш заполнится... Но и хер с ним. Я же вот в данный конкретный момент занят именно этими расчётами.
Я именно этот вектор считаю, он мне и нужен в кеше, а для других дел кеш очистится после расчётов.
Так что вроде всё ок?
ЛИБО я эти a,b,c буду считать каждый раз снова и снова (а там может быть миллион итераций в итоге), но зато кеш типа сэкономлю...
Короче пока получается, что лучше посчитать заранее...
mayton
Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник.

что именно проверить и зачем?
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996176
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,

Если массив многократно проходится, то сделайте вначале его копию с рассчитанными значениями и работайте потом с копией.

Если конечно это не тот знаменитый массив в триллион записей ))
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020

mayton
Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник.

что именно проверить и зачем?

Я уже писал кажется. Попадает ли 4 твоих s-объекта в 1 кеш-линию.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996190
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020эти a,b,c отправляются в другую ф-ю

Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Алексей Роза 2020эти a,b,c отправляются в другую ф-ю

Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора.

Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает.

Было-бы интересно посмотреть Алексеевский софт под профилированием и понять что на самом деле расчет это загадочной
функции f(a,b,c) действительно сильно оказывает влияние на результат и мемоизация необходима.

К сожалению Леша такой партизан что ничего не расскажет
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996200
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
каждую итерацию проверяется fixed, если 1, то continue (для этого i расчёты НЕ нужны).
А если 0, то эти a,b,c отправляются в другую ф-ю, где с ними делают много всяких расчётов.
Т.е. в каждой итерации этот s обычно едет куда-то далее и там считается.

Тут 2 варианта, надо разобраться:

Есть третий вариант: сделать два массива, в первый fixed, во второй a,b,c. С точки зрения расхода памяти ничего не меняется, но повышается вероятность попадания в кэш массива fixed.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Алексей Роза 2020эти a,b,c отправляются в другую ф-ю

Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора.

Компилятор может заинлайнить функцию.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996209
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКомпилятор может

В таком случае пусть он и обо всей остальной оптимизации думает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996211
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает.

Похоже на то.
ИМХО смысла в этом топике нет особого, зачем сферические кэши обсуждать когда можно потестить вживую и решать как удобнее, переписать код с одного способа на другой много времени не потребуется.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996212
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте пре-внесем в топик немного материализма. Пускай функция выглядит так.

Код: plaintext
1.
2.
3.
int f(int a,int b, int c) {
   return a * b % c;
}



Почему так? Я просто акцентирую внимание на то что она - детерминистическая и не оказывает
влияния на среду. Она не меняет никакоую ячейку памяти. Потому что если меняет - это усложняет
оптимизации.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996213
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте пре-внесем в топик немного материализма.

Привносить материализм в Розовые топики бесполезно по определению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996215
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Я поднимал свой топик https://www.sql.ru/forum/1327486/predvaritelnye-slushanya-po-memory-cache-part-2
на аналогичную тему но хотел пре-внести опенсорцные алгоритмы и структуры данных дабы каждый
интересующийся сумел это скомпилить и что-то посмотреть и проверить.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996230
а тогда как правильно это сделать, чтобы выжать максимум из кэша?
f(a,b,c), в т.ч., делает сравнение и мат.операции с данными из других векторов
а если векторы небольшие и все помещаются в L1 ?

Dima T
mayton
Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает.

Похоже на то.
ИМХО смысла в этом топике нет особого, зачем сферические кэши обсуждать когда можно потестить вживую и решать как удобнее, переписать код с одного способа на другой много времени не потребуется.

надо понимать, как оно работает.
...
Рейтинг: 0 / 0
как правильно хранить значения в объекте с т.з. кеша
    #39996231
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри. Я рассуждаю так. У нас нет регулятора который говорит системе быстрее-медленее.

Есть набор гипотез которые надо проверять практически. Например. Моя гипотеза -
Выровняй структуры данных на кешлинию. И уменьшишь количество повторных чтений из памяти
хвостов структур.

Но от тебяж никакого фидбека нет. Ты попробовал? Что-то получилось?

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

Демотивирует твоё отношение.
...
Рейтинг: 0 / 0
25 сообщений из 56, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / как правильно хранить значения в объекте с т.з. кеша
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]