Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Pentium P54C тестовые регистры TR12 |
<<Назад Вперед>> | Страницы: 1 2 3 * 4 | Печать |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Внешний кеш поддерживается чипсетом, и даже в описании чипсетов (от Intel, да и других) указано что "cacheless configurations also supported". Те это вполне штатный режим, тогда как в P6 уже dual independed bus. Добавлю, что эффективность внешнего кеша на плате намного ниже (и не только из-за частоты!), поэтому и выигрыш от него (и проигрыш при отключении) не такой большой. |
BreakPoint |
NEW! Сообщение отправлено: 25 января 2017 0:23 Сообщение отредактировано: 25 января 2017 0:25
Интересно что на скорость влияет и то, как кэш отлючать, через 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 |
А ещё можно (раз уж затронули P6) использовать MTRR и поставить всю память в режим uncacheable. и посмотреть, что будет Интересно что на скорость влияет и то, как кэш отлючать, через CR0 или TR12 Цитируйте уж полностью (я ещё в прошлый раз на этот момент обращал внимание): А в мане Интела сказано 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 также требует после себя явного сброса кэша, ибо: To completely disable the cache, the following two steps must be performed: |
BreakPoint |
NEW! Сообщение отправлено: 25 января 2017 19:00
это я учел. сетмул все по феншую делает - проверил. если ресетить после каждого запуска, результаты те же получаются. другое дело что до меня только сейчас дошло, что я сетмул неправильно запускал я думал что если запустить с ключем ссд, а потом с ключем дсд - то оба кэша отключатся. оказалось второй вызов включает код кэш. так что если оба кэша отключить, получается тоже что и с CR0. |
Сейчас на форуме |
BreakPoint |
NEW! Сообщение отправлено: 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 |
NEW! Сообщение отправлено: 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 тем | |