|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
вот, например: Код: plaintext 1. 2. 3. 4.
имеем vector<s>, который итерируем, и для каждого i будет своё a,b,c, но в целом, для каждого i они константа (их только один раз надо посчитать). А вот итераций по этому вектору будет много. Но если их зафиксировать, то они займут кэш. Вопрос - делать много итераций по фиксированным значениям (сохранить их в структуре) ИЛИ каждый раз считать заново? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 04:06 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
По-хорошему просто запусти оба варианта и сравни. Получение данных из кэша быстрее примерно раза в 2 чем из памяти, т.е. времени на расчет остается немного. Возможно какие-то примитивные вычисления окажутся быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 07:14 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Мало исходных данных. Если f(a,b,c) простая функция и ее расчет занимает несколько тактов - то можно не хранить. Если у тебя под капотом что-то вроде .....эээ функции Аккермана - то лучше рассчитывать и хранить результат. Называется - мемоизация. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 08:46 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
да не, там расчёты простые. Dima T Получение данных из кэша быстрее примерно раза в 2 чем из памяти 107 раз было... L1 vs память. 50 раз - L2 vs память. А вот если каждый раз считать, то там расчёты a,b,c будут ложиться в отдельную struct, значит в кеше будет находиться итерируемый вектор + эта struct. И на всё время итерации по вектору они будут лежать в кеше и быстро-быстро считаться? Т.е. там вообще в память заходов не будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 09:17 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020, надо корректнее выражаться, что вы понимаете под кешем и каким в вашем случае, последовательный доступ естественно будет самый быстрый ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 11:31 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Какой тут int? Ну допустим 4х байтный. Я перепишу структуру по другому для удобства подсчета. Код: plaintext 1. 2. 3. 4. 5. 6.
В одной кеш-линии 64 байта. Тоесть 4 таких структуры лягут в 1 кеш-линию при условии что vector<s> аллоцирует их по границе кратной 64 байтам. При неудачном раскладе в кеш-линию лягут 3 структуры и два "хвостика" справа и слева. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 11:45 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
mayton, и что именно это значит? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 12:20 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Что значат "хвостики"? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 12:23 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
вот это мне как поможет? mayton В одной кеш-линии 64 байта. Тоесть 4 таких структуры лягут в 1 кеш-линию при условии что vector<s> аллоцирует их по границе кратной 64 байтам. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 12:48 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 12:51 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020Вопрос - делать много итераций по фиксированным значениям (сохранить их в структуре) ИЛИ каждый раз считать заново? Ответ зависит от того как часто тебе нужны значения и что делают итерации. Например, если итерации читают fixed, а не a,b,c, то эти a,b,c надо просто из структуры выкинуть и оставить вектор fixed. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 12:52 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
каждую итерацию проверяется fixed, если 1, то continue (для этого i расчёты НЕ нужны). А если 0, то эти a,b,c отправляются в другую ф-ю, где с ними делают много всяких расчётов. Т.е. в каждой итерации этот s обычно едет куда-то далее и там считается. Тут 2 варианта, надо разобраться: На каждой итерации происходит считывание 4х s подряд (кеширование вперёд заранее посчитанных a,b,c). И если вот в этом и есть суть кеширования (что он потом не будет за ними ходить), то тогда он эти 4 s посчитает в другой ф-и быстро и сразу. Но кеш заполнится... Но и хер с ним. Я же вот в данный конкретный момент занят именно этими расчётами. Я именно этот вектор считаю, он мне и нужен в кеше, а для других дел кеш очистится после расчётов. Так что вроде всё ок? ЛИБО я эти a,b,c буду считать каждый раз снова и снова (а там может быть миллион итераций в итоге), но зато кеш типа сэкономлю... Короче пока получается, что лучше посчитать заранее... mayton Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник. что именно проверить и зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 13:40 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020, Если массив многократно проходится, то сделайте вначале его копию с рассчитанными значениями и работайте потом с копией. Если конечно это не тот знаменитый массив в триллион записей )) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 13:42 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 mayton Алексей Роза 2020, ну проверь физические адреса где лежат твои данные. Тыж сишник. что именно проверить и зачем? Я уже писал кажется. Попадает ли 4 твоих s-объекта в 1 кеш-линию. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 13:44 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020эти a,b,c отправляются в другую ф-ю Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 13:54 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Алексей Роза 2020эти a,b,c отправляются в другую ф-ю Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора. Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает. Было-бы интересно посмотреть Алексеевский софт под профилированием и понять что на самом деле расчет это загадочной функции f(a,b,c) действительно сильно оказывает влияние на результат и мемоизация необходима. К сожалению Леша такой партизан что ничего не расскажет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:00 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 каждую итерацию проверяется fixed, если 1, то continue (для этого i расчёты НЕ нужны). А если 0, то эти a,b,c отправляются в другую ф-ю, где с ними делают много всяких расчётов. Т.е. в каждой итерации этот s обычно едет куда-то далее и там считается. Тут 2 варианта, надо разобраться: Есть третий вариант: сделать два массива, в первый fixed, во второй a,b,c. С точки зрения расхода памяти ничего не меняется, но повышается вероятность попадания в кэш массива fixed. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:05 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Алексей Роза 2020эти a,b,c отправляются в другую ф-ю Всё. Это место ставит жирный крест на оптимизации с помощью кэша процессора. Компилятор может заинлайнить функцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:11 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Dima TКомпилятор может В таком случае пусть он и обо всей остальной оптимизации думает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:22 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
mayton Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает. Похоже на то. ИМХО смысла в этом топике нет особого, зачем сферические кэши обсуждать когда можно потестить вживую и решать как удобнее, переписать код с одного способа на другой много времени не потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:25 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Давайте пре-внесем в топик немного материализма. Пускай функция выглядит так. Код: plaintext 1. 2. 3.
Почему так? Я просто акцентирую внимание на то что она - детерминистическая и не оказывает влияния на среду. Она не меняет никакоую ячейку памяти. Потому что если меняет - это усложняет оптимизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:25 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
maytonДавайте пре-внесем в топик немного материализма. Привносить материализм в Розовые топики бесполезно по определению. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:26 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Согласен. Я поднимал свой топик https://www.sql.ru/forum/1327486/predvaritelnye-slushanya-po-memory-cache-part-2 на аналогичную тему но хотел пре-внести опенсорцные алгоритмы и структуры данных дабы каждый интересующийся сумел это скомпилить и что-то посмотреть и проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 14:29 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
а тогда как правильно это сделать, чтобы выжать максимум из кэша? f(a,b,c), в т.ч., делает сравнение и мат.операции с данными из других векторов а если векторы небольшие и все помещаются в L1 ? Dima T mayton Мне в топике кажется что мы заняты оптимизацией того что и так хорошо работает. Похоже на то. ИМХО смысла в этом топике нет особого, зачем сферические кэши обсуждать когда можно потестить вживую и решать как удобнее, переписать код с одного способа на другой много времени не потребуется. надо понимать, как оно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 15:13 |
|
как правильно хранить значения в объекте с т.з. кеша
|
|||
---|---|---|---|
#18+
Смотри. Я рассуждаю так. У нас нет регулятора который говорит системе быстрее-медленее. Есть набор гипотез которые надо проверять практически. Например. Моя гипотеза - Выровняй структуры данных на кешлинию. И уменьшишь количество повторных чтений из памяти хвостов структур. Но от тебяж никакого фидбека нет. Ты попробовал? Что-то получилось? Как-будто сидишь и ждешь что мы за тебя придумаем волшебный набор рецептов. Демотивирует твоё отношение. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 15:18 |
|
|
start [/forum/topic.php?fid=57&fpage=6&tid=2017340]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 280ms |
total: | 436ms |
0 / 0 |