powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер кэша - КАК его максимально использовать?
25 сообщений из 85, страница 3 из 4
размер кэша - КАК его максимально использовать?
    #39911075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911076
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MTU - насколько я понимаю вообще не локальное свойство а свойство конкретной сети.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$ ping -M do -s 8972 localhost
PING localhost (127.0.0.1) 8972(9000) bytes of data.
8980 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.042 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.039 ms
8980 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.039 ms

$ ping -M do -s 8972 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 8972(9000) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911084
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
bk0010
Главное забыли: размер страницы (2Кб)

На интеле 4КБ или 4МБ.
Прошу прощения, со страницей в Informix перепутал, видимо ( It is platform specific whether the page size is 2 KiB (Solaris, AIX, HP-UX, Linux) or 4 KiB (Windows, Mac OS X).)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911148
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
32 это что-то ну очень-очень старое.
"Очень-очень старое" это 16-байтовая кэш-строка i486 (первый процессор Intel с интегрированным на кристалл кэшем).
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911178
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 8086 было 6 байт:
авторОбъём очереди команд: 6 байт (кэш-буфер команд)
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911179
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ulrich Drepper говорил, что если бы не кеш-память, сегодняшние процессоры не сильно бы отличались от процессоров 80х...
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911180
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это было-бы прекрасно. Я-бы сидел и кодил под свой Z80.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911189
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
в 8086 было 6 байт:авторОбъём очереди команд: 6 байт (кэш-буфер команд)
Это не кэш. А буфер предвыборки и сейчас никуда не делся - конвейер надо "кормить".
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39911190
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И предсказывать, куда свернёт переход по JZ/JA...e.t.c.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные посты одного мембера были удалены технически т.к. была закрыта учётка. Но контент мне понравился и
я их восстанавливаю из удалённых.

полудуху разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb
а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ?


fintank_ruНикак.

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

Важно другое: что единицей обмена с памятью является кеш-линия (упрощённое понимание, но на 90% практически годное)
То есть, проц не может прочитать из ОЗУ 1 байт или 8 байт - только всю кеш-линию.
Отсюда главная мудрость: "раз уж приехало, то использовать".
То есть, если вам из ОЗУ в кеш подвезли 64 байта, потратив 200 тактов, то все эти 64 байта должны быть вам полезны прямо сейчас.
Не надо использовать 8 байт, а потом трогать такой адрес в памяти, который за мегабайт от него.
Надо располагать данные (и код) так, чтобы максимальное количество из загруженной кеш-линии сразу же использовалось.
Идеальный пример: эти 64 байта хранят 8 64-битных чисел, которые вам надо перемножить.
Запись - аналогично.
Плюс межпроцессные коммуникации - если 2 процессора полезли менять память по близким адресам (между которыми меньше 64 байт), то вероятно они трогают одну кеш-линию и будут тратить время на синхронизацию между собой. Нельзя просто так взять и записать из двух разных процов в одно место оперативы. Или нельзя из одного проца прочитать адрес в ОЗУ, который был загружен в кеш другого проца и там изменён.

Представьте что вы хотите купить батон, но все магазины продают только ящик батонов за раз.
Вы купили ящик, сожрали один батон, остальное протухло и вы выкинули.
Рациональнее было собрать деньги со всех соседей и купленный ящик распределить между ними (ещё взять бабло за услугу доставки ящика с них).

В общем, это единственное, что надо знать про кеш - что обмен с реальной ОЗУ - целыми кеш-линиями.
Если вы читаете по 1 байту с интервалом 1 килобайт, значит шина памяти забита на 98.4% тем, что вам не надо.
Дороги заняты перевозкой батонов, которые никто не жрёт.

Ещё хорошо отделять читающие потоки данных от пишущих.
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.
Смешивать чтение и запись в одной кеш-линии почему-то плохо, не помню почему.
Ну например потому, что не надо другим процессорам парить мозг по поводу того, что кеш-линия внезапно поменялась, хотя там 90% данных только для чтения.
Короче буфер с исходными данными отдельно от буфера для результатов.

Можно заценить на ютубе лекции С. Майерса или Г. Саттера на эту тему. Там много всяких таких приколов про межпроцессное взаимодействие, false sharing - когда процы друг другу мешают и т.п.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912200
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fintank_ruЕсть ещё такое понятие - cache oblivious.
Это такое прилагательное.
Означает "что-то, что в курсе про кеш и делает из этого профит, но плевать хотело на конкретные параметры кеша".
Хотя прямой перевод на русский звучал бы как "не видящий кеш", как будто что-то не оптимизированное.
Слово oblivious буржуи заюзали для той части смысла, которая про "плевать хотело на параметры", а не на сам кеш.
Например: https://en.wikipedia.org/wiki/Cache-oblivious_algorithm
https://en.wikipedia.org/wiki/Van_Emde_Boas_tree - как уложить бинарное дерево так, чтобы от появления кеша она ощущала профит.
Имеет смысл думать в таком стиле, а не про конкретные параметры кеша.
Вкратце - это такие алгоритмы и структуры данных, которые эксплуатируют принцип "скорее всего батоны будут не по одному, а в ящиках и один ящик везти дорого".
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе майся дурью, в любой современной операционке тебя
их этого кэша выщемят за мгновение ока.

fintank_ruНе за мгновение ока.
Порядок числа переключений задач в OS обычно в районе 100 с пиками в 1000 в секунду.
Системный таймер, который пинает шедулер ("работай ленивая скотина!") пинается с частотой 250...1000 гц.
Не на каждое такое прерывание происходит переключение задач, часто переключение не нужно.
А иногда переключение делается чаще, если процессу пришли данные из сети или из диска или чё-то такое ещё.
На среднем веб-сервере народ мерял - в районе 100 раз в секунду.
Софтине, которая никакое IO особо не юзает и которая просто чё-то считает в памяти и которая почти одна такая на сервере будут подолгу давать работать.
Но даже при 200 раз в секунду и 3 гигагерцах вам доступно непрерывно 15 млн тактов.
Это можно 75 тысяч раз успеть сходить в ОЗУ промахнувшись мимо кеша и закешировав что-то (поход в ОЗУ считаю = 200 тактов).
И овердофига раз сходить в кеш.
Так что нифига не мгновение ока, а целая вечность - можно успеть много раз поюзать кеш.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912213
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимист этот "закрытый".
Память тактируется на сильно других частотах и доступ в память - десятки и даже сотни наносекунд. Единицы наносекунд - в некоторых частных случаях.
Цикл планирования, опять-таки, ближе к двум миллисекундам, а не к двадцати.
Команды, опять-таки, далеко не все распараллеливаются и далеко не все исполняются за такт.
Ну и самое главное: единица планирования - нить (thread), а не процесс. Если у вас многопоточное приложение - можно получить конкуренцию за кэши внутри собственного приложения.
Резюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано.
Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912779
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912780
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?

Можно попробовать использовать aligned_alloc() и указать в качестве кратного - 8 байтов.

Вот тут пишут.
https://en.cppreference.com/w/c/memory/aligned_alloc
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39912992
madb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата.

а как я это могу контролировать?
это в смысле в одну структуру не надо пихать result?
а где мне его держать тогда?

У вас же C++: полный контроль над тем, как в адресом пространстве процесса будут лежать данные, к которым вы обращаетесь.
Располагайте как угодно.
Если кусок данных размером 64 байта начинается с границы 64 байт, то он будет лежать в кеш-линии целиком - вы же понимаете.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913063
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
madb
полный контроль

ещё скажите, что адреса им тоже я раздаю
и где что в кэше лежит - тоже НЕ я решаю
madb
Располагайте как угодно.

"как угодно" нельзя, ибо:
fintank_ru
Не надо в кеш-линию укладывать 7 лонгов, которые надо умножить, а 8-й использовать для хранения результата.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913107
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
ещё скажите, что адреса им тоже я раздаю
Вам и не надо. Достаточно помнить, что сегменты процесса (код, стэки, данные) выровнены на страницу (4096 байт и более).
Этого достаточно, чтобы выравнивание на 64 байта работало так, как вам хочется.и где что в кэше лежит - тоже НЕ я решаюНе занимайте глобальными супероптимизациями.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913216
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да не очень то и хотелось.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913309
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
да не очень то и хотелось.
ну и ладно
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913321
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
полудух
да не очень то и хотелось.
ну и ладно

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

Вот анти-тест придумать легко.

Одна из задач над которой я думал в процессе https://www.sql.ru/forum/1173809-1/tyapnichnyy-benchmark-cpu-part-1
это был бенчмарк памяти+кеша. Ноя так и не придумал объективную постановку. Тоесть такую которая хотя-бы
была непохожа на Biosmemory test или на MemTest.

Вобщем я искал нечто прикладное. Лежащее на рубеже языков и железа. Но так и не придумал.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913331
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кеш понятие очень относительное

Кроме кеша есть еще блоки процессора отвечающие за работу с памятью.

Если процесс вычисления хорошо написан и инструкции достаточно слабо связаны между собой, latency обращения к памяти как бы и пофиг. Самое главное, что бы пенальти (простоя) по отсутвию предыдущего результата не было.

IMHO

Basil A. SidorovРезюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано.
Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий.

+++

Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском.
"В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать"

проблемы "КАК его максимально использовать?" нет. Т.к. наплодить мусор и забить им процессор - много ума не нужно

Но практически как любой ресурс, чем меньше его приложение потребляет, тем в общем-то оно (и система в целом) будет быстрее работать.
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как альтернативный топик - я предлагаю также поднять
вопрос

что внутри ВАШЕГО бинарника
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913396
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском.
"В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать"

это не параллель, а перпендикуляр
в случае с кэшем ситуация будет полярно иной:
кэш = 8мб, а приложение = 8 TB

и если в вашем примере диск это кэш (на 5 TB
),
то там можно виртуалку поднять, например...
или супер-секретные шифры взламывать...
или в пентагон вломиться...
на крайняк - дом, хозяйство, БИЗНЕС построить
А излишки - за рубёж продавать
...
Рейтинг: 0 / 0
размер кэша - КАК его максимально использовать?
    #39913460
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,
А на первую часть его поста почему не ответил?)
Профит какой от твоего кеша?
Абстрактная производительность процессора в попугаях?
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер кэша - КАК его максимально использовать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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