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

Полигон-2

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

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

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

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

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

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


Откуда: Санкт-Петербург
Всего сообщений: 596
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 сен. 2014
Замечательная программа SetMul (http://www.vogons.org/viewtopic.php?t=38613) помимо всего прочего имеет такие ключи:
[q]
-Pentium P54C test register "TR12" options. Parameters:
BPD - Disable Branch Prediction
VPD - Disable V Pipeline
L1DX - Disable L1 cache exclusively
CCD - Disable L1 code cache
DCD - Disable L1 data cache
PFE - Pentium Features Enable; Resets the above TR12 options to default.
The status of register TR12 cannnot be read by design.
[/q]
То есть на Pentium P54C можно выключить предсказание ветвлений, V Pipeline, и отдельно отключать кэш L1 для кода и кэш L1 для данных.
Вот тут (https://www.vogons.org/viewtopic.php?t=47590&p=490976) товарищ пробует это дело на Pentium Overdrive 200.
Ниже там пишут, что на обычных MMX Intel уже убрала эти регистры TR12, и они уже не работают. Так же пробуют эти ключи на Pentium 120 - опять неудача. А вот на P90 - работают.

Пробовал ли кто-нибудь играть с этими регистрами? Как отражается на производительности? На каких процессорах они есть, на каких уже нету?
BreakPoint
Гость

Ссылка

doctord написал:
[q]
Как отражается на производительности?
[/q]
Производительность упадет.

А какой практический смысл?
Вот проц выдает 100 попугаев, а вот мы ему все отключили и стало 50 попугаев.

Да и результаты какие то странные у комрада.
У него пень 200 - предсказание ветвлений - л1 кэш - пайплайн = 386-25Мгц ???

Это я не очень представляю.
Сейчас на форуме
Fasterpast
Advanced Member


Всего сообщений: 582
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
20 окт. 2013
Наверное на OD как раз и были эти регистры для снижения производительности, типа турбы, для совместимости.

А пень так устроен, что без первого кэша будет еле дышать, что мы и видим.
BreakPoint
Гость

Ссылка

В данном случае он не то что еле дышит, он скорее мертв чем жив.

возможно при выключении L1 префетчер впадает в глубокую кому.
Интересно, вот если кэш в пеньке это маст хев, то может и префетчер может только из кэша данные читать. если в кэше данных нет, то собственно и очередь префетчера все время пустая. А у 386 как ни как 16 байт имеется.

UPD: Посмотрел на диаграмму пенька. У него же все чере кэш идет - получется что каждое обращение к памяти вызывает "промах кэша" со всеми вытекающими.
Сейчас на форуме
doctord
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 596
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 сен. 2014
[q]
А какой практический смысл?
[/q]
Как всегда - спортивный интерес :biggrin:
Интересно, обгонит Pentium 486-ую машину без этих своих branch prediction и V Pipeline на одной частоте )
FSB допустим сделать 50MHz и на четверке можно, и на Pentium... И посмотеть, кто кого :biggrin:
BreakPoint
Гость

Ссылка

Как показала практика из пенька этими переключалками можно инвалида сделать ))))
Сейчас на форуме
doctord
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 596
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 сен. 2014
[q]
Как показала практика из пенька этими переключалками можно инвалида сделать ))))
[/q]
:eek: Всмысле? Насовсем?
Глядите-ка без L1-кэша кода он медленнее, чем без L1-кэша данных )) Код важнее )
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
На каких процессорах они есть, на каких уже нету?
[/q]
Это MSRки, они по определению различны на разных процессорах (даже имеющих одинаковое название).
[q]
Ниже там пишут, что на обычных MMX Intel уже убрала эти регистры TR12, и они уже не работают.
[/q]
А документация утверждает, что они там есть, но изменены. А именно:
[q]
CCD - Disable L1 code cache
DCD - Disable L1 data cache
[/q]
должно работать только на MMXах.
[q]
Так же пробуют эти ключи на Pentium 120 - опять неудача. А вот на P90 - работают.
[/q]
Что на вогонсах и подтверждают. Ключи, отключающие по отдельности кэши инструкций и данных, не работают на P120, но работают на POD200.
[q]
Наверное на OD как раз и были эти регистры для снижения производительности
[/q]
1) Овердрайвы и мобильные процы - это совсем не тоже самое, что десктопные. Надо смотреть документацию конкретно для них.
2) Они именно для снижения производительности. Для тестирования на стадии разработки и производства чипов и разработки плат под них. Для тестирования самого кэша тоже.
[q]
Да и результаты какие то странные у комрада.
У него пень 200 - предсказание ветвлений - л1 кэш - пайплайн = 386-25Мгц ???
[/q]
Абсолютно нормальные. Отключишь кэши - и поймёшь, что со временём 386го мало что изменилось.
И на ваш вопрос с вогонса:
[q]
PS. I wonder if P1 initiates cache line fill for each IO with disabled L1 cache
[/q]
Нет. Собственно биты "отключения кэша" в TR12 запрещают именно cache line fill но не очищают кэш от уже имеющихся данных.
[q]
Всмысле? Насовсем?
[/q]
:biggrin: Пока питание не дернёте. Или обратно в регистр нули не пропишите.
[q]
Интересно, обгонит Pentium 486-ую машину без этих своих branch prediction и V Pipeline на одной частоте )
[/q]
В целочисленке - вряд ли.
doctord
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 596
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 сен. 2014
pahan, :thumbup:
BreakPoint
Гость

Ссылка

Важна интерпретация результатов, а не сами результаты.

Может кэш данных более критичен потому что его долбят 2 очереди префетчера? А у данных префетчера нет.Так что для чистоты эесперимента еще и префетчер отключать надо.

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

Ссылка

pahan написал:
[q]
что со временём 386го мало что изменилось.
[/q]
Ну частота ядра и шины уж точно изменилась :tongue:

По такой логике получатся что если разогнать 386 25МГц до 66МГц то произовдительность все равно будет как у 25МГц
Сейчас на форуме
doctord
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 596
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 сен. 2014
Я так понимаю, дело тут в том, что x86-процессоры начиная с 486 (и Pentium, в том числе), очень сильно зависят от кэша L1, из-за своей конвеерной архитектуры.

Вот нашел список всех MSR, если вдруг кому надо:
https://github.com/cirosantill...1c/MSR.LST

Действительно раздельное выключение L1 кода и данных есть только у P-MMX:
[q]
MSR 0000000Eh - Pentium, K6, C6 - (TR12) NEW FEATURE CONTROL
...
Bit(s)\tDescription\t(Table R0014)
...
20\t(PentiumMMX only) Data Cache Inhibit (disable internal data cache)
19 (PentiumMMX only) Code Cache Inhibit (disable internal code cache)
...
[/q]
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
Если источник данных (память) будет работать на частоте 25 МГц, не столь важно, на сколь огромных частотах будет обрабатывать их ядро процессора. Что все давно видели на примере коппермайнов и нортвудов (особенно целеронов), когда рост только частоты ядра давал уменьшающийся почти до нуля рост производительности.
[q]
Глядите-ка без L1-кэша кода он медленнее, чем без L1-кэша данных )) Код важнее )
[/q]
Вот именно что важнее интерпретация результатов. Имхо, всё зависит от конкретной задачи (теста). В 3D тестах вычислений много - важнее кэш кода. В speedsys - важнее кэш данных (скорее всего, там какие-то СУБДподобные задачи - типа выбрать определённые строки из большого однотипного массива).
BreakPoint
Гость

Ссылка

pahan написал:
[q]
Если источник данных (память) будет работать на частоте 25 МГц...
[/q]
Теоретически правильно. Но в данном конкретному случае
во первых, и память у пенька пошустрее
во вторых, шина поширее
в третьих, очередь префетчера подлинее

так что деградация до уровня 386-25МГц, как по мне, может быть вызвана только какими-то дополнительными расходами, вызванными отключением кэша. Мне кажется, даже при отключенном кэше, любой доступ к памяти начинается с cache lookup который естесвенно ничего не дает. И только после этого проц начинает операцию ввода вывода к памяти.
Сейчас на форуме
Fasterpast
Advanced Member


Всего сообщений: 582
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
20 окт. 2013
Грубо говоря, скорость кэша в 10 раз выше скорости памяти (особенно по задержкам), вот и производительность падает в 10 раз )
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
Мне кажется, даже при отключенном кэше, любой доступ к памяти начинается с cache lookup который естесвенно ничего не дает.
[/q]
Скорее всего, вы правы. Изначально (при старте процессора) кэш отключен. Но дальше он включается, кэширует какие-то данные, и к тому моменту, когда мы отключаем кэш из тестовой проги, в нём уже что-то есть. А вот дальше самое интересное - даже при отключенном кэше, в случае если нужные данные находятся в нём, они будут взяты из кэша, но в случае промаха кэш обновлён не будет. В случае записи - они могут быть обновлены только в кэше, но не в памяти.
см. Pentium® Processor Family Developer’s Manual 24142805.pdf таблица 2.1
[q]
во первых, и память у пенька пошустрее
[/q]
Не так уж и сильно - в 2-2,5 раза.
[q]
во вторых, шина поширее
[/q]
А это вообще мало влияет. Ну протаскивает он за такт в 2 раза больше данных. Только программе (особенно досовской) из 32/64 бит при этом скорее всего надо было только 8 или 16. Остальные будут проигнорированы. Широкая шина как раз актуальна в основном чтобы загонять данные в кэш.
BreakPoint
Гость

Ссылка

pahan написал:
[q]
Не так уж и сильно - в 2-2,5 раза.
[/q]
Вот именно, то есть при прочих равных у нас получатеся какой то условный 386ДХ-66. А получился 25.


pahan написал:
[q]
в случае если нужные данные находятся в нём, они будут взяты из кэша, но в случае промаха кэш обновлён не будет
[/q]
Это по сути потдверждает мою теорию. Т.е. не смотя на "отключенный кэш" проц все равно не имеет обходных путей для общения в внешним миром в обход кэша.
Т.е. при любой ИО операции к памяти проц сначала проверяет есть ли эти данные/код в кэше, и (кто бы мог подумать) их там не находит. Естественно на лукап уходит как минимум 4 цикла (а то и больше).
Т.е. кэш становится тормозом системы, а не ускорителем.

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


pahan написал:
[q]
А это вообще мало влияет. Ну протаскивает он за такт в 2 раза больше данных.
[/q]
Тут тоже не все так просто, во первых от широкой шины выиграет префетчер (по крайней мере в теории). Во вторых FPU.
Сейчас на форуме
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
Естественно на лукап уходит как минимум 4 цикла (а то и больше).
[/q]
Откуда цифра 4? Минимум 4 цикла - это как раз обращение к памяти уже после кэша.
[q]
во первых от широкой шины выиграет префетчер (по крайней мере в теории)
[/q]
Да, в теории в 2 раза. В лучшем случае. Префетчер у классического пня - 2 буфера по 256 бит (т.е. в р-р строки опять же кэша). Одновременно работает только один, но он хотя бы будет качать вдвое быстрее. У MMX - 4 по 128 бит, что этот теоретический выигрыш убирает (качать 256 бит по 64 битной шине - тоже самое, что и 128 бит по 32битной).
[q]
Во вторых FPU.
[/q]
Тоже теория. FPU 1) не так уж часто и используется, а только там где он действительно нужен и 2) работает с 32, 64 или 80битными данными. Выигрыш дадут только два последних варианта.
BreakPoint
Гость

Ссылка

дошли руки немного поиграться с отключением кэша. получилась полная ерунда.

под руками оказался Пень2 266 на 440LX.
для начала написал на паскале простенький код, который заполняет память определенными значениями, а затем их читает.
доступ к памяти осуществлялся двумя способами
- последовательно. т.е. идеальный для кэша режим
- и с чередованием в 128 байт. т.е. каждый последующий доступ должен с высокой долей вероятности вызвать промах кэша.

естественно в первом случае программа работала в 4 раза быстрее, чем во втором.

Затем отлючил оба кэша. И тут началось самое интересное.
Во первых программа стала тупить не по детски. работать стало медленне раз в 50.
Но самое смешное, что таймер стал тупить. Т.е. программа рапортует что выполнялась 5 сек, когда в реальности это было больше минуты. Один раз время даже отрицательное получилось :eek:
Такое впечаление, что прерывание таймера не всегда отрабатывается. Хотя может у паскаля какие то свои тараканы по поводу таймера, но с другой стороны с кэшем же все нормально работает.


UPD. С таймером это я тупанул
Сейчас на форуме
BreakPoint
Гость

Ссылка

Поставил конвингтон, чтоб Л2 кэш под ногами не путался.

Получилось
Включенный кэш:
Последовательная запись: 0.17с
Последовательное чтение: 0.16с
Запись с форисрованным промахом кэша: 0.77с
Чтение с форисрованным промахом кэша: 0.39с

Выключенный кэш:
Последовательная запись: 14.6с
Последовательное чтение: 18.0с
Запись с форисрованным промахом кэша: 15.2с
Чтение с форисрованным промахом кэша: 17.9с

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


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
Вот собственно и вопрос, откуда такой оверхед на отключенный кэш.
[/q]
Думаю, с этим всё просто - к моменту разработки этих процессоров никто и не предполагал возможность их эксплуатации без кэша. Собственно, ковингтон - короткоживущий маркетинговый ублюдок, выросший из стремления максимально удешевить процессор и быстро провалившийся. Да и вообще, почти все нововведения в P6 (как и в P54) просто бессмысленны без кэша.

Но изначальный-то спор у нас был вообще-то про P54(С). Вот на нём бы посмотреть замеры. Интересней как раз было провести этот тест на 286-586х - посмотреть, насколько отстутствие кэша будет влиять на производительность в разных поколениях.
BreakPoint
Гость

Ссылка

"ублюдочность" конвингтона тут ни при чем. П2 тоже самое показывает. а вот для чистоты эксперимента самый лучший экземпляр благодаря отсутсвию л2 кэша.

тут ключевой вопрос деградация производительности при отключении л1 кэша. возможно тут проблема с тем, как отключаение кэша реализовано.
есть у меня идея что проц после каждой ИО инвилидейтит и флашит кэш. попробую вручную такое сделать.

думаю, для любого проца отключение кэша является нештатным режимом.
кстати, у меня где то мамка сокет3 есть, так в ней в биосе отключение л1 кэша отнесено к режиму "детурбо".
Сейчас на форуме
pahan
Advanced Member


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


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
кстати, у меня где то мамка сокет3 есть, так в ней в биосе отключение л1 кэша отнесено к режиму "детурбо".
[/q]
Ага, он так обычно и реализовывался.
[q]
думаю, для любого проца отключение кэша является нештатным режимом.
[/q]
Э нет.
Тут как раз интересно смотреть на самые древние и самые дешёвые.
286 и 386SX, когда на платах его просто могло не быть.
486 - особенно интересны поделия от Cyrix, когда для включения встроенного в процессор в кэша должна быть поддержка в биосе.
486-P5 - наши "любимые" платы с фейковым кэшем. Как вариант - платы без набортного L2 кэша и только с (пустым) разъёмом под COAST.
Fasterpast
Advanced Member


Всего сообщений: 582
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
20 окт. 2013
Ну так это давно пошло, когда снижать частоту для эмуляции ХТ уже стало нереально, стали кнопкой турбо на 486 отключать кэш, которые без него работали как раз соответствующие (крайне тормознуто).
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Fasterpast написал:
[q]
486-P5 - наши "любимые" платы с фейковым кэшем.
[/q]
Есть вполне себе брендовые 486-е с опциональным L2 кэшем "хрен найдешь".
И не скажу, что производительность без кэша падает катастрофически.
Fasterpast
Advanced Member


Всего сообщений: 582
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
20 окт. 2013
Насколько я помню, там L1 отключается
BreakPoint
Гость

Ссылка

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

Проверил на 166ММХ без л2 кэша

Получилось
Включенный кэш:
Последовательная запись: 0.38с
Последовательное чтение: 0.28с
Запись с форисрованным промахом кэша: 0.33с
Чтение с форисрованным промахом кэша: 0.77с

Выключенный кэш:
Последовательная запись: 6.3с
Последовательное чтение: 6.6с
Запись с форисрованным промахом кэша: 6.2с
Чтение с форисрованным промахом кэша: 6.6с
Сейчас на форуме
BreakPoint
Гость

Ссылка

Rio444 написал:
[q]
И не скажу, что производительность без кэша падает катастрофически.
[/q]
подтверждаю, через переходник апгрейдил безкэшевый сокет1 до am5x85-133 произодительность на уровне.
Сейчас на форуме
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Внешний кеш поддерживается чипсетом, и даже в описании чипсетов (от Intel, да и других)
указано что "cacheless configurations also supported". Те это вполне штатный режим, тогда как
в P6 уже dual independed bus. Добавлю, что эффективность внешнего кеша на плате намного
ниже (и не только из-за частоты!), поэтому и выигрыш от него (и проигрыш при отключении) не
такой большой.
BreakPoint
Гость

Ссылка

Интересно что на скорость влияет и то, как кэш отлючать, через CR0 или TR12
CR0 = 6сек
TR12 (Data Cache Disabled) или TR12 (Data+Code Cache Disabled) = 4сек
TR12 (Code Cache Disabled) = 2.5сек

А в мане Интела сказано
When TR12.CI is set to
1, all cache line fills are inhibited and all bus cycles due to cache misses
are run as single transfer cycles (CACHE# is not asserted). Unlike
CR0.CD, TR12.CI does not affect the state of the PCD output pin. This
allows the first level cache to be disabled while the second level cache is
still active and can be tested.


Если эти тупняки из за PCD вывода, то возможно это не проц тупит, а внешняя логика. Правда куда этот вывод уходит осталось загадкой. В мане к 430 чипсету ничего похожего нет.
Сейчас на форуме
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

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

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

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