Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Pentium P54C тестовые регистры TR12 |
<<Назад Вперед>> | Страницы: 1 2 3 4 * | Печать |
BreakPoint |
Сообщение отправлено: 25 января 2017 19:00
это я учел. сетмул все по феншую делает - проверил. если ресетить после каждого запуска, результаты те же получаются. другое дело что до меня только сейчас дошло, что я сетмул неправильно запускал я думал что если запустить с ключем ссд, а потом с ключем дсд - то оба кэша отключатся. оказалось второй вызов включает код кэш. так что если оба кэша отключить, получается тоже что и с CR0. |
Сейчас на форуме |
BreakPoint |
Сообщение отправлено: 25 января 2017 21:31 Сообщение отредактировано: 25 января 2017 21:50
дальше интереснее. переписал процедуры чтения на ассемблере, что бы более четко разграничить код от данных. сам цикл чтения буквально несколько комманд, он вообще должен в префетчер помещаться. Так вот, когда код чтения маленький, то при отключении кэша данных время чтения из памяти становится таким же, как и при форсированных промахах кэша. что логично. теперь возникает вопрос, а почему прога на паскале давала совершенно другие результаты? Единственное отличие, длинна кода. Закопипаситив инструкцию mov al, [di] пол сотни раз сделал специально жирную процедуру и запустил прогу с отключенным кэшем данных. так вот разница выполнения "жирной процедуры"с кэшем данных и без около 30 раз. Вобщем результаты: Все включено: Чтение одного байта в цикле: 0.5сек Чтение с форсированным промахом: 2.2сек Чтение одного байта "жирной процедурой": 3 сек Выключен дата кэш: Чтение одного байта в цикле: 2.7сек Чтение с форсированным промахом: 2.7сек Чтение одного байта "жирной процедурой": 100 сек (!!!) получается, что при отключеннии кэша данных замедление работы зависит не только от скорости доступа к данным, но и от размера кода. Это надо обдумать Ну и вишенка на торте: при чтении из области данных БИОС (400h:0) пофигу, включет дата кэш или нет. |
Сейчас на форуме |
BreakPoint |
Сообщение отправлено: 27 января 2017 15:38 Сообщение отредактировано: 27 января 2017 15:39
немного начало проясняться. Сделел более детальные замеры Ссылка на результаты Мое первоначальное предположение подтердилось с точность до наоборот. Это не без кэша проц бешено тупит, это с кэшем он сверхзвуковой. Короче говоря, получилось что если "mov al, [di]" закопипастить 32 раза, то проц может читать 1.4 ГИГАБАЙТ/СЕК !!! Понятно что на частоте 166МГц сие просто невозможно. Сначала подумал, что компилятор просто код оптимизировал, и лишние операции чтения убрал. (Хотя компилеры в те времена особым интеллектом по части оптимизации не отличались). Запустил под отладчиком - нифига - все инструкции на месте! Получается, что код оптимизирует процессор. Проц видит 32 инструкции"mov al, [di]" без изменения адреса, и вместо того, чтобы честно выполнить чтение 32 раза, инициирует 1 ИО в память мимо кэша, а 31 операцацию тупо пропускает. Далее интересно, что чтение с форсированным промахом все равно быстрее чем прямое чтение из памяти когда кэш данных отключен. |
Сейчас на форуме |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Не только адреса, но и содержащихся по нему данных. Проц видит 32 инструкции"mov al, [di]" без изменения адреса, и вместо того, чтобы честно выполнить чтение 32 раза, инициирует 1 ИО в память мимо кэша, а 31 операцацию тупо пропускает. Всё верно - MESI-протокол. При чтении обращение к памяти будет только в том случае, если соотв. строка кэша помечена как Invalid (т.е. данных в кэше нет или они были изменены в памяти кем-то другим). Иначе - данные всегда берутся только из кэша. В вашем случае состояние Exclusive, и после первой операции никаких обращений к внешней шине в принципе не будет. |
BreakPoint |
NEW! Сообщение отправлено: 27 января 2017 19:25 Сообщение отредактировано: 27 января 2017 19:26
процессор на частоте 166 миллионов герц впринципе может произвести 1.4 миллиарда операций чтения, тут даже кеш не поможет. т.к это 9 операций за такт. |
Сейчас на форуме |
BreakPoint |
NEW! Сообщение отправлено: 27 января 2017 21:55 Сообщение отредактировано: 27 января 2017 21:56
от я валенок, на 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 |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |