|
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 138
|
|
Узнать, находится ли в кеше процессора переменная?08.08.2017, 16:44. Показов 3133. Ответов 44
Метки нет (Все метки)
Добрый день.
Есть ли возможность узнать, находится ли в кеше процессора переменная? Время доступа к ней постоянно "пляшет". То быстро, то очень долго, хотелось бы выявить точную причину. gcc 4.8 Добавлено через 47 минут Частично помогло выравнивание структуры. Сократило большую задержку вдвое.
0
|
|
| 08.08.2017, 16:44 | |
|
Ответы с готовыми решениями:
44
Сколько раз находится одна и таже переменная в строчке? Переменная не выводится, если определенная строка находится в теле условия Пустая переменная,как узнать ее значение? |
|
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 138
|
||
| 15.08.2017, 15:59 [ТС] | ||
|
по моему опыту, это достаточно сильно влияет. Много тестировал.
0
|
||
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
|
| 15.08.2017, 16:00 | |
|
Evg, в общих чертах да, все верно говорите, но сейчас то речь о конкретной задаче, и не каждому менять придется найс.
Да и в общем это просто как suggestion, а не призыв к действию. Добавлено через 14 секунд Evg, в общих чертах да, все верно говорите, но сейчас то речь о конкретной задаче, и не каждому менять придется найс. Да и в общем это просто как suggestion, а не призыв к действию.
0
|
|
|
|
||||
| 15.08.2017, 16:10 | ||||
|
0
|
||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 15.08.2017, 16:33 | |
|
Смысл в том, что CPU работает над данными которыми Вы ему даете (нет магии), а значит Вы можете сказать будут ли Ваши данные в кеше, в том или иной момент.
0
|
|
|
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 138
|
||
| 15.08.2017, 16:38 [ТС] | ||
|
Если взять за то, что в кэш из памяти читается объем равный кэш линии, то в принципе все хорошо. Когда я беру нужный элемент массива, то по идее и последующие N элементов тоже попадают в кэш (в пределах кэш линии). И я столкнулся с тем, что что концовки массивов из за неправильного выравнивания лежали в другой области памяти. Последовательность нарушалась. И при обращении к этому куску я испытывал всплески по времени доступа, так как из за нарушения последовательности хранения в памяти, закешированности не было. Тут я уже доскональна свою ситуацию разобрал.
0
|
||
|
|
|
| 15.08.2017, 16:40 | |
|
prefetch как раз и нужен для того, чтобы быть уверенным, что данные с очень большой вероятностью попадут в кэш к тому моменту, когда они реально понадобятся. Разумеется, при условии правильного использования prefetch'ей. Если читать данные в следующем такте после prefetch'а, то толку от prefetch'а не будет. Точно так же если читать данные через миллион тактов
0
|
|
|
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 138
|
|
| 15.08.2017, 16:52 [ТС] | |
|
Чтобы не плодить тем, в продолжении темы.
Если вызывать метод какого то класса, то первый вызов всегда будет долгим. И долгим будет не именно выполнение этого метода, а именно вызов. Сразу последующие вызовы происходят мгновенно. У меня на уме только две причины: 1) Параметры метода нужно засунуть в стек. Это опять же вытащить их из памяти. 2) Я так понимаю у каждого метода тоже есть свои адреса. И доступ к нему то же время. Может есть соображения, как от этой задержки уйти? Понимаю, что можно метод держать "горячим", вызывать его в холостую каждый N интервал времени. Но может есть покрасивее вариант, на примере того же prefetch? (в prefetch я уже побывал передать адрес метода, пока не закомпилилось)
0
|
|
|
|
|
| 15.08.2017, 17:14 | |
|
Тут по идее речь идёт о кэше инструкций. Толком ничего по этому поводу не нашёл. Возможно, из-за того, что предподкачка может выполняться другими средствами. Читал как-то описание, не факт, что оно от интела, но вполне возможно, что на разных процессорах сделано более-менее одинаково
Когда операция call исполнилась в первый раз, то в специальную табличку заносится пара адресов: адрес самОй команды call и адрес, куда случился переход (вызов). Далее когда этот же самый call исполняется второй раз, то случается следующее. Как только call попадает в конвейер, то происходит проверка в табличке. Там видно, что в недалёком прошлом из этого адреса случился переход на такой-то адрес. Это выясняется очень рано - чуть ли не раньше стадии fetch в конвейере. Т.е. исполнительное устройство ещё не знает, что за операцию мы тут будем исполнять, но механизм с табличкой уже сработал и говорит о том, что недавно из этого адреса был переход на метод. И в этот самый момент включается предподкачка к кэш инструкций. Т.е. к моменту, когда операция call дошла до стадии исполнения (а на это в конвейере уходит довольно много тактов) по адресу перехода код уже либо попал в кэш, либо близок к этому. Если код по этому адресу изменился и это была не операция перехода или переход по другому адресу - ну извиняйте, не угадали Но не помню, какими умными словами сия нанотехнология называется
2
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
| 15.08.2017, 17:17 | ||||||
|
Что-бы убрать задержку, Вам нужно точно знать что ее вызывает. Исползуйте systemstap(dtrace), ftrace что-бы посмотреть поначалу не ядро ли это (не происходит ли cs/page fault/interrupt).
В конкретно описанном Вами случае звучит как page_fault
1
|
||||||
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
|
| 15.08.2017, 17:17 | |
|
karat39, это понятие локальности кода. Кеш так же существует и для кода. Когда по коду меньше ветвлений if-ов и длинных переходов, то кеш кода практически так же работает, как и кеш данных - рядом идущие инструкции кешируются. Почитай про __builtin_expect(), например.
1
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
| 15.08.2017, 17:19 | |
|
0
|
|
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
|
| 15.08.2017, 17:21 | |
|
0
|
|
|
6 / 6 / 2
Регистрация: 09.02.2016
Сообщений: 138
|
|
| 15.08.2017, 17:23 [ТС] | |
|
Всем спасибо. Исследую, о результатах доложу.
0
|
|
|
|
||||
| 15.08.2017, 17:37 | ||||
|
Хотя, возможно ты имел в виду page miss. Это тоже может влиять
0
|
||||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||
| 16.08.2017, 11:50 | ||
|
0
|
||
| 16.08.2017, 11:56 | |
|
0
|
|
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|||
| 16.08.2017, 12:02 | |||
|
https://en.wikipedia.org/wiki/Page_fault
0
|
|||
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|||||||||||
| 16.08.2017, 12:17 | |||||||||||
|
Давайте разбиратся.
1. Выделение через new это выделение виртуального адресса? 2. Возможное обращение по this в функции нужно замапить на реальный адресс? п.с. Даже так. Я забыл про конструктор pf будет на конструкторе. Добавлено через 5 минут
Короче основная идея была в том, что перед тем как лезть в ЦПУ. Нужно подумать о ядре.
1
|
|||||||||||
|
|
|||
| 16.08.2017, 12:24 | |||
|
В моём понимании тут дело такое: 1. Если виртуальный адрес некорректный (т.е. не было выделено виртуальной страницы с таким адресом), то вызывается page fault и приложение убивается 2. Если физическая страница, соответствующая виртуальному адресу, в памяти отсутствует (т.е. либо ещё не было ни одного обращения, либо она в swap'е), то случается page miss, после чего передаётся управление в ОС, а там происходит выделение или подкачка нужной физической страницы Думается, тебе это всё и так известно. И начинают меня терзать сомнения насчёт того, что тут исключительно вопрос терминологии. Возможно, что в разной литературе (а может даже и в разных ОС) одни и те же вещи называют разными словами
1
|
|||
| 16.08.2017, 12:24 | |
|
Узнать в какой области видимости объявлена переменная
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|