Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Для начала следует заметить, что регистры - это логические... 03.07.05 12:55 Число просмотров: 3722
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 03.07.05 12:59 Количество правок: 2
|
Для начала следует заметить, что регистры - это логические устройства. Самое элементрарное из них - регистр хранения, он по сути похож на одну ячейку памяти. Чуть более сложные регистры - счетчики, сумматоры, регистры сдвига... Они, кроме того как могут просто хранить данные как оперативка, еще могут выполнять определенные действия. Нельзя же реализовать процессор без регистров.
Эта мысль могла прийти в голову не после пива, а после того как программист пересел программировать на 80386 процессор после 80286. Там (на 386) можно писать "cmp var1, var2", в отличии от 286, где это действие должно быть представлено двумя инструкциями "mov ax, var1" и "cmp ax, var2". Хуже дело будет обстоять с "add var1, var2". Здесь потребуется три инструкции "mov ax, var1", "add ax, var2" и "mov var1, ax". Причем на еще более старых процессорах кроме как ax (аккумулятором) никаким другим регистором и пользоваться нельзя было.
Вся беда в том, что современный процессор, выполняя инструкцию "add var1, var2" все равно загрузит в свой сумматор первый операнд, в другой регистр загрузит второй операнд, сложит и запишет результат в первый операнд. Этого не произойдет, если операндами будут регистры. Даже предположив, что на инкрементирование счетчика инструкций, извлечение и вычисление адресов операндов времени не тратится, регистровая операция может выполнится за один такт, что не произойдет при работе с памятью, поскольку хоть по одному такту на выборку из кэша и запись в кэш потратить придется.
"Оптимизировать под размер кэша" какого процессора? Программа должна прекрасно работать на любом процессоре, и на П-4 и на Целероне. Да и у П4 тоже разные объемы кэша могут встречаться. Это чтож получится - написали программу под П-4ЕЕ и работать она будет только у счастливых олигархов - обладателей соотв. процессора.
Если кэша 1 Мег - адресацию использовать 20 разрядную или округлить до 32? А если 2 мега - 21 разряд?
А как быть с переключением процессов на многозадачных ОС? Много раз в секунду кэш туда-сюда трансферить? И как это делать?
|
|
|