|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2019, 20:23 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
У некоторых компиляторов есть специальные опции подсказывающие для какой платформы идет компиляция. Если твой конкретный процессор есть в списке ключей - хорошо, нет - пишешь сам расширение для компилятора. https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Submodel-Options.html https://clang.llvm.org/docs/CrossCompilation.html#target-triple ...etc ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2019, 21:17 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
[quote полудух#22052434] а код где? Или опять, теоретически использовать процессор, ядра и кэши. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 15:51 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
вопрос скорее общий, чем про какой-то случай... и я так понимаю, что проц сам порешает, сколько кэша ему надо т.е. он просто сможет реже сбрасывать старый кэш со структурами и векторами = меньше работы, только и всего ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 17:28 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
1) Из рекомендаций... я помню самая ценная - использовать структуры данных в памяти выровнянные (padded) на границу кратную 64 бит. Еще были какие-то инструкции компиллера наподобие __builtin_prefetch 2) Стараться делать доступ к памяти максимально локализованным. Вобщем .. читаете адресочек. Потом следующий за ним рядом e.t.c. Тоесть ... не бомбить по рандомным адресам по всей доступной памяти. Думаю сюда-де до кучи memory-mapped files. Фильтры Блума. Блочные кеши баз данных. 3) Далее.. просто мысли вслух. Я привел картинку (грубую) с топологией кешей разных уровне для процессора семейства Core i7. Рискну предположить что если вы локализуете своё приложение на ядрах 0 и 1 и поотстреливаете все процессы-конкуренты то кеши L2 - будут ваши. Что в общем случае - тоже оптимизация. Плохо или хорошо - обсудите. Вообще я-бы все таки пошёл от алгоритма а не от абстрактных рекомендаций. Так... если-б они были то любой программист выкручивал бы ручки кешей на максимум. Всё равно что nice для процесса понизить. Закончится лагами других процессов. Сеть начнёт лагать там... или диск. Вобщем как от добра искать добро. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 21:13 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton, это ты азы рассказываешь ) только далеко не все... структуры надо на 64 байт (а не бит), чтобы в cache-line влезали, и чтобы занимали его целиком. (это справедливо для 64-битных компов, у 32-битных cache-line на 32 байта) "последовательное считывание массива - самое быстрое, что может быть, и ничего быстрее не предвидится" это ещё Scott Meyers говорил тут: ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 21:24 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух, а ты каких советов ожидал? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 21:49 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Да согласен насчет 64 байт. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 21:57 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton полудух, а ты каких советов ожидал? да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать... ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё), а вот, например, через +4мб кэша можно что-то ускорить? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2020, 23:38 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудухчерез +4мб кэша можно что-то ускорить? Можно запустить на 4 мб больше кода. Не майся дурью, в любой современной операционке тебя их этого кэша выщемят за мгновение ока. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 01:10 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух mayton полудух, а ты каких советов ожидал? да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать... ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё), а вот, например, через +4мб кэша можно что-то ускорить? Последний год ведутся жестокие баттлы Intel-Vs-AMD. Железки отличаются конфигурациями ядер и кешей размерами и различного рода компоновок. Но мне кажется там невозможно выбрать лучшую или удачную конфигурацию потому что на одних тестах AMD показывает лучше перформанс. На других Intel. Вот мне кажется твой вопрос - надо переформатировать. Ты говоришь об "максимально использовать". А это неверная постановка. Ты - хочешь утилизации ресурсов. Это как в лекции Шипилева. Утилизация леса - это устроить пожар в лесу. Максимальная утилизация. Понимаешь да? Давай может в топик свой алгоритм и мы на него посмотрим под углом кешей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 11:58 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
да я как раз и смотрю на эту гонку между AMD и Intel-ом вот у AMD щас Ryzen, а там новые кэши, новые ядра ну и возникают вопросы к цене... вот, например, конфигурация: Ryzen 7 3700X/3800X ( стоит 25 тыр ) Технология изготовления 0.007 микрон Количество ядер 8 Количество потоков 16 Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции Кэш L2 (для каждого ядра) 512 КБ Кэш L3 2 x 16 МБ а вот Intel Core i9-9900K стоит уже под 80к , но при этом имеет в тестах такие же результаты (кстати, сам Intel имеет "Рекомендуемую цену для клиента" = $488.00 - $499.00 (для партий от 1000 штук)) Технология изготовления 0.014 микрон Количество ядер 8 Количество потоков 8 Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции Кэш L2 (для каждого ядра) 256 КБ Кэш L3 16 МБ т.е. Intel, чтобы догнать новый Ryzen, нужен core i9 за много денег (а core i7 9700K вообще жёстко сливает на -25%) так за что платим? Там вся начинка хуже. Не пора ли уже на AMD полностью переходить? особенно нам, программистам C++, который могут этот процессор напрямую "пальчиками пощупать" и полностью заюзать этот кэш (можем ведь?)... Раньше то я не был "настолько приближённым", а теперь вот проникся и всерьёз начал задумываться... Я правда щас говорю не про десктоп, а про серверные конфигурации, а там и процы другие, но всё таки Intel есть Intel и они явно УХУ ели. зы: Intel, кстати, щас выкатил новый сокет, который вообще никак не совместим со старым и на старую мать новый проц никак не поставить сами себе могилу копают... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 16:45 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги. Я думаю Интел обязан либо выкатить нечто особо значимое в следующих релизах либо скинуть цены. P.S. У меня на борту рабочей машинки дома стоит Ryzen-5. 6 ядер по 2 потока. ОС видит 12 логических CPU. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 17:00 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудухможем ведь? Не можем. См. выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 18:02 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Скорее пользу сложно посчитать. Вот со ссылкой на https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html This function is used to minimize cache-miss latency by moving data into a cache before it is accessed. You can insert calls to __builtin_prefetch into code for which you know addresses of data in memory that is likely to be accessed soon. If the target supports them, data prefetch instructions are generated. If the prefetch is done early enough before the access then the data will be in the cache by the time it is accessed. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 18:09 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
о, тяжёлая артиллерия в ход пошла, стало интересно... а почему они написали так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
а не так: Код: plaintext 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 18:37 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Надо смотреть ассемблерный код. P.S. Я вообще всегда предпочитаю сравнение "меньше" в пользу "не равно". Есть у меня свои критерии надёжности. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 18:41 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Страус топит за то, что != это более generic ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 19:34 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
ну а ++ почему в цикле ставят то слева, то справа ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 19:35 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Справа - традиционно. Слева - в темплейтах и макросах на случай если цикловая переменная окажется с перегруженным инкрементом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 19:44 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
т.е. в обычном for вообще пофигу? зы: не припомню темплейтов с ++ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 20:01 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудухе припомню темплейтов с ++ Каждый первый итератор. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 20:08 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Справа - традиционно особенности архитектуры PDP-11 - постинкремент регистра ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2020, 20:42 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух Страус топит за то, что != это более generic Пускай топит. Он итераторами считает циклы. А у меня в циклах - координаты пикселей экрана. Или вещественный параметр цикла типа double. Нахера мне его "топка" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 13:28 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton Надо смотреть ассемблерный код. мы уже как-то пытались... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 20:46 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
... тута ... в итоге пришли к тому, что asm знают 2.5 человека, и те предпочитают смотреть в сырцы... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 20:48 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Я тебе там про Cortex написал. Видел да? Так какой прикажешь ассемблер учить? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 21:24 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
но здесь же тебе не мешает Cortex "смотреть ассемблерный код" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 22:57 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Мы с тобой по разному помимаем пользу от реверс инжиниринга. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 23:01 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
а это возможно? там просто поток инструкций, и польза одна - понять, ЧТО именно будет "хавать" процессор ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 23:54 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух, Имеется ввиду польза в написании программного кода. Так кода нет, то и польза вопроса нулевая. Просто изучаем железо и архитектуру процессоров. авторВы не можете написать программу так, чтобы она случайно заиспользовала не весь кеш и пострадала от этого. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 09:03 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:31 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух, Тут был пост интересный. С кодом по ссылке. Глюки. Не вижу его. Забей. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 13:39 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Хм... странно. Мне тоже утром показалось что кто-то писал развёрнутый пост по кешам. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:20 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Тут много основ и ссылок на более подробные статьи. https://stackoverflow.com/questions/16699247/what-is-a-cache-friendly-code ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:36 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, спасибо большое. Эх некому занятся систематизацией знаний или написанием FAQ по тем вопросам которые уже здесь обсуждались. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 14:37 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
а вот если у меня есть 10 векторов с данными по 10кб каждый... и в каждом цикле используется 1-2-3 из них, но разные и есть всяких других данных гигабайты, из которых в каждом цикле собираются небольшие строки в несколько кб, включая те 1-2-3 вектора... могу ли я эти 100кб векторов принудительно запихнуть в L3, например, как гарантированно постоянно используемые? или это нецелесообразный про*б кэша? или это сделает сам проц/компилятор? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 16:04 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полагаю, он сам их положит куда надо, как часто используемые (и наверное даже в L2/L1 частично) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 16:11 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудухмогу ли я эти 100кб векторов *принудительно* запихнуть в L3, например, как гарантированно постоянно используемые? Можешь. Тем самым префетчем. Но толку от этого как от козла молока если через один тик шедулера процессор будет отдан другой задаче, которая вытеснит их из кэша обратно. Повторюсь: для максимального использования кэша надо в первую и главную очередь пристрелить всех конкурентов и получить процессор в монопольное распоряжение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 17:10 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Повторюсь: для максимального использования кэша надо в первую и главную очередь пристрелить всех конкурентов и получить процессор в монопольное распоряжение. это ты так с false sharing борешься? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 18:27 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух а вот если у меня есть 10 векторов с данными по 10кб каждый... и в каждом цикле используется 1-2-3 из них, но разные и есть всяких других данных гигабайты, из которых в каждом цикле собираются небольшие строки в несколько кб, включая те 1-2-3 вектора... могу ли я эти 100кб векторов принудительно запихнуть в L3, например, как гарантированно постоянно используемые? или это нецелесообразный про*б кэша? или это сделает сам проц/компилятор? Компиллятор вряд-ли сделает тут что-то полезное. Все такие это больше в плоскости рантайма происходит. Подумай вот над следующим. Я буду оперировать терминологией Linux. Мне так удобнее. 0) Допустим у тебя есть Intel Core i7 с профилем железа как я привел выше на картинке. 1) Для конфигурации init.d и всех сервисов которые запускаются при старте мы используя taskset (или подобный функционал) ты защёлкиваешь affinity на ядрe Core=0. Графическое окружение и все офисные приложения также. 2) После этого согласно таск-менеджеру все системные процессы висят на Core-0. 3) Все твои пользовательские процессы запускаешь с affinity=1,2,3 Таким образом кеши L1/L2 для трех ядер будут твои. А для L3 будет необходимость (увы) частично шарить ресурсы ОС в 3-м слое L3. Ссылки по теме. http://man7.org/linux/man-pages/man1/taskset.1.html https://stackoverflow.com/questions/7759948/set-affinity-with-start-affinity-command-on-windows-7 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 19:16 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Нарисовал такую сравнительную шпаргалку по размерам регистров общего назначения, кеш линиям а также сетевой пакет (MTU) и единица операции различных подсистем I/O. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 21:57 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Главное забыли: размер страницы (2Кб) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:23 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
bk0010 Главное забыли: размер страницы (2Кб) На интеле 4КБ или 4МБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:36 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Хороший вопрос. Каким API мы можем посмотреть этот т.н. размер страницы? Всегда ли это одно и тоже понятие или может быть их несколько для одной ОС ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:37 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Размер страницы задается при выделении памяти (параметром в mmap). По умолчанию 4КБ (почти на всех архитектурах со страничной адресацией). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:42 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton Каким API мы можем посмотреть этот т.н. размер страницы? getconf PAGE_SIZE getconf PAGESIZE ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:52 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух, У меня - 4096. В рамках сбора статистики. Коллеги. Дайте сведенья что у вас и почем. Кеш-линии архитектурно тоже разные. От 32 до 128 байт. Но умные статьи сообщают что популярным являет собой размер 64 байт. Подозреваю что 32 это что-то ну очень-очень старое. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 22:57 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton Хороший вопрос. Каким API мы можем посмотреть этот т.н. размер страницы? Всегда ли это одно и тоже понятие или может быть их несколько для одной ОС ? для винды - GetSystemInfo GetLargePageMinimum одновременно могут использоваться разные размеры страниц ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 23:34 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Ребята-виндузятники. Поделитесь цифрами plz. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2020, 23:37 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#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 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух, А на первую часть его поста почему не ответил?) Профит какой от твоего кеша? Абстрактная производительность процессора в попугаях? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 07:46 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Профит какой от твоего кеша? Старый, но показательный пример. Во времена пней-четыре считала некая контора задачи: вечером ставят, к обеду следующего дня обсчёт заканчивается. Появился у них процессор типа "ЭкстремЭдишен" (удвоенный объём кэша второго уровня) и те же самые задачи стали обсчитываться ещё до начала рабочего дня. Если правильно помню, то было тринадцать часов счёта, а стало - восемь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 11:38 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Ну я и сказал - производительней процессор. Понятно что вылилось в "счёты". Непонятно привязка производительности процессора к программированию. Разве это входной параметр при написании программ? Это константа или начальные условия (НУ). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 11:56 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
полудух у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ? Н И К А К ! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 12:27 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
MasterZiv, ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 12:52 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Ну я и сказал - производительней процессор. Или вы тоже считаете, что окружающие если не тупее паровоза, то сильно тупее вас? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 12:57 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Вы под производительностью понимаете тактовую частоту. Я в данном контексте про комплексную характеристику в попугаях. Тут вы добавили ещё мЕрило тупости.)) Это все вы придумали. Не я. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 13:30 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Как всё запущено ... Развёрнутый ответ набивать не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 13:35 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Как всё запущено ... Развёрнутый ответ набивать не буду. Да. Все выше уже сказано. Можно еще пр количество ядер порассуждать. Однако MS и тут сделала автомат и прогеру особо думать не надо. Конечно есть исключения. Если что. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2020, 13:39 |
|
размер кэша - КАК его максимально использовать?
|
|||
---|---|---|---|
#18+
mayton Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги. ну походу интел слился ... чё-то они вообще забили по всем фронтам... продают фуфло по завышенным в разы ценам авторЕдинственные действительно новые процессоры в этой линейке — это 10-ядерные Core i9-10900 и Core i9-10900K. Все остальные — это по сути аналоги топовых или предтоповых решений предыдущих поколений, которые теперь будут продаваться по сниженным ценам. С другой стороны, несмотря на большую презентацию десятков новых моделей, все прекрасно видят технологическое отставание Intel. Новые процессоры по прежнему производятся по устаревшему технологическому процессу 14 нм на той же старой архитектуре Skylake образца 2015 года, которая для своего времени была отличным достижением, но с тех пор практически не совершенствовалась: Kaby Lake (7-ое поколение) и Coffee Lake (8-ое и 9-ое поколения) архитектурно почти не отличаются от Skylake. В то же время AMD уже год выпускает процессоры с нормой 7 нм, а осенью 2020 года мы должны увидеть чип Apple A14 на 5 нм. Компания AMD представила новую архитектуру Zen 2 и десктопные процессоры с числом ядер до 16. Так, новые процессоры Intel не смогут сравниться по производительности с 16-ядерным Ryzen 9 3950X. Конкурента для этого топового процессора Intel так и не выпустила. Хотя Intel в официальных характеристиках указывает максимальное тепловыделения 125 Вт, первые независимые тесты указывают на гораздо больший TDP. Например, Core i9-10900 на частоте 4,6 ГГц нагревается до 93 °C и потребляет 220 Вт, как видно на скриншоте: ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2020, 21:29 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017358]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
95ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 430ms |
0 / 0 |