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

Полигон-2

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

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

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

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

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

<<Назад  Вперед>> Страницы: 1 2 3 4 *
Печать
 
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

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

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

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