2012-06-16 5 views
0

Есть ли способ в java проверить, находится ли конкретный объект в кэше процессора? Есть ли способ проверить, будет ли чтение/запись одного из его полей пропускать кеш?Как проверить, находится ли объект в кэше процессора?

Я написал java-программы в прошлом, но не сложные, и теперь мне нужно сделать некоторые академические исследования в java.

Если это невозможно, существует ли общий способ моделирования такого рода вещей? И возможно ли это в низкоуровневом программировании, таком как C?

+0

Java-программы все работают на виртуальной машине ... так что просто, нет. – Brendan

+2

Я был бы в шоке, если бы был способ сделать это. Такие детали должны быть скрыты от программиста ... –

+1

Я не уверен, что это возможно даже на C или даже на сборке. Любая попытка «проверить» адрес автоматически приведет его в кеш. – Mysticial

ответ

6

TL; DR - Нет

В Java виртуальная машина защищает вас от CPU поэтому этот вид информации низкого уровня, в соответствии с проектом, не подвергается воздействию программы.

Кроме того, даже если вы переходите на более низкоуровневые языки (например, C) и используете некоторые хакеры на уровне сборки, я не могу себе представить, где вы могли бы получить значимые данные о статусе кеша по следующей причине: кэш является динамическим - в него непрерывно загружаются новые данные, и (более старые) данные непрерывно очищаются от него. В каждый данный момент у вас есть несколько процессов, выполняющихся поверх вашего процессора, каждый из которых порождает хотя бы один поток (возможно, более того) - объединенная активность всех этих потоков влияет на кеш и данные, хранящиеся в нем.

Таким образом, даже если вы могли бы получить ответ Y/N на вопрос is object X in cache, тогда этот ответ станет устаревшим в тот момент, когда вы его получите.

+0

Есть ли способ узнать о пропуске кеша после того, как это произошло? – Oren

+0

Какова его ценность, память блокнота и инструкции кэширования MIPS являются примерами того, как некоторые процессоры отображают кеш для приложения. –

+0

@ Только вы можете проверить пропуски кеша, используя MEM_LOAD_RETIRED.LLC_MISS perf. счетчик (для кеша L3) от VTune или любого другого профилировщика. – Elalfer

0

Как уже говорили другие: нет.

И даже если вы можете запросить кеш для конкретных данных, theres не знает, весь ли объект находится в кеше, потому что такого понятия на таком низком уровне нет.

 Смежные вопросы

  • Нет связанных вопросов^_^