К6 и время доступа к памяти

Тема в разделе "WASM.ZEN", создана пользователем Narkomanius, 13 ноя 2004.

  1. Narkomanius

    Narkomanius New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2003
    Сообщения:
    144
    идея с планировщиком, перебором всех процессов в списке ожидающих и успешно напоролась на пропускную способность памяти.

    стал исследовать сабж и наткнулся на интересный факт

    меряю время работы цикла из 30 нопов и 4 инструкций.

    p0:

    db 30 dup(90h)

    add eax,[ebx]

    add ebx,32

    add ecx,8

    jnz p0

    время декодирования цикла никак не меньше 17 тактов, умножитель проц/шина=5.



    значит в начале мы ждем 3 такта шины потом пытаемся читать, снова 3 такта ждем.

    это потому что кэшу Л2 надо 3 цикла чтоб доставить остатки строки в проц.



    то есть время работы цикла - Твнутр.проц+5(T(L2)+3);

    потому что последние 4 инструкции не встанут на конвейере, кроме чтения памяти. это в теории, а на практике, щитая время по формуле



    (dT/колво итераций)-15 получаю отрицательное число. читаю я с шагом 64 байта, так что попаданий в L1 нет.

    ну плюс работает предвыборка(3-1-1-1-1-1-1)по промаху(2 строки грузятся вместо одной)



    что может быть не так? код вроде верный весь
     
  2. Narkomanius

    Narkomanius New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2003
    Сообщения:
    144
    нашол ошибку. вдвое общитываюсь ровно. в пределах L1 - все точно по теории. но результат все равно плохой, потому что разрыв 100 тактов при выходе за первый кэш это ужасно.

    единственное что могу предположить что идет подгрузка двух строк, а это 10-13 циклов шины, или 50-65 тактов. но все таки не 100 же