Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 22.04.2018, 18:12   #1
lerneree
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 18
Репутация: 10
По умолчанию команды ассемблера для работы с кешем процессора

Здравствуйте!
подскажите пожалуйста какие возможности есть в ассемблере для работы с кеш памятью процессора разного уровня.
также какие есть возможности и утилиты чтобы узнать обем кеш памяти и ее быстродействие.
Спасибо
lerneree вне форума   Ответить с цитированием
Старый 22.04.2018, 21:16   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,139
Репутация: 938
По умолчанию

Цитата:
Сообщение от lerneree Посмотреть сообщение
какие возможности есть в ассемблере для работы с кеш памятью
Intel® 64 and IA-32 Architectures Software Developer’s Manual
Volume 2 (2A, 2B, 2C & 2D): Instruction Set Reference, A-Z
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 22.04.2018, 21:20   #3
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,139
Репутация: 938
По умолчанию

кэш работает на аппаратном уровне и программисту не доступен.
поэтому всё-что ты можешь - это только очистить его, чтобы поддержать когерентность, когда вносишь какие-нибудь изменения в системные структуры.
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 23.04.2018, 14:41   #4
lerneree
Пользователь
 
Регистрация: 26.03.2018
Сообщений: 18
Репутация: 10
По умолчанию

спасибо печально что не доступен
lerneree вне форума   Ответить с цитированием
Старый 23.04.2018, 22:05   #5
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Можно ещё сделать предварительную загрузку памяти в кэш (prefetchXX) или выполнить какие-то операции минуя кэш (movntXX).
Очистка кэша (wbinvd, invd) доступна только из CPL0.
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Старый 24.04.2018, 16:01   #6
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,139
Репутация: 938
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
загрузку памяти в кэш (prefetchXX)
Инженерам Intel конечно-же виднее, но на мой взгляд они добавили эту инструкцию чисто для кол-ва, и толку от неё никакого. Какой смысл предварительно загружать строку данных в кэш?

Сейчас, в большинстве систем, алгоритмом замещения данных в кэш является LRU - Least Recently Used, что переводится как "Вытеснение давно неиспользуемых". У каждой/64-битной кэш-строки имеется бит-возраста, который проверяется кэш-контроллёром для очистки строк.

Теперь, если использовать "Prefetch" заранее, то пока EIP дойдёт до этих данных, процессор уже давно может избавится от них, и программе придётся опять загружать их по-новой. Смысл? ..а он в том, что чем больше инструкций поддерживает ЦП, тем он считается круче, и за него можно выручить по-больше (у)битых (е)нотов. И таких инструкций в процессоре хоть пруд-пруди - от них не холодно, не жарко.
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 24.04.2018, 16:03   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,550
Репутация: 1916

icq: 216409213
По умолчанию

Если префетч делать не на старте программы, а перед циклом, то вполне себе остается.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 24.04.2018, 17:14   #8
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,469
Репутация: 1533
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Какой смысл предварительно загружать строку данных в кэш?
Как по мне в этой команде нет смысла.

Мои предположения:
1. AMD попросила добавить эту команду.
AMD долгое время не использовал спекулятивное исполнение(опережающее)
Поэтому данная команда при копирование больших блоков давала прирост. У них даже код в гуиде по оптимизации был приведён. Более того это подогревало интерес к NUMA. При больших объемах копирования Prefetch здорово ускорял. Правда кому надо копировать гигабайты?
2. Для отладки процессора. - так себе теория. Так как к тому времени отладка была уже программной.

Цитата:
Сообщение от p51x Посмотреть сообщение
ли префетч делать не на старте программы, а перед циклом, то вполне себе остается.
У интела опережающее исполнение. Он загрузит данные в кэш ещё до захода в цикл.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 24.04.2018 в 17:17.
Pavia вне форума   Ответить с цитированием
Старый 24.04.2018, 19:09   #9
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,139
Репутация: 938
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Он загрузит данные в кэш ещё до захода в цикл.
..к тому-же проц и без помощи префетч загрузит в кэш эти данные, только когда они действительно понадобятся.
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 24.04.2018, 22:08   #10
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
если использовать "Prefetch" заранее, то пока EIP дойдёт до этих данных, процессор уже давно может избавится от них
Может, но не факт, что избавится. Хотя такт всё равно съест – это да

Цитата:
Сообщение от R71MT Посмотреть сообщение
проц и без помощи префетч загрузит в кэш эти данные, только когда они действительно понадобятся.
Когда они понадобятся, он их будет грузить очень долго, а "народ" будет ждать.

Цитата:
Сообщение от Pavia Посмотреть сообщение
У интела опережающее исполнение. Он загрузит данные в кэш ещё до захода в цикл.
Вопрос в том, насколько оно опережающее?
Есть результаты тестов каких-то на эту тему?

А то пока как-то на "ИМХО" больше похоже...
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Команды ассемблера JoBl Assembler 2 25.05.2012 13:13
Assembler, tasm цепочечные команды для работы с строками D9bolic Помощь студентам 2 12.05.2012 13:24
эмулятор(имитатор) работы процессора fantaYKT Помощь студентам 4 10.05.2012 21:32
Самый быстрый режим работы процессора Tronix Assembler 32 29.07.2011 21:01
Команды работы с файлами. Язык Borland C++ 3.1 Демик Помощь студентам 16 31.01.2011 17:44


07:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru