Как стать автором
Обновить
4
0
Сергей Куксенко @Walrus

Пользователь

Отправить сообщение
> из-за 4K-алиасинга с точки зрения кэша

Небольшой коммент: кэш ничего не знает про 4K-aliasing.
Это проблема store buffer'а
> Условно, перед проверкой на перекрытие данных, адресам делается & 0xFFF, и потом смотрится, есть ли их перекрытие. Так?

Так.

> Мне, логика подсказывает, что при этом объяснении просадка производительности должна быть когда копируешь между адресами кратными 4к, но судя по таблице — это самый лучший случай по производительности. Странно это.

4k-aliasing, не позволяет делать load пока не завершится store (в случае конфликта). То есть нас интересует load, который идет после store.
Если дельта == 4K. то все хорошо ибо:
1) load *+4K
2) store *+4K
3) load *+4K+32
4) store *+4K+32

Тут нет конфликтов по 4K-aliasing

Если дельта == 4K+1(2,15,16). то:
1) load *+4K
2) store *+4K+1
3) load *+4K+32
4) store *+4K+1+32

то у операций 2 и 3 адреса (в младших 12 битах) перекрываются. И значит load номер 3 ждет пока значение store номер 2 уедет из store buffer.
«Я, если честно, так и не разбирался с тем, как правильно собрать OpenJDK с нуля»
Скачал. потом
sh ./configure
make images
всё
Присылай как будет готово. ;) Любопытно.
А вот вопрос, зачем ты в последнем примере делаешь цикл на 8К? ;)
Сдается мне, что тут ты сгущаешь краски ;)
Ну еще совсем простой пример. David Dice рассказывал про случай, когда просто доступ к чужой NUMA пямяти на 8-сокетной системе (за 2 хопа) занимал > 1000 тактов.
У меня были примеры с денормалами. И если на SB & YB они нормально тормозили, то на haswell все стало быстро как с нормальными числами.
Кстати, а чего это Дюк в дамы записан? ;)
да, на хасвелле тоже есть. ;)
Ну и да — на памяти можно выиграть гораздо больше.
Тогда можно поймать «division trolling effect» :)
www.youtube.com/watch?v=RGFJjQKChNQ примерно с 50 по 65 минуты ;)
По первому куску вопросов нет.
А во втором — длина таблицы не выводится до степени двойки? Чтобы избавится от '%'.
Интересует выражение — путь от хэшкода до индекса ;)
Это то я понял. В генераторах лень разбираться. ;) Билдить тоже. Кинь сюда сгенерированный код для метода get() из мапы ;)
где можно точно посмотреть сорцы hftc мапы? качать лень, на гитхабе черт ногу сломит ;)
Раздумывал как-то не прикупить ли себе. Увидел клавиатуру — нафиг!
Мы тут JSR133 обсуждаем.
Но и в C++0x11 все работает (если правильно написать).
Во первых double check работает — вы просто не умеете его готовить.
А во вторых, да некий аналог на синхронизацию первого доступа есть. Но после того как класс инициализирован — он нам не нужен и его больше нет. Так что ничего медленного, никаких оверхедов. Java это managed runtime — что хотим, то и делаем (в пределах спеки).
Означаетли это что статические поля инициализируются до старта main функции?

Нет.

В противном случае, когда вызывается инициализация этих полей,

При первом обращении к классу.

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

Automagically

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность