Кэш: Ассоциативность и банки

Тема в разделе "WASM.ASSEMBLER", создана пользователем nester7, 26 ноя 2006.

  1. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Небезызвестный автор пишет что "количество банков кэша и называют его ассоциативностью", однако другой небезызвестный, рассказывая о Core 2, говорит что "The level-1 data cache is 32 kB, dual port, 8 way, 64 byte line size. ...... Each 64-bytes line in the data cache is divided into 4 banks of 16 bytes each."
    Подозреваю что оба говорят правду, но о "разных" вещях, т.к. Core 2 ещё не было когда писал первый.

    Как на самом деле-то?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Крис? =)
    Мне кажется что "banks" отсюда != банкам из первого источника. Почитай внимательнее что имеется ввиду в первом случае.
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    nester7
    Конечно о разных и Core 2 тут ни причем, т.к. деление на "физические" банки существует во всех RAM - и в кэшах и в ОЗУ. Делается это для сокращения времени между последовательными запросами на чтение или запись при фиксированной латентности обработки запроса - пока один банк обслуживает запрос на чтение, в другой может параллельно производиться запись, а в динамических ОЗУ еще и перезаряд давно неиспользуемых банков. Отсюда и понятие dual ported - все процы могут одновренменно выполнять чтение и запись в кэш, но при условии что они направлены в разные банки.

    Что касается ассоциативности, то тут официального понятия банков как таковых нет и это скорее авторские финты ушами для наглядной демонстрации смысла N-way set associative cache ;) По крайней мере если и приравнивать понятия логического way некому логическому или физическому bank, то это будет совсем другой bank, не имеющий отношения к dual port
     
  4. Dark_Master

    Dark_Master Member

    Публикаций:
    0
    Регистрация:
    19 май 2004
    Сообщения:
    32
    Адрес:
    Усть-За###юйск
    подозреваю что здесь "Each 64-bytes line in the data cache is divided into 4 banks of 16 bytes each" речь идет о секторах. Одна строка делится на секторы, каждый сектор имеет свои биты состояния. Зачем? Чтобы не загружать каждый раз 64 байта при промахе, а только 16, потому что состояние относится ко всей строке если она не разбита на секторы.

    P.S. Тег у всех секторов одинаковый. Только состояние у каждого свое.
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Dark_Master
    Да, не-е ;) Загрузка\выгрузка (вроде как) всегда идет полными линейками. А деление на банки делается для возможности распараллеливания чтения и записи - об этом и у Фога сказано, просто nester7 неполную цитату привел - см. microarhitecture.pdf, 7.13 Cache and memory access (Core 2) и 9.14 Cache (AMD). И у Касперски отдельный раздел (Data distribution over cache banks) этому посвящен, вот только действительно термин bank у него используется в нескольких разных смыслах - вот бегинеры и путаются ;) Деление на физ.банки кстати есть во всех процах, только Intel почему то в своих мануалах этот факт замалчивает