Казалось-бы, а почему не пойти дальше, отказавшись (в пользу кэша) не только от регистров, но и от стека тоже, сделав все операции работающими непосредственно с операндами в оперативной памяти*?
Так будет плохо потому, что при прямом доступе к оперативной памяти есть только операции считывания и записи, но нет операции стирания (запись невозможно отменить). Тоесть, если некоторая формула использует более одного промежуточного значения при вычислении результата, ячейки, соответствующие этим промежуточным значениям, будут "dirty" и их таки прийдется по окончании расчета записать из кэша в память**. А шина работает (и всегда будет работать по фундаментальным причинам) гораздо медленнее процессора.
Стек неявно подразумевает операцию стирания. При правильной реализации кэша в описанной мной стековой машине промежуточные значения (вставленные в стек, а затем убранные из него в процессе расчета) в оперативную память никогда записаны не будут.
К.Л.М.
*При небольших ухищрениях (добавив несколько инструкций), на самом деле, можно сделать и так. Но это будет некрасиво.
** Этой проблемы не возникает, если в процессе счета операции производятся только над одной ячейкой памяти, которая и будет по окончании расчета содержать результат. Но это слишком частный случай, когда формула -- лишь последовательность унарных операций.
no subject
Date: 2010-12-21 12:03 am (UTC)Так будет плохо потому, что при прямом доступе к оперативной памяти есть только операции считывания и записи, но нет операции стирания (запись невозможно отменить). Тоесть, если некоторая формула использует более одного промежуточного значения при вычислении результата, ячейки, соответствующие этим промежуточным значениям, будут "dirty" и их таки прийдется по окончании расчета записать из кэша в память**. А шина работает (и всегда будет работать по фундаментальным причинам) гораздо медленнее процессора.
Стек неявно подразумевает операцию стирания. При правильной реализации кэша в описанной мной стековой машине промежуточные значения (вставленные в стек, а затем убранные из него в процессе расчета) в оперативную память никогда записаны не будут.
К.Л.М.
*При небольших ухищрениях (добавив несколько инструкций), на самом деле, можно сделать и так. Но это будет некрасиво.
** Этой проблемы не возникает, если в процессе счета операции производятся только над одной ячейкой памяти, которая и будет по окончании расчета содержать результат. Но это слишком частный случай, когда формула -- лишь последовательность унарных операций.