Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Pentium P54C тестовые регистры TR12
RSS

Pentium P54C тестовые регистры TR12

<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
 
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
Интересно что на скорость влияет и то, как кэш отлючать, через CR0 или TR12
[/q]
А ещё можно (раз уж затронули P6) использовать MTRR и поставить всю память в режим uncacheable. и посмотреть, что будет ;)
[q]
А в мане Интела сказано
[/q]
Цитируйте уж полностью (я ещё в прошлый раз на этот момент обращал внимание):
Note that the contents of the instruction and data caches are not affected by the state of TR12.CI, e.g., they are not flushed. The second level cache test sequence should be: set TR12.CI to 1, flush the internal caches, run the second level cache tests
Т.е. на момент отключения кэша уровня 1 часть вашего кода (скорее всего большая) и данных всё равно в нём остаётся и замедление из-за доступа к памяти коснётся только тех данных и инструкций, которых в нём нет.

CR0 также требует после себя явного сброса кэша, ибо:
[q]
To completely disable the cache, the following two steps must be performed:
1. CD and NW must be set to 1.
2. The caches must be flushed.
If the cache is not flushed, cache hits on reads will still occur and data will be read from the cache. In addition, the cache must be flushed after being disabled to prevent any
inconsistencies with memory.
Write hits update the cache, but do not access memory.
[/q]
BreakPoint
Гость

Ссылка

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

другое дело что до меня только сейчас дошло, что я сетмул неправильно запускал
я думал что если запустить с ключем ссд, а потом с ключем дсд - то оба кэша отключатся. оказалось второй вызов включает код кэш.
так что если оба кэша отключить, получается тоже что и с CR0.
Сейчас на форуме
BreakPoint
Гость

Ссылка

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

Так вот, когда код чтения маленький, то при отключении кэша данных время чтения из памяти становится таким же, как и при форсированных промахах кэша. что логично.
теперь возникает вопрос, а почему прога на паскале давала совершенно другие результаты?
Единственное отличие, длинна кода.

Закопипаситив инструкцию mov al, [di] пол сотни раз сделал специально жирную процедуру и запустил прогу с отключенным кэшем данных.
так вот разница выполнения "жирной процедуры"с кэшем данных и без около 30 раз.

Вобщем результаты:

Все включено:
Чтение одного байта в цикле: 0.5сек
Чтение с форсированным промахом: 2.2сек
Чтение одного байта "жирной процедурой": 3 сек

Выключен дата кэш:
Чтение одного байта в цикле: 2.7сек
Чтение с форсированным промахом: 2.7сек
Чтение одного байта "жирной процедурой": 100 сек (!!!)

получается, что при отключеннии кэша данных замедление работы зависит не только от скорости доступа к данным, но и от размера кода. Это надо обдумать

Ну и вишенка на торте: при чтении из области данных БИОС (400h:0) пофигу, включет дата кэш или нет.
Сейчас на форуме
BreakPoint
Гость

Ссылка

немного начало проясняться.
Сделел более детальные замеры Ссылка на результаты

Мое первоначальное предположение подтердилось с точность до наоборот. Это не без кэша проц бешено тупит, это с кэшем он сверхзвуковой.

Короче говоря, получилось что если "mov al, [di]" закопипастить 32 раза, то проц может читать 1.4 ГИГАБАЙТ/СЕК !!!
Понятно что на частоте 166МГц сие просто невозможно.
Сначала подумал, что компилятор просто код оптимизировал, и лишние операции чтения убрал. (Хотя компилеры в те времена особым интеллектом по части оптимизации не отличались).
Запустил под отладчиком - нифига - все инструкции на месте!

Получается, что код оптимизирует процессор. Проц видит 32 инструкции"mov al, [di]" без изменения адреса, и вместо того, чтобы честно выполнить чтение 32 раза, инициирует 1 ИО в память мимо кэша, а 31 операцацию тупо пропускает.

Далее интересно, что чтение с форсированным промахом все равно быстрее чем прямое чтение из памяти когда кэш данных отключен.
Сейчас на форуме
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
Проц видит 32 инструкции"mov al, [di]" без изменения адреса, и вместо того, чтобы честно выполнить чтение 32 раза, инициирует 1 ИО в память мимо кэша, а 31 операцацию тупо пропускает.
[/q]
Не только адреса, но и содержащихся по нему данных.
Всё верно - MESI-протокол.
При чтении обращение к памяти будет только в том случае, если соотв. строка кэша помечена как Invalid (т.е. данных в кэше нет или они были изменены в памяти кем-то другим). Иначе - данные всегда берутся только из кэша.
В вашем случае состояние Exclusive, и после первой операции никаких обращений к внешней шине в принципе не будет.
BreakPoint
Гость

Ссылка

процессор на частоте 166 миллионов герц впринципе может произвести 1.4 миллиарда операций чтения, тут даже кеш не поможет. т.к это 9 операций за такт.
Сейчас на форуме
BreakPoint
Гость

Ссылка

от я валенок, на 0 ошибся. цикл 100 раз проганял, а в таблице посчитал как 1000.
теперь никаких чудес.

Еще один интересны момент по отключению кэша кода (колонка Е)

Цикл с одним "mov, al, [ds]" и с четырьмя выполнятеся прибилзительно одно и тоже время. Хотя во втором случае надо перегнать в 4 раза больше данных.
При дальнейшем увеличении тела цикла время исполнения постепенно растет.
Очень похоже, что когда тело цикла кототкое (от 1 до 4 операций mov) то код в префетчер доставляетя за 1 такт (т.к. шина 64 бита, а операция mov 2х байтная, соответсвенно в 64 бита влазит 4 mov'а)
Сейчас на форуме
<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Pentium P54C тестовые регистры TR12
RSS

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

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS