#computer-architecture #instructions #temporal
#компьютерная архитектура #Инструкции #временная
Вопрос:
Я застрял с вопросом, который изложен ниже,
Опишите общие характеристики и поведение программы, которая будет демонстрировать:
(а) низкую временную локальность в отношении доступа к данным
(б) низкую временную локальность в отношении выборки команд
Я понимаю временную локальность, но я не могу понять, что это значит в отношении доступа к данным и выборки инструкций. Я был бы очень благодарен, если бы кто-нибудь мог мне это объяснить.
Ответ №1:
Они говорят об оптимизации кэшей для доступа к данным и инструкциям в процессоре. По сути, низкая временная локальность означает, что что-то часто используется повторно, но не в одном большом фрагменте (т. Е. С течением времени).
Пример низкой временной локальности:
read file
process data
output result
....
read file
process data
output result
....
read file
process data
output result
Чтобы улучшить это, вы можете перестроить так, чтобы все чтения выполнялись вместе, вся обработка выполнялась вместе, и все выходные данные выполнялись вместе.
В контексте центрального процессора вы можете сказать, что если вам нужно часто читать память, просто прочитайте ее один раз и кешируйте, затем сделайте с ней столько, сколько сможете, прежде чем отбрасывать ее. Для инструкций это означает хранение таких вещей, как циклические инструкции, в очень быстром кэше (обычно L1). Для данных это означает кэширование всего, что вы используете чаще всего.
Смотрите эти ссылки для надлежащего объяснения:
http://www.dotnetperls.com/temporal-locality
http://en.wikipedia.org/wiki/Locality_of_reference#Use_of_spatial_and_temporal_locality:_hierarchical_memory
Комментарии:
1. Я все еще смущен временной локальностью для обоих. Какую из двух (выборка инструкций / доступ к данным) вы привели в примере?
2. Пример был для обоих. Операции чтения, обработки и вывода будут иметь связанные с ними блоки кода. В своем текущем состоянии каждый блок кода будет извлекаться из памяти, а затем выполняться. Если операции были кластеризованы (т. Е. Чтение, чтение, чтение, обработка, обработка, обработка, выход, выход, выход), блоки кода могут считываться из памяти один раз каждый вместо 3 раз каждый. То же самое относится к любым переменным или данным, используемым операциями.
3. Спасибо. Не могли бы вы уточнить, должна ли временная локальность быть высокой или низкой в целом. Какой вариант лучше?
4. Чем выше, тем лучше. Высокая временная локальность означает, что «вещи, которые используются чаще (или часто по отношению друг к другу), хранятся ближе друг к другу или где-то быстрее». Эта концепция используется и в механических приводах. Если у вас есть файл, который, как вы знаете, будет последовательно считываться, сделайте блоки, содержащие данные файла, локальными друг для друга, а не фрагментируйте их по 500 различным местам на диске.
5. Разве я не могу сказать, что программа имеет низкую временную локальность, потому что однажды использованные инструкции / данные больше не использовались? Таким образом, в программе было меньше случаев появления этих данных?
Ответ №2:
- Низкая временная локальность для кода означает отсутствие циклов и повторное использование инструкций.
- Высокая временная локальность для кода означает жесткие циклы с большим количеством повторного использования.
- Низкая пространственная локальность для кода означает множество переходов в отдаленные места.
- Высокая пространственная локальность для кода означает отсутствие ветвей / переходов вообще.
ССЫЛКА: Организация и проектирование компьютера: интерфейс аппаратного / программного обеспечения