Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

14.2. Внешняя память и кэширование 673

14.2 Внешняя память и кэширование

Есть несколько компьютерных приложений, которые должны иметь дело с большим объемом данных. Примеры включают анализ наборов научной информации, обработку финансовых операций, и организацию и обслуживание баз данных (таких как телефонные справочники). Фактически, объем данных, с которым нужно иметь дело, часто слишком большой, чтобы соответствовать полностью во внутренней памяти о компьютере.

14.2.1 Иерархия памяти

Чтобы приспособить большие наборы данных, у компьютеров есть иерархия различных

виды воспоминаний, которые варьируются с точки зрения их размера и расстояния от центрального процессора. Самый близкий к центральному процессору внутренние регистры, которые использует сам центральный процессор. Доступ к таким местоположениям очень быстр, но есть относительно немного таких местоположений. На втором уровне в иерархии кэш-память. Эта память значительно больше, чем набор регистров центрального процессора, но доступ к нему занимает больше времени (и могут даже быть многократные тайники с прогрессивно более медленными временами доступа). На третьем уровне в иерархии внутренняя память, которая также известна как главная память или основная память. Внутренняя память значительно больше, чем кэш-память, но также и требует большего количества времени к доступу. Наконец, на высшем уровне в иерархии внешняя память, которая обычно состоит из дисков, CD-приводов, DVD-приводов и/или лент. Эта память очень большая, но это также очень медленно. Таким образом иерархия памяти для компьютеров может быть рассмотрена как состоящий из четырех уровней, каждый из которых больше и медленнее, чем предыдущий уровень. (См. рисунок 14.3.)

В большинстве заявлений, однако, только два уровня действительно имеют значение - тот, который может держать все элементы данных и уровень чуть ниже того. Введение элементов данных и из более высокой памяти, которая может держать все пункты, как правило, будет вычислительным узким местом в этом случае.

Рисунок 14.3: иерархия памяти.

674 Глава 14. Управление памятью и b-деревья

Тайники и диски

Определенно, два уровня, которые имеют значение больше всего, зависят от размера проблемы, которую мы пытаемся решить. Для проблемы, которая может соответствовать полностью в главной памяти, два самых важных уровня - кэш-память и внутренняя память. Времена доступа для внутренней памяти могут быть целым в 10 - 100 раз дольше, чем те для кэш-памяти. Желательно, поэтому, быть в состоянии выполнить большинство доступов памяти в кэш-памяти. Для проблемы, которая не соответствует полностью в главной памяти, с другой стороны, два самых важных уровня - внутренняя память и внешняя память. Здесь различия еще более существенные. В течение многих времен доступа для дисков, обычных устройств внешней памяти общего назначения, как правило, целых от 100000 до 1 000, в 000 раз дольше, чем те для внутренней памяти.

Чтобы рассмотреть это последнее число в истинном свете, предположите, что есть студент в Балтиморе, который хочет послать сообщение запроса о деньгах его родителям в Чикаго. Если студент посылает его родителям электронное письмо, оно может достигнуть их домашнего компьютера приблизительно через пять секунд. Думайте об этом способе о коммуникации как соответствие доступу внутренней памяти центральным процессором. Способ коммуникации, соответствующей доступу внешней памяти, который в 500000 раз медленнее, был бы для студента, чтобы идти к Чикаго и передать его сообщение лично, которое займет приблизительно месяц, если он может насчитать 20 миль в день. Таким образом мы должны сделать как можно меньше доступов к внешней памяти.

14.2.2 Кэширование стратегий

Большинство алгоритмов не разработано с иерархией памяти в памяти, несмотря на

большое различие между временами доступа для разных уровней. Действительно, все исследования алгоритма, описанные в этой книге до сих пор, предположили, что все доступы памяти равны. Это предположение, могло бы казаться, сначала, было бы большим надзором - и один мы только обращаемся теперь в последней главе - но есть серьезные основания, почему это - фактически разумное предположение, чтобы сделать.

Одно оправдание за это предположение состоит в том, что часто необходимо предположить, что все доступы памяти занимают то же самое количество времени, так как определенная зависимая от устройства информация о размерах памяти часто трудна прибыть. Фактически, информацию о размере памяти может быть невозможно получить. Например, C ++ программа, которая разработана, чтобы бежать на многих различных компьютерных платформах, не может быть определен с точки зрения определенной конфигурации архитектуры ЭВМ. Мы можем, конечно, использовать архитектуру - определенная информация, если у нас есть он (и мы показываем, как эксплуатировать такую информацию далее в этой главе). Но как только мы оптимизировали наше программное обеспечение для определенного archi-tecture конфигурация, наше программное обеспечение больше не независимо от устройства. К счастью, такая оптимизация не всегда необходима, прежде всего из-за второго justi-fication для равно-разового, предположения доступа памяти.