|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 13, 2004 02:16:28 идея с планировщиком, перебором всех процессов в списке ожидающих и успешно напоролась на пропускную способность памяти. стал исследовать сабж и наткнулся на интересный факт меряю время работы цикла из 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 строки грузятся вместо одной) что может быть не так? код вроде верный весь |
|
|
Дата: Ноя 13, 2004 02:28:29 · Поправил: Narkomanius нашол ошибку. вдвое общитываюсь ровно. в пределах L1 - все точно по теории. но результат все равно плохой, потому что разрыв 100 тактов при выходе за первый кэш это ужасно. единственное что могу предположить что идет подгрузка двух строк, а это 10-13 циклов шины, или 50-65 тактов. но все таки не 100 же |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.082 |