АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Сравнительная характеристика основных типов памяти

Читайте также:
  1. V. Характеристика современного гражданского права
  2. VII. МИФЫ ПАМЯТИ И ЗАБВЕНИЯ
  3. Амортизация основных фондов
  4. Анализ возможных мест утечки веществ и характеристика этих веществ.
  5. Анализ динамического ряда. Вычисление основных показателей динамического ряда
  6. Анализ основных показателей финансово-экономической деятельности отеля «Старый дворик»
  7. АНАЛИЗ ОСНОВНЫХ ФОНДОВ ПРЕДПРИЯТИЯ
  8. Анализ состава и структуры основных средств предприятия
  9. Анализ счета 02 «Амортизация основных средств» за март 2015г.
  10. Архитектуры процессоров по разделению памяти данных и команд (Архитектура фон Неймана, Гарвардская архитектура).
  11. Бактерии, их характеристика
  12. БИБЛИОГРАФИЯ ОСНОВНЫХ НАУЧНЫХ ТРУДОВ ПРОФЕССОРА, ДОКТОРА ПРАВА ВАСИЛИЯ ИВАНОВИЧА СИНАЙСКОГО

С точки зрения пользователя PC главная характеристика памяти - это скорость или, выражаясь другими словами, ее быстродействие. Казалось, что может быть проще, чем измерять быстродействие? Достаточно подсчитать количество информации, выдаваемой памятью в единицу времени (скажем, Мегабайт в секунду), и… ничего не получится! Ведь, как мы уже знаем, время доступа к памяти непостоянно и в зависимости от ряда обстоятельств варьируется в очень широких пределах. Наибольшая скорость достигается при последовательном чтении, а наименьшая - при чтении в разброс.

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

Современные модули памяти имеют несколько независимых банков и потому могут обрабатывать более одного запроса одновременно. Таким образом, несмотря на то, что выполнение каждого отдельно взятого запроса по-прежнему будут занимать весьма внушительное время (конденсаторное ядро так ведь и не было переработано!), запросы могут следовать непрерывно. А раз так, - непрерывно будут приходить и ответы.

Теоретически все так и есть, но на практике возникает множество затруднений. Основной камень преткновения - фундаментальная проблема зависимости по данным. Рассмотрим следующую ситуацию. Пусть ячейка N 1 хранит указатель на ячейку N 2, содержащую обрабатываемые данные. До того, как мы получим содержимое ячейки N 1, мы не сможем послать запрос на чтение ячейки N 2, поскольку, еще не знаем ее адрес. Следовательно, производительность памяти в данном конкретном случае будет определяться не пропускной способностью, а ее латентностью, т.е. полным временем доступа к одной ячейке.

Причем, описываемый случай отнюдь не является надуманным, скорее наоборот. Это - типичная ситуация. Базовые структуры данных - деревья и списки - имеют ярко выраженную зависимость по данным, т.к. объединяют свои элементы именно посредством указателей, что сводит на нет весь выигрыш от параллелизма. Большинство функции штатных библиотек Си/Си++ также имеют зависимость по данным и не могут обрабатывать их параллельно.

Маскировать латентность позволяют лишь очень немногие алгоритмы, да и то не без помощи специальных команд предвыборки (см. статью " Управление кэшированием в x86 процессорах старших поколений", опубликованную в апрельском номере журнала за этот год). Команды предвыборки, во-первых, отсутствуют в микропроцессорах Pentium младшего поколения. Во-вторых, они чрезвычайно аппаратно зависимы и требуют реализовать код как минимум в двух вариантах - отдельно для процессоров Pentium и отдельно для процессоров K6/K7, причем, реализация для Pentium-III будет весьма не оптимальна для Pentium-4 и, соответственно, наоборот. (На Pentium-II это же и вовсе не будет работать и вызовет исключение "неверный опкод"). Наконец, в-третьих, команды предвыборки до сих пор не поддерживаются ни одним оптимизатором, и вряд ли будут поддерживаться в ближайшем будущем. Ручная же оптимизация - слишком сложна и трудоемка, чтобы стать массовой.

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

(1)

здесь: C - пропускная способность (Мегабайт/c), N - разрядности памяти (бит), T - полное время доступа (нс.).

Сравнив полученные результаты с теоретической пропускной способностью (см. рис. 8), мы увидим, что, во-первых, расхождение между ними чрезвычайно велико и к тому же неуклонно увеличивается по мере совершенствования памяти. Во-вторых, при обработке зависимых данных эффективная производительность SDRAM и DDR-SDRAM практически неразличима, а Direct RDRAM и вовсе идет на уровне памяти начала девяностых. Причем, фактическая производительность всех типов памяти будет еще ниже, чем рассчитанная по формуле (1). Это объясняется тем, что, во-первых, современные процессоры обмениваются с памятью не отдельными ячейками, а блоками по 32 и ли 128 байт (в зависимости от длины кэш-линеек), вследствие чего издержки на хаотичный доступ чрезвычайно велики. Во-вторых, приведенная выше формула не учитывает ни латентности контроллера памяти, ни штрафа за асинхронность, ни времени регенерации памяти, ни…

Фактически, разница в реальной и заявленной производительности отличается приблизительно в десять раз для DDR-SDRAM и в пятьдесят (!) для Direct-Rambus. Кошмар! Что это: преднамеренное введение потребителя в заблуждение или несбалансированная конфигурация системы? Оказывается, верно последнее предположение.

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

Как минимум потребуется разработать принципиально новые алгоритмы обработки данных, обеспечить соответствующую поддержку параллелизма со стороны компилятора и/или штатных библиотек, наконец, маркетоидам надлежит придумать: зачем рядовому пользователю обрабатывать терабайты данных. Вообще-то, все три этих пункта давным-давно реализованы, но… только не на IBM PC, а на суперкомпьютерах! Однако, главное отличие суперкомпьютеров от персоналок заключается отнюдь не в вычислительной мощности, а в возложенных на них задачах. Задачи, стоящие перед персоналками, колоссальной пропускной способности просто не требуют (при грамотном подходе к программированию, конечно). И даже из тех, что требуют, далеко не все поддаются эффективному распараллеливанию по данным.

Короче говоря, "официальная" пропускная способность - это абстракция чистейшей воды, интересная скорее с маркетинговой точки зрения, но абсолютно бесполезная для конечного пользователя…

Таблица 1 Важнейшие характеристики основных типов памяти

Рисунок 8 Максимально достижимая пропускная способность основных типов памяти при наличии зависимости по данным и при отсутствии таковой.


1 | 2 | 3 | 4 | 5 | 6 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)