Параллелизм или сериализация: история одного поражения

В 1999 году Rambus выпустила RDRAM — ре­во­лю­ци­он­ную по тем вре­ме­нам тех­но­ло­гию опе­ра­тив­ной па­мя­ти, в ко­то­рой на­ря­ду с 16-бит­ной ши­ной ис­поль­зо­ва­лись ме­то­ды кон­вей­е­ри­за­ции и ап­па­рат­ной ка­либ­ров­ки сиг­наль­ных це­пей. Ком­па­ния Ram­bus ста­ла но­ва­то­ром в пе­ре­да­че ин­фор­ма­ции с двой­ной ско­ро­стью (Double Data Rate или DDR) — за счёт счи­ты­ва­ния ко­манд и дан­ных по двум фрон­там так­то­во­го сиг­на­ла. Пре­и­му­ще­ст­во RDRAM в при­ме­не­нии DDR в даль­ней­шем со­шло на нет, по­сле то­го как так­ти­ро­ва­ние по фрон­ту и спа­ду по­лу­чи­ло при­ме­не­ние у гос­под­ст­ву­ю­ще­го кон­ку­рен­та — син­хрон­ной ди­на­ми­че­ской па­мя­ти SDRAM.

Казалось бы, 64-битная шина DDR SDRAM не оставляет шансов 16-бит­ной Rambus-памяти. Если в оценках ла­тент­но­с­ти они еще го­то­вы тя­гать­ся на равных, то пропускная способность классической технологии хра­не­ния должна без ого­во­рок быть луч­ше. Так ли это?

Для ответа на этот вопрос проведем четыре опыта, исследуя поведенческие эф­фек­ты в ок­рест­но­с­ти точ­ки пе­ре­пол­не­ния кэш L2=512KB, которая в на­шем экс­пе­ри­мен­те является кэш-па­мя­тью по­сле­д­не­го уров­­ня (LLC, Last Level cache). Для тес­то­вых за­дач задействуем режим «больших страниц» (Large Pages), уменьшающий влияние фак­то­ра TLB (Trans­la­tion Look­a­side Buffer) на ре­зуль­та­ты тес­тов. Ис­сле­ду­е­мые плат­фор­мы на базе материнских плат ASUS с одним и тем же про­цес­со­ром Pen­ti­um 4 North­wood у нас такой кон­фи­гу­ра­ции:

  • Стенд для DDR SDRAM: плата ASUS P4P800-MX на чипсете Intel Morgan Hill i865GV, оперативная память — два DIMM-мо­дуля GR400D64L3 объемом 1 ГБ производства Wilk Elektronik, со­от­вет­ст­ву­ю­щих тре­бо­ва­ни­ям PC3200, работающих в двух­ка­наль­ном режиме PC2100 для обес­пе­че­ния ус­лов­но­го па­ри­те­та про­из­во­ди­тель­но­сти;
  • Стенд для RDRAM: плата ASUS P4T533-C на чипсете Intel Tehama i850E, оперативная память — два RIMM-мо­ду­ля объ­е­мом 512 МБ про­из­вод­ст­ва A-Tech, со­от­вет­ст­ву­ю­щих спе­ци­фи­ка­ции PC1066, ра­бо­та­ю­щих в двух­ка­наль­ном ре­жиме PC1066.

Наблюдая производительность, будем обращать внимание на характерную «ступеньку», связанную с пе­ре­пол­не­ни­ем кэш-па­мя­ти. Правее ее, после выхода за пределы L2, мы увидим график, отражающий про­пуск­ную спо­соб­ность DRAM, когда осу­щест­вля­ет­ся обработка данных, не по­мес­тив­ших­ся в кэш.

Хорошим индикатором производительности станет также использованием опции «Nontemporal» — она в за­ви­си­мо­с­ти от ти­па сценария позволяет частично или полностью подавить кэширование, оптимизировав ал­го­ритм для об­ра­бот­ки боль­ших бло­ков. По умолчанию, для тестов кэш-памяти эта опция отключена и кэ­ши­ро­ва­ние используется, что важно для диф­фе­рен­ци­ро­ван­но­го ис­сле­до­ва­ния ско­рос­ти обмена с ОЗУ и кэш.

Опыт 1

Чтение из оперативной памяти и кэш: по умолчанию, тестовый сценарий оптимизирован для блоков, со­из­ме­ри­мых с кэш-памятью L2 (Nontemporal=Off).

Чтение из DDR SDRAM и кэш-памяти, опция Nontemporal отключена

 

Чтение из RDRAM и кэш-памяти, опция Nontemporal отключена

 

Левее точки X=512KB события развиваются внутри процессора — используется кэш-память. В обоих опытах ре­зуль­та­ты сход­ные как количественно, так и качественно, если судить по форме кривой. Хотя платформа с RDRAM по­ка­зы­ва­ет бо­лее ста­биль­ные результаты. Правее точки X=512KB главным участником событий ста­но­вит­ся опе­ра­тив­ная па­мять. Скорость чтения из RDRAM — около 3042 MBPS, память DDR чуть быст­рее — око­ло 3300 MBPS. В этом опы­те ал­го­ритм, оп­ти­ми­зи­ро­ван­ный для небольших блоков, при­ну­ди­тель­но об­ра­ба­ты­ва­ет и большие блоки.

Опыт 2

Запись в оперативную память и кэш: по умолчанию, тестовый сценарий оптимизирован для блоков, по­ме­ща­ю­щих­ся в кэш-память L2 (Nontemporal=Off).

Запись в DDR SDRAM и кэш-память, опция Nontemporal отключена

 

Запись в RDRAM и кэш-память, опция Nontemporal отключена

 

Этот опыт подобен предыдущему, но для операции записи. Правее точки X=512KB подключается опе­ра­тив­ная па­мять, ре­зуль­тат RDRAM — около 903 MBPS, память DDR заметно быстрее — около 1275 MBPS. Здесь так­же ал­го­ритм, оп­ти­ми­зи­ро­ван­ный для не­боль­ших блоков, обрабатывает большие блоки. Для записи по­след­ст­вия такого не­со­от­вет­ст­вия бо­лее зна­чи­мы. Участок оперативной памяти, в который выполняется за­пись, кэшируется, но в силу большого объема, ин­фор­ма­ция вытесняется из кэш-памяти до повторного ис­поль­зо­ва­ния из-за поступления новых данных.

Опыт 3

Чтение из оперативной памяти и кэш: сценарий, оптимизирован для блоков, объем которых превышает кэш-память L2 (Non­temp­oral=On).

Чтение из DDR SDRAM и кэш-памяти, опция Nontemporal включена

 

Чтение из RDRAM и кэш-памяти, опция Nontemporal включена

 

Пульсации не позволяют принять значения минимумов в качестве результата, особенно для DDR, тем не ме­нее, пре­и­му­ще­ст­во DDR в скорости чтения опе­ра­тив­ной памяти, как по графикам NCRB, так и по результатам AIDA64, не­ос­по­ри­мо, ре­зуль­та­ты RDRAM при этом от­ли­ча­ют­ся большей ста­биль­но­стью.

Опыт 4

Запись в оперативную память и кэш: сценарий, оптимизирован для блоков, объем которых превышает кэш-память L2 (Non­temp­oral=On).

Запись в DDR SDRAM и кэш-память, опция Nontemporal включена

 

Запись в RDRAM и кэш-память, опция Nontemporal включена

 

Для записи в режиме Nontemporal кэширование полностью подавлено, в результате «ступенька» от­сут­ст­ву­ет, а ме­ди­ан­ные зна­че­ния скорости записи 2823 MBPS для RDRAM и 2802 MBPS для DDR вполне ре­ле­вант­ны по­ка­за­ни­ям тес­та AIDA64. Оба бенч­мар­ка де­мон­ст­ри­ру­ют пусть и не­зна­чи­тель­ное, но все же пре­и­му­ще­ст­во RDRAM.

Резюме

Одна из тенденций, проявившихся в тесте пропускной способности оперативной памяти, состоит в том, что ес­ли ал­го­ритм об­ра­бот­ки бло­ка данных оптимизирован в соответствии с его объемом, в лучшем положении ока­зы­ва­ет­ся тех­но­ло­гия Ram­bus. А DDR SDRAM лучше справляется с моделированием неоптимальных сце­на­ри­ев.

Стабильность RDRAM, о которой уже много сказано в на­ших пуб­ли­ка­ци­ях, и это подтверждают другие ав­то­ри­тет­ные ис­точ­ни­ки, ве­ро­ят­но, улучшается вследствие преобразования параллельной передачи данных в вы­со­ко­час­тот­ную по­сле­до­ва­тель­ную на тща­тель­но от­ка­ли­б­ро­ван­ной линии связи. Опыт подсказывает, что тех­но­ло­гия се­ри­а­ли­за­ции, все­г­да ог­ра­ни­чен­ная час­то­той шины, действительно готова предложить ус­той­чи­вый уровень производительности без рез­ких всплес­ков и про­ва­лов. В случае Rambus это до край­но­с­ти су­зи­ло горизонт возможностей. Способность адап­ти­ро­вать­ся к росту частоты обмена могла бы стать козырем в про­ти­во­сто­я­нии с классическими схе­ма­ми под­клю­че­ния SDRAM.

Подводя итоги ретротестированию, отметим, что на платформах с DDR5 ширина одного канала памяти умень­ше­на с 64 до 32 ли­ний, не считая контрольных битов. При этом DIMM-модуль остается 64-битным и об­слу­жи­ва­ет два 32-бит­ных ка­на­ла, иног­да на­зы­ва­е­мых суб-каналами. Такой переход от двух 64-битных ка­на­лов к четырем 32-битным, при со­хра­не­нии тра­ди­ци­он­ной 128-битной шины, покрываемой двумя мо­ду­ля­ми, робко намекает на то, что в во­про­сах оп­ти­ми­за­ции (и в том числе сериализации!) ин­тер­фей­са DRAM еще ра­но ставить точку.

На очереди — эль-классико DDR4–DDR5, судить будет NCRB. Не переключайтесь! Будет интересно…