|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 23:52 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
MTU - насколько я понимаю вообще не локальное свойство а свойство конкретной сети. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 23:55 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky bk0010 Главное забыли: размер страницы (2Кб) На интеле 4КБ или 4МБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 00:56 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton 32 это что-то ну очень-очень старое. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 15:13 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
в 8086 было 6 байт: авторОбъём очереди команд: 6 байт (кэш-буфер команд) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 18:08 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Ulrich Drepper говорил, что если бы не кеш-память, сегодняшние процессоры не сильно бы отличались от процессоров 80х... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 18:09 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Это было-бы прекрасно. Я-бы сидел и кодил под свой Z80. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 18:12 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух в 8086 было 6 байт:авторОбъём очереди команд: 6 байт (кэш-буфер команд) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 18:52 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
И предсказывать, куда свернёт переход по JZ/JA...e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 18:54 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Данные посты одного мембера были удалены технически т.к. была закрыта учётка. Но контент мне понравился и я их восстанавливаю из удалённых. полудуху разных процов разное кол-во кэша, у 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 - когда процы друг другу мешают и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 19:30 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
fintank_ruЕсть ещё такое понятие - cache oblivious. Это такое прилагательное. Означает "что-то, что в курсе про кеш и делает из этого профит, но плевать хотело на конкретные параметры кеша". Хотя прямой перевод на русский звучал бы как "не видящий кеш", как будто что-то не оптимизированное. Слово oblivious буржуи заюзали для той части смысла, которая про "плевать хотело на параметры", а не на сам кеш. Например: https://en.wikipedia.org/wiki/Cache-oblivious_algorithm https://en.wikipedia.org/wiki/Van_Emde_Boas_tree - как уложить бинарное дерево так, чтобы от появления кеша она ощущала профит. Имеет смысл думать в таком стиле, а не про конкретные параметры кеша. Вкратце - это такие алгоритмы и структуры данных, которые эксплуатируют принцип "скорее всего батоны будут не по одному, а в ящиках и один ящик везти дорого". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 19:31 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНе майся дурью, в любой современной операционке тебя их этого кэша выщемят за мгновение ока. fintank_ruНе за мгновение ока. Порядок числа переключений задач в OS обычно в районе 100 с пиками в 1000 в секунду. Системный таймер, который пинает шедулер ("работай ленивая скотина!") пинается с частотой 250...1000 гц. Не на каждое такое прерывание происходит переключение задач, часто переключение не нужно. А иногда переключение делается чаще, если процессу пришли данные из сети или из диска или чё-то такое ещё. На среднем веб-сервере народ мерял - в районе 100 раз в секунду. Софтине, которая никакое IO особо не юзает и которая просто чё-то считает в памяти и которая почти одна такая на сервере будут подолгу давать работать. Но даже при 200 раз в секунду и 3 гигагерцах вам доступно непрерывно 15 млн тактов. Это можно 75 тысяч раз успеть сходить в ОЗУ промахнувшись мимо кеша и закешировав что-то (поход в ОЗУ считаю = 200 тактов). И овердофига раз сходить в кеш. Так что нифига не мгновение ока, а целая вечность - можно успеть много раз поюзать кеш. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 19:32 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Оптимист этот "закрытый". Память тактируется на сильно других частотах и доступ в память - десятки и даже сотни наносекунд. Единицы наносекунд - в некоторых частных случаях. Цикл планирования, опять-таки, ближе к двум миллисекундам, а не к двадцати. Команды, опять-таки, далеко не все распараллеливаются и далеко не все исполняются за такт. Ну и самое главное: единица планирования - нить (thread), а не процесс. Если у вас многопоточное приложение - можно получить конкуренцию за кэши внутри собственного приложения. Резюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано. Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2020, 20:12 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
fintank_ru Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата. а как я это могу контролировать? это в смысле в одну структуру не надо пихать result? а где мне его держать тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 14:39 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух fintank_ru Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата. а как я это могу контролировать? это в смысле в одну структуру не надо пихать result? а где мне его держать тогда? Можно попробовать использовать aligned_alloc() и указать в качестве кратного - 8 байтов. Вот тут пишут. https://en.cppreference.com/w/c/memory/aligned_alloc ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 14:49 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух fintank_ru Не надо в кеш-линию укладывать 7 лонгов которые надо умножить, а 8-й использовать для хранения результата. а как я это могу контролировать? это в смысле в одну структуру не надо пихать result? а где мне его держать тогда? У вас же C++: полный контроль над тем, как в адресом пространстве процесса будут лежать данные, к которым вы обращаетесь. Располагайте как угодно. Если кусок данных размером 64 байта начинается с границы 64 байт, то он будет лежать в кеш-линии целиком - вы же понимаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 15:22 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
madb полный контроль ещё скажите, что адреса им тоже я раздаю и где что в кэше лежит - тоже НЕ я решаю madb Располагайте как угодно. "как угодно" нельзя, ибо: fintank_ru Не надо в кеш-линию укладывать 7 лонгов, которые надо умножить, а 8-й использовать для хранения результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 01:25 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух ещё скажите, что адреса им тоже я раздаю Этого достаточно, чтобы выравнивание на 64 байта работало так, как вам хочется.и где что в кэше лежит - тоже НЕ я решаюНе занимайте глобальными супероптимизациями. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 10:00 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
да не очень то и хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 14:02 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух да не очень то и хотелось. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 16:47 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Изопропил полудух да не очень то и хотелось. На кеш почти нельзя придумать объективный тест. Вот анти-тест придумать легко. Одна из задач над которой я думал в процессе https://www.sql.ru/forum/1173809-1/tyapnichnyy-benchmark-cpu-part-1 это был бенчмарк памяти+кеша. Ноя так и не придумал объективную постановку. Тоесть такую которая хотя-бы была непохожа на Biosmemory test или на MemTest. Вобщем я искал нечто прикладное. Лежащее на рубеже языков и железа. Но так и не придумал. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 17:10 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Кеш понятие очень относительное Кроме кеша есть еще блоки процессора отвечающие за работу с памятью. Если процесс вычисления хорошо написан и инструкции достаточно слабо связаны между собой, latency обращения к памяти как бы и пофиг. Самое главное, что бы пенальти (простоя) по отсутвию предыдущего результата не было. IMHO Basil A. SidorovРезюмируя: если у вас нет возможности монопольно использовать процессор не надо пытаться делать "суперглобальные" оптимизации. Но это уже было сказано. Если вы работаете в виртуализированной среде - монополии у вас точно нет. А это - вполне частый (сегодня) сценарий. +++ Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском. "В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать" проблемы "КАК его максимально использовать?" нет. Т.к. наплодить мусор и забить им процессор - много ума не нужно Но практически как любой ресурс, чем меньше его приложение потребляет, тем в общем-то оно (и система в целом) будет быстрее работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 17:35 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Как альтернативный топик - я предлагаю также поднять вопрос что внутри ВАШЕГО бинарника ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 18:00 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Что бы понять некоректность вопроса в заголовки темы, достаточно привести паралелль с жестким диском. "В компьтере жесткий диск 5 TB, а мое приложение занимает только 100 Kb, как мне написать приложение. что бы его максимально использовать" это не параллель, а перпендикуляр в случае с кэшем ситуация будет полярно иной: кэш = 8мб, а приложение = 8 TB и если в вашем примере диск это кэш (на 5 TB ), то там можно виртуалку поднять, например... или супер-секретные шифры взламывать... или в пентагон вломиться... на крайняк - дом, хозяйство, БИЗНЕС построить А излишки - за рубёж продавать ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 21:43 |
|
|
start [/forum/topic.php?fid=57&msg=39911084&tid=2017358]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
150ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 278ms |
0 / 0 |