:
 













³





ij




̲
'



'




˳

























㳿


Գ
Գ
Գ
Գ
ճ






Команды работы со стеком.

Запись слова в стек

push операнд — запись значения операнд в вершину стека.

Чтение слова из стека

pop операнд — запись значения из вершины стека по месту, указанному операндом.

!!!Операндом не может быть регистр CS

!!! Команды PUSH и POP не осуществляют проверку на выход за пределы стека.

Например, если стек пуст, а мы считываем слово из стека, будет считано слово за сегментом стека.

Использование стека

· для временного сохранения значений регистров

например, push cx

. . . ; например во вложенных циклах

pop cx

· для сохранения текущих состояний флагов и последующего их восстановления

pushf

popf

· для определения или изменения состояния любого флага

· для пересылки данных

например, X:=Y push Y

pop X

· при работе с процедурами;

· при определении локальных переменных.

 

29. Иерархия памяти. Кэш памяти.

 

Две возможные стратегии для ускорения быстродействия– уменьшение времени отклика или упреждающий запрос нужной памяти.

Использование регистров и оперативной памяти.

егистры – самые быстрые элементы памяти, они находятся непосредственно на ядре, и доступ к ним практически мгновенный. Если ваша программа делает какие-то вычисления, хотелось бы, чтобы все промежуточные данные хранились на регистрах. Понятно, что это невозможно. Одна из возможных проблем производительности– это проблема вытеснения регистров. Когда вы под каким-нибудь анализатором производительности смотрите на ассемблерный код, вы видите, что у вас очень много движения со стека в регистры и обратно выгрузка регистров на стек. Стоит вопрос – как оптимизировать код так, чтобы самые горячие адреса, самые горячие промежуточные данные, лежали именно на системных регистрах.

Следующая часть памяти – это обычная оперативная память. С ростом производительности процессоров стало ясно, что самым узким местом производительности является доступ к оперативной памяти. Для того, чтобы добраться до оперативной памяти, нужны сотня, а то и две сотни тактов процессора. То есть, запросив какую-то ячейку памяти в оперативной памяти, мы будем ждать двести тактов, а процессор будет простаивать.

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

 

Кэширование

Кэш-память служит для уменьшения времени доступа к данным.

Для этого блоки оперативной памяти отображаются в более быструю кэш-память.

Если адрес памяти находится в кэше – происходит "попадание" и скорость получения данных значительно увеличивается.

В противном случае – "промах" (cash miss)

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

Можно выделить следующие виды кэш-памяти:

· полностью ассоциативная кэш-память (каждый блок может отображаться в любое место кэша)

· память с прямым отображением (каждый блок может отображаться в одно место)

· гибридные варианты (секторная память, память с множественно-ассоциативным доступом)

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

Качество использования кэша – ключевое условие быстродействия.

Дополнительная информация: в современных IA32 системах размер кэш-линии 64 байта.

Уменьшение времени доступа было достигнуто введением кэш-памяти. Кэш-память – это память, находящаяся между оперативной памятью и микропроцессором. Она реализована на ядре, то есть доступ к ней гораздо быстрее чем к обычной памяти, но она намного дороже, поэтому приразработке микроархитектуры нужно найти точный баланс между ценой и производительностью. Если вы посмотрите на описания предлагаемых в продаже процессоров, вы увидите, что всегда в описании пишется, сколько кэша памяти того или иного уровня на данном процессоре есть. Эта цифра серьезно влияет на цену данного изделия. Кэш-память устроена так, что обычная память отображается на кэш-память, отображение идет блоками. Вы, запрашивая в оперативной памяти какой-то адрес, делаете проверку, отображен ли этот адрес в кэш-памяти. Если этот адрес уже есть в кэш-памяти, то вы экономите время на обращение к памяти. Вы считываете эту информацию из быстрой памяти, и у вас время отклика существенно уменьшается, если же этого адреса в кэш-памяти нет, то мы должны обратиться к обычной памяти, чтобы этот необходимый нам адрес вместе с каким-то блоком, в котором он находится, отобразился в эту кэш-память.

Существуют разные реализации кэш-памяти. Бывает полностью ассоциативная кэш-память, когда каждый блок может отображаться в любое место кэша. Существует память с прямым отображением, когда каждый блок может отображаться в одно место, также существуют различные гибридные варианты – например кэш с множественно-ассоциативным доступом. В чем разница? азница во времени и сложности проверки на наличие нужного адреса в кэш-памяти. Предположим, что нам нужен определенный адрес. В случае с ассоциативной памятью нам нужно проверить весь кэш – убедиться, что этого адреса в кэше нет. В случае с прямым отображением нам нужно проверить только одну ячейку. В случае с гибридными вариантами, например, когда используется кэш с множественно-ассоциативным доступом, нам нужно проверить, к примеру, четыре или восемь ячеек. То есть, задача определить есть ли адрес в кэша – тоже важна. Качество использования кэша – важное условие быстродействия. Если нам удастся написать программу так, чтобы как можно чаще те данные, с которыми мы собирались работать, находились в кэше, то такая программа будет работать гораздо быстрее.

Характерные времена отклика при обращении к кэш памяти для Nehalem i7:

· L1 - latency 4

· L2 - latency 11

· L3 - latency 38

Время отклика для оперативной памяти > 100

Упреждающий механизм доступа к памяти реализован при помощи механизма упреждающей выборки (hardware prefetching).

Есть специальный набор инструкций, позволяющий побудить процессор загрузить в кэш память расположенную по определенному адресу (software prefetching).

Для примера возьмем наш последний процессор Nehalem: i7.

Здесь мы имеем не просто кэш, а некий иерархический кэш. Долгое время он был двухуровневый, в современной системе Nehalem он трехуровневый – совсем немного очень быстрого кэша, чуть побольше кэша второго уровня и достаточно большое количество кэша третьего уровня. При этом, эта система построена так, что если какой-то адрес находится в кэше первого уровня, он автоматически находится во втором и в третьем уровнях. Это и есть иерархическая система. Для кэша первого уровня задержка – 4 такта, для второго – 11, третьего – 38 и время отклика оперативной памяти – больше 100 тактов процессора.

Принцип локальности. Качество упреждающей выборки.

Локальность ссылки (locality of reference) – повторное использование переменных или взаимосвязанных данных. азличают временную локальность (temporal locality) – когда речь идет об одних и тех же данных и пространственную локальность (spatial locality) – использование различных данных, имеющих относительно близкие области хранения.

Механизм кэширования использует принцип временной локальности. (Стремится сохранять в кэше наиболее часто используемые данные).

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

Кэш aliasing – из-за неудачного расположения в памяти различных объектов, участвующих в вычислении, происходит вытеснению из кэш памяти одних адресов другими.

Второй вариант улучшения быстродействия и работы с памятью, про который мы упомянули – это подкладывать в кэш заранее необходимые адреса – упреждающий механизм доступа к памяти (Hardware Prefetching). Этот механизм выявляет закономерности, с которыми вы обращаетесь к памяти, и заранее закачивает в кэш адреса, которые могут вам понадобиться. Если вы обрабатываете несколько массивов, движетесь по ним последовательно или с каким-то постоянным шагом, то, скорее всего, этот механизм начнет эти адреса заранее подгружать. Есть специальный набор инструкций, позволяющий загрузить в кэш память, расположенную по определенному адресу. (Software Prefetching)

Кэш имеет внутренние алгоритмы работы. Введем несколько понятий.

Локальность ссылки – переиспользование переменных или взаимосвязанных данных. азличают временную локальность – переиспользование определенных данных и ресурсов и пространственную локальность - использование данных, имеющих относительно близкие области хранения.

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

Механизм упреждающей выборки использует принцип пространственной локальности, то есть подгружает соседние элементы.

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

Иерархическая структура памяти является традиционным решением проблемы

хранения большого количества данных Она изображена на рис. 2.15. На самом

верху находятся регистры процессора. Доступ к регистрам осуществляется быст-

рее всего. Дальше идет кэш-память, объем которой сейчас составляет от 32 Кбайт

до нескольких мегабайт. Затем следует основная пам'ять. Далее идут магнитные

диски и, наконец, накопители на магнитной ленте и оптические диски, которые

используются для хранения архивной информации.

 

ис. 2.15. Пятиуровневая организация памяти

По мере продвижения по структуре сверху вниз возрастают три параметра. Во-

первых, увеличивается время доступа. Доступ к регистрам занимает несколько

наносекунд, доступ к кэш-памяти — немного больше, доступ к основной памяти —

несколько десятков наносекунд. Дальше идет большой разрыв: доступ к дискам

занимает по крайней мере 10 мке, а время доступа к магнитным лентам и оптичес-

ким дискам вообще может измеряться в секундах (поскольку эти накопители ин-

формации еще нужно взять и поместить в соответствующее устройство).

Во-вторых, увеличивается объем памяти. егистры могут содержать в лучшем

случае 128 байтов, кэш-память — несколько мегабайтов, основная память — десятки

тысяч мегабайтов, магнитные диски — от нескольких гигабайтов до нескольких

десятков гигабайтов. Магнитные ленты и оптические диски хранятся автономно

от компьютера, поэтому их объем ограничивается только финансовыми возмож-

ностями владельца.

В-третьих, увеличивается количество битов, которое вы получаете за 1 доллар.

Стоимость объема основной памяти измеряется в долларах за мегабайт1, объем

магнитных дисков — в пенни за мегабайт, а объем магнитной ленты — в долларах

за гигабайт или еще дешевле.

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

разделах мы расскажем о магнитных дисках, а затем приступим к изучению оп-

тических дисков. Накопители на магнитных лентах мы рассматривать не будем,

поскольку они очень редко используются; к тому же о них практически нечего

сказать.




: 1793

<== | ==>
Автоинкрементная и автодекрементная адресация. | КЭШ памяти.

? google:

 

© studopedia.com.ua '.


: 0.01 .