Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

Цитата:
Сообщение от 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, 20:20   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

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

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

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

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

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

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

Если префетч делать не на старте программы, а перед циклом, то вполне себе остается.
p51x вне форума Ответить с цитированием
Старый 24.04.2018, 16:14   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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