|
|
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonвы согласны? Согласен с чем ? С тем что увеличение производительности это уменьшение времени работы ? Ну в большинстве случаев да. Хотя наверное можно ставить в качестве задачи и количество занимаемой памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 14:18 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Семен.Семеновичmaytonвы согласны? Согласен с чем ? С тем что увеличение производительности это уменьшение времени работы ? Ну в большинстве случаев да. Отлично. Хотя наверное можно ставить в качестве задачи и количество занимаемой памяти. Нет-нет. Мы тогда запутаемся. Оптимизация памяти - это другая задача. И если у нас была мемоизация как часть оптимизации перформанса, то оптимизация памяти в первую очередь ударит по вопросу хранения расчетных данных, материализовнных views, программных кешей и прочее. А это автоматически приведет нас к отказу от цели №1. Тоесть цель №1 любыми средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 14:25 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonТоесть цель №1 любыми средствами. Не всегда. Иногда качеством кода не жертвуют ради выигрыша в 10 мс. Зависит от людей. Но в целом да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 14:31 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
ОК. Продолжим. Мне сложно оперировать с сферическим железом в вакууме. Поэтому я буду опираться на конкретное. Я приаттачу скрин с описанием железа вполне себе бюджетной рабочей станции и попробую порассуждать что там есть и что я могу использовать для оптимизации кешей (пока без привязки к ЯП). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 15:06 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Что нам будет интересно. 1) Количество ядер и количество threads. 2) Размеры кешей данных L1/L2/L3. Топология. Я нагуглил картинку которая по чистой случайности действительно соответствует архитектуре кешей Intel-Core-i3. Она не полная. Но если что - дорисуем на ней недостающие связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 15:10 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Глядя на вторую картинку. Можно заметить что несмотря на 4 вычислительных CPU-Thread Здесь по терминологии. В разных книгах по железу очень часто путают процессы и потоки. В Windows/Unix архитектура потоков также отличается и во избежание терминологических споров я буду писать CPU-Thread имея в виду одно из четырех модулей или АЛУ которые нарисованы на картинке и отдельно я буду писать Java-Thread имея в виду другое. У Елизаорва или Куксенко (я не помню щас точно) есть утверждение о том что для AMD например такое понятие как ядро (Kernel) уже давно стало маркетинговой приманкой и в реальности размыто и не соответствует понятию ядра в "старых" системах. Тоесть это точно не процессор. Поэтому и я расслаблюсь и не буду ни с кем спорить. Я просто аппелирую к картинке и топологии. Есть какая-то хрень имеющая свойсва АЛУ и она СЧИТАЕТ и она использует кеши. Остальное мне не важно. Посмотрите. На картинке Core0 содержит внутри себя Thread-0,Thread-2. При этом вся эта система топологически связана с кешом данных L1 размером 32к. И кешом L2 размером 256к. Далее. Гипотеза 1. Реально мы можем без конкуренции использовать только 2 процесса(потока) операционной системы которые мы должны закрепить строго за определённым набором CPU-Threads. САВ должен конфигурироваться исходя из имеющейся топологии. По определенным причинам. Меня не устраивает работа стандартного Windows-диспетчера. Специфика задачи такая что Я решаю где стартовать поток и для меня это ВАЖНО. Но я полностью признаю пользу автоматической диспетчеризации для других потоков ОС. Далее. Гипотеза 2. Существуют посторонние процессы ОС и той-же JVM которые влияют на L1/L2 результат нашей разработки САВ. Я не знаю что с этим делать! Я не знаю как минимизировать их влияние! Я предполагаю что только объем транзакций по памяти и их кучность позволит мне в какой-то мере владеть данными в L1/L2 Отсюда следует что САВ должен максимально МНОГО и ИНТЕНСИВНО использовать L1/L2. САВ должен состоять из 2х вычислительных потоков (Worker-Threads) которые должны быть закреплены за физическими CPU-Threads 0,2. САВ должен в каждый момент времени наполнять L1/L2 актуальным стеком информации нужным ТОЛЬКО для решения его (САВ) задачи. Далее я беру паузу. И занимаюсь для себя этим вопросом. А именно. - можно ли закрепить конкретный java-thread за определённым набором CPU-Thread. - покурить taskset - покурить start - покурить JavaProcessBuilder - покурить опенсорцные библиотеки affinity для Java и нативного кода. У кого есть мысли по поводу Гипозез - прошу пишите каменты. P.S. Картинка с топологией неполна. Я-бы дорисовал больше связей. Если у кого есть мысли - пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 15:38 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonЧто нам будет интересно. 1) Количество ядер и количество threads. 2) Размеры кешей данных L1/L2/L3. Нет. Автор темы не понял задачу и неправильно её поставил. В действительности ему не надо измерять процент попаданий в кеш. Но если ему охота заниматься фигнёй, то зачем ему давать советы, как это лучше делать. Пусть организация, в которой он работает, и даёт ему задания на фигню. Я уже примерно объяснил, что на самом деле нужно. Повторяю, чтобы здешний флейм кого-нибудь не сбил с толка. Для выскопроизводительных вычислений нужно распараллеливание вычислений. Оно бывает в кластере компьютеров, внутр компьютера между процессорами/ядрами, и внутри GPU. Эти способы могут применяться и совместно. Например, в библиотеке машинного обучения Microsoft CNTK есть одновременное распараллеливание в кластере, между несколькими GPU в одном компьютере и внутри GPU (библиотеки машинного обучения требуют большого объйма вычислений, поэтому их авторы стараются применить распараллеливание). При распараллеливании производительность обычно растёт медленнее числа процессоров (правило Амдаля). Но иногда наблюдается явление суперлинейного ускорения - когда приозводительность растёт быстрее числа процессоров). Оно вызвано тем, что для распараллеливания набор данных делится на части и размер одной части может стать достаточно маленьким для её попадания в кеш. Подробно об этом написано в литературе по высокопроизводительны вычислениям. Но суперлинейное ускорение не очень важно - если и есть, то даёт прирост корости в проценты, ну в десятки процентов. Важнее избежать ошибки "ложного распараллеливания", когда программа кажется распараллеленной, но на самом деле нет из-за общих переменных и других причин. В таких случаях производительность растёт медленнее чем по правилу Амдаля. Это явление надо обнаружить и устранить вызвавшую его ошибку. Итак, надо разработать способ распараллеливания. При этом требование испольщовать только Java - глупость,показывающая неготовность автора темы решать задачу. Довольно успешная библиотека машинного обучения H2O написана на Java, но для организации работы в кластере использует Hadoop. На этом участие в теме прекращаю ввиду её флеймовости. Автор может сколько влезет размышлять о свойствах кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 15:49 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Partisan MНет. Автор темы не понял задачу и неправильно её поставил. Какую задачу я не понял ? Я начинал с какой то задачи ? Еще раз повторю - правильность понимания задачи проверяйте у своих джунов. Partisan MВ действительности ему не надо измерять процент попаданий в кеш. В действительности чем больше мы работам с кешом тем сильнее наблюдаем прирост производительности - это и ежу понятно. Partisan MНо если ему охота заниматься фигнёй, то зачем ему давать советы, как это лучше делать. Пусть организация, в которой он работает, и даёт ему задания на фигню. Фигня это нанимать таких псевдоэкспертов как Вы. Это и ежу понятно что в случае распараллеливания и деления вычислений на чанки мы получаем прирост производительности. https://ru.wikipedia.org/wiki/Green_threads Вот Вам еще ссылка по теме, как раз выделением кванта времени под каждую задачу. Тут еще бонусом и уход от Context Switching получаем. Только какое это имеет отношение к задаче ? Мы не всегда можем распараллелить то что уже и так распараллелено и дальше начинаем ускорять внутри одного потока. Далее встает вопрос об организации хранения структур которые будут обрабатываться одним тредом (без распараллеливания). Все тот же вопрос про LinkedList и ArrayList. Эксперт блин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:03 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Partisan M, спасибо за мысли. Я думал про GPU. Я конечно погорячился когда сказал что рассуждаю безотносительно ЯП и алгоритма. Язык появляется когда ты думаешь как это реализовать для бизнеса. Я читал разные статьи по майнинг биткоинов и криптографические задачи с использованием Nvidia/CUDA e.t.c. Но у всех у них есть своя специфика. Например - очень хороший параллелизм. Например можно запустить на 512 ядрах подбор пароля по хешу. При этом каждое ядро имеет свой диапазон паролей. При довольно средней производительности каждого CPU, общая производительность умножается на 512. То-же самое с рисованием текстур. Каждый процессор рисует отдельную свою текстуру в общую память. Блокировок по памяти нет. Там - грязный доступ. Поэтому все очень красиво летает и бегает. Ну вобщем я сначала сделал ошибку обозвав наш алгоритм САВ. Действительно майнинг паролей и рендеринг текстур тоже подходят под определение САВ. Но я думаю что такой класс алгоритмов нам не подходит. Семеныч? Что скажешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:06 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonДалее. Гипотеза 1. Реально мы можем без конкуренции использовать только 2 процесса(потока) операционной системы которые мы должны закрепить строго за определённым набором CPU-Threads. Да, мопвашуять, не ваша эта проблема! СтоИт у меня на полке книга, оригинал которой был издан в 1997 (2-е издание), а перевод - в 1998. И уже там рассказывается, что нормальный планировщик потоков нормальной системы обязан учитывать сродство кэшей (cache affinity). Вы (и особенно автор топика) правда считаете, что аппаратные счётчик, доступ к которым сурово зависит от операционной системы надо обсуждать в рамках виртуальной ява-машины? Может, объясните, мне, убогому, чем профилирование одной разделяемой библиотеки отличается от профилирования другой разделяемой библиотеки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:06 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonСеменыч? Что скажешь? А что тут сказать. Фейспалм да и только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:08 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Семен.СеменовичВ действительности чем больше мы работам с кешом тем сильнее наблюдаем прирост производительности - это и ежу понятно. В бытность своего занятия Dbms Oracle мы часто сравнивали две ентерпрайзные БД по т.н. Buffer Cache Hit Ratio. И вот что мы заметили. На очень плохих по перформансу БД этот коэффициент был великолепен и на хороших он был - так себе. Это не было системой. Было и наоборот. И это не было искусственной накруткой счетчика. Просто так легли карты. Была одна бестолковая транзакция которая долбила в какой-то блок и поднимала счетчик ввысь. Но эта ее бестолковость не делала пользы для продуктивной БД в целом. И я для себя сделал вывод. Мы можем смотреть в этот счетчик. Но в совокупности с другими метриками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:13 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovmaytonДалее. Гипотеза 1. Реально мы можем без конкуренции использовать только 2 процесса(потока) операционной системы которые мы должны закрепить строго за определённым набором CPU-Threads. Да, мопвашуять, не ваша эта проблема! СтоИт у меня на полке книга, оригинал которой был издан в 1997 (2-е издание), а перевод - в 1998. И уже там рассказывается, что нормальный планировщик потоков нормальной системы обязан учитывать сродство кэшей (cache affinity). Вы (и особенно автор топика) правда считаете, что аппаратные счётчик, доступ к которым сурово зависит от операционной системы надо обсуждать в рамках виртуальной ява-машины? Может, объясните, мне, убогому, чем профилирование одной разделяемой библиотеки отличается от профилирования другой разделяемой библиотеки? Василий. Я тебя умоляю... Я-же пишу. Гипотеза. Это значит что я ПРЕДПОЛАГАЮ что это так. И вообще. Зачем так бурно реагируешь? Давай - пиши опровержение. Я не против. Но только без лишних эмоций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:16 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Семен.СеменовичmaytonСеменыч? Что скажешь? А что тут сказать. Фейспалм да и только. Да я не про это. Я про то что САВ нам в топике не подходит. Нам нужен бизнес-САВ. БСАВ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:21 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonЗачем так бурно реагируешь?Потому, что толерантность хороша только гомеопатических дозах. Если человек гонит пургу - не надо выискивать жемчужное зёрнышко в навозной куче. Если человек занимается финальной оптимизацией - его квалификация должна быть на соответствующем уровне. Он же не домашним хобби занят и не фрилансит задёшево. Или когда сеньор задаёт вам юниорские вопросы, вы тоже начинаете терпеливые объяснения основ? Или, всё-таки, указываете на неполное служебное? Ну и старое правило нетикета не надо забывать: "Правильно сформулированный вопрос должен содержать, как минимум, половину ответа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:24 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonСемен.Семеновичпропущено... А что тут сказать. Фейспалм да и только. Да я не про это. Я про то что САВ нам в топике не подходит. Нам нужен бизнес-САВ. БСАВ. Мой опыт показал, что существует теоретический подход к правильной организации данных в памяти. И этот подход не зависит ни от операционной системы, ни от бизнес задачи. Можно сколько угодно обсуждать что на Земле каждый день меняется температура, однако законы термодинамики при этом не меняются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:25 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПотому, что толерантность хороша только гомеопатических дозах. Если человек гонит пургу - не надо выискивать жемчужное зёрнышко в навозной куче. Золотые слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:26 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Семен.СеменовичМой опыт показал, что существует теоретический подход к правильной организации данных в памяти. И этот подход не зависит ни от операционной системы, ни от бизнес задачи. Можно сколько угодно обсуждать что на Земле каждый день меняется температура, однако законы термодинамики при этом не меняются. Смотри. Выше Партизан написал дескыть при правильном параллелизме - берите Хадуп и всё у вас летает. Все верно. Он попал пальцем в небо. Но он говорил об классе задач. Это задачи с высокой степенью параллелизма. Это все что соответствует map-reduce. Это select ... group by. Это аналитика. Это копание биткоинов и подбор паролей. Эти все задачи идеально параллелятся. Особенно если читаемые данные редко пересекаются. Но я щас говорю не о задачах параллелизма а о задачах concurrency. Когда идет OLTP. Когда идут интенсивные модификации памяти. Когда есть много блокировок. Когда данные пересекаются постоянно и много. Когда LRU. Когда EhCache. Когда InfiniSpan. Вот о чем я. Я изначально говорил о другом КЛАССЕ задач. Так вот я тебя повторно спрашиваю. Тебе нужен какой класс задач? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:32 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonТак вот я тебя повторно спрашиваю. Тебе нужен какой класс задач? Для какого класса задач создали ArrayList ? Да для любого правда ? Зачем задавать такие вопросы ? Считайте что я пишу JDK коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:35 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Семен.СеменовичСчитайте что я пишу JDK коллекции. Ну хоть какая-то ясность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:36 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Представляю себе ДагаЛи пишущего ArrayList. "Ой блин зачем я тут думаю о кеш локалити - можно же распараллелить работу с эррей листом - закон же ландау у меня и чанки. Гуру со скуля там че то умное про это писали." Цирк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:36 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39510030&tid=2122635]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 434ms |

| 0 / 0 |
