[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
|
4 такта занимает путь целого fetch-пакета от L2 до ядра. В это время естественно процессор ничего не выполняет - у него него же нету инструкции, она еще в L2 и не дошла в ядро. Он просто не знает, что выполнять.
L2 работает совершенно стандартно. Когда кеш-контроллер обнаруживает кэш-мисс, то есть отсутствие чего-либо в кеше, то он ищет свободную строку кеша. Если находит, загружает ее (всю строку) из внеш.памяти. Если свободных строк нету, но кеш-контроллер выбирает при помощи LRU-алгоритма строку с самыми "не нужными и старыми" данными, если они dirty, то скидывает их в внеш. память, и грузит в эту строчку.
Адрес делится следующим образом (читайте кстати спру, там все-все рассказано, я что - переводчик что-ли?). Для режима 64 кб L2 кеш или 48 кб - биты 31..15 попадают в тег, биты 14..5 - set index, остальные - смещение в строке.
Кеш работает когда как. Если программа написана без параллельностей, то на опережение на 1 фетч-пакет(размер строки 2 фетч-пакета).
ну а если ты понаписал инструкций по 256 байт каждая длиной (8 в параллель) - то какой уж там он успеет за тобой - память-то тормознее из которой надо эти пачки инструкций в кеш переливать.
Про дма - очень просто оно работает: кеш-контроллер посылает контроллеру дма запрос - что с такого-то адреса из внеш. памяти надо переслать столько-то байт туда-то в L2. И он пересылает. L1 получает эти данные параллельно с L2. В отличие от шарков ДМА каналы тут все могут иметь и в качестве источника, и в качестве приемника любое место адресного пространства. Для 67хх используется дма-канал с нулевым (urgent) приоритетом. Для 64хх я уже говорил - этот приоритет можно уменьшить и при надобности какую либо свою дма-пересылку поставить приоритетом доступа выше процесоора.
Еще раз - читай спру190д "TMS320C621x/C671x/C64x Two-Level Internal Memory". Я все пересказать не в состоянии.
E-mail: info@telesys.ru