Из тайников процессорной памяти

09 Июн 2018

Построить всю оперативную память на сверх­ско­рост­ных эле­мен­тах SRAM не­воз­мож­но (вер­нее, слиш­ком до­ро­го), а вот со­здать про­ме­жу­точ­ный бу­фер срав­ни­тель­но не­боль­шо­го раз­ме­ра, ди­на­ми­че­ски пе­ре­ме­щая в не­го наи­бо­лее вос­тре­бо­ван­ную ин­фор­ма­цию – за­да­ча впол­не вы­пол­ни­мая. Ре­а­ли­за­ция этой кон­цеп­ции в ви­де кэш-па­мя­ти, кро­ме все­го про­че­го, по­зво­ли­ла со­гла­со­вать быстро­дейст­вие CPU и DRAM.

На­сколь­ко эф­фек­тив­но это по­лу­чи­лось у каж­до­го из про­цес­сор­ных ги­ган­тов: Intel и AMD? Срав­ним силь­ные сто­ро­ны чи­пов i5-8400 и Ry­zen 5 1600, по воз­мож­нос­ти из­бе­гая фрейдистских не­нуж­ных ана­ло­гий. В качестве стендовой платформы с первым из них используется ASUS Prime B360 Plus, а CPU от AMD поможет проявить себя MSI X370 XPo­wer Gam­ing Ti­ta­nium.

В качестве стендовой платформы с процессором Intel используется ASUS Prime B360 Plus
Рис1В качестве стендовой платформы с процессором Intel используется ASUS Prime B360 Plus

Intel: ставка на AVX

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

Зависимость скорости чтения от размера блока в окрестности объема кэш-памяти L1 шестью потоками процессора Intel Core i5-8400
Рис 2Зависимость скорости чтения от размера блока в окрестности объема кэш-памяти L1,
чтение выполняется шестью потоками, процессор Intel Core i5-8400

На графиках по оси X откладывается размер обрабатываемого (в данном примере повторно считываемого) блока данных. Ось Y соответствует скорости чтения. Пока размер блока меньше размера кэш-памяти L1, блок по­ме­ща­ет­ся в кэш и поэтому скорость доступа к нему высокая. При выходе за пределы L1, вследствие появления L1-промахов, скорость падает. В силу сказанного, при оценке скорости L1 наиболее информативной является «верх­няя ступенька», соответствующая левому участку графика и максимальной скорости.

Зависимость скорости чтения от размера блока в окрестности объема кэш-памяти L1 шестью потоками процессора AMD Ryzen 5 1600
Рис 3Зависимость скорости чтения от размера блока в окрестности объема кэш-памяти L1,
​чтение выполняется шестью потоками, процессор AMD Ryzen 5 1600

Максимальная скорость в мегабайтах в секунду (MBPS) соответствует минимальному количеству тактов на ин­струк­цию (CPI, Clocks Per Instruction) и составляет около 1457320 MBPS для процессора Intel и 653022 MBPS для про­цес­со­ра AMD. Измерение выполняется в 6 потоков (по количеству ядер исследуемых чипов). Для чтения данных при­ме­не­на 256-битная форма AVX-инструкции VMOVAPD.

В качестве источника образцовых интервалов времени используется счетчик TSC (Time Stamp Counter). Поскольку при оверклокинге ядро процессора и TSC тактируются асинхронно, значения тактов TSC на инструкцию являются дробными величинами.

NB: Ранее мы знакомили читателя с методикой выполнения прецизионных измерений на основе параметра Actual Tur­bo Per­for­mance, выполненных UEFI-приложением с максимальным уровнем привилегий (ring0).

Поясним природу выигрыша Intel в этом сравнении. 256-битная AVX-загрузка занимает 0.5 такта (Intel) и 1 такт (AMD) для исследуемых процессоров при условии выровненных операндов (адрес которых кратен 32 байтам, что соответствует 256 битам). Следовательно, при равных тактовых частотах количество таких загрузок за единицу времени, определяющее скорость кэш-памяти, для процессора Intel будет вдвое выше.

В качестве стендовой платформы с процессором AMD используется MSI X370 XPo­wer Gam­ing Ti­ta­nium
Рис 4В качестве стендовой платформы с процессором AMD используется MSI X370 XPo­wer Gam­ing Ti­ta­nium

AMD: ставка на размер

Воспользуемся утилитой JavaCPUID для определения параметров кэш-памяти.

Параметры кэш-памяти современных процессоров Intel определяются с помощью функции CPUID #00000004h
Рис 5Параметры кэш-памяти современных процессоров Intel определяются
с помощью функции CPUID #00000004h

Каждое из 6 ядер процессора Core i5-8400 CPU @ 2.80GHz снабжено кэш-памятью первого уровня по 32 KB для ин­струк­ций и данных, а также общим для инструкций и данных кэшем L2 размером 256 KB. Общий для инструкций и дан­ных, а также общий для всех ядер кэш L3 имеет размер 9 MB.

Параметры кэш-памяти современных процессоров AMD определяются с помощью функции CPUID #8000001D
Рис 6Параметры кэш-памяти современных процессоров AMD определяются
с помощью функции CPUID #8000001D

Каждое из 6 ядер процессора AMD Ryzen 5 1600 Six-Core Processor снабжено кэш-памятью первого уровня 64 KB для инструкций и 32 KB для данных, а также общим для инструкций и данных кэшем L2 размером 512 KB. Общий для ин­струкций и данных, а также общий для групп ядер (nodes) кэш L3 имеет размер 8 MB на группу ядер.

Полный размер кэш-памяти L3 процессоров AMD определяется с помощью функции CPUID #80000006h
Рис 7Полный размер кэш-памяти L3 процессоров AMD определяется
с помощью функции CPUID #80000006h

Декларирование чипом AMD размера кэш-памяти L3 на группу ядер (L3 per node) потребовало использования дополнительной CPUID-функции, чтобы узнать полный размер L3 для процессора. Он составляет 16 MB. Каждая из двух групп ядер рассматриваемого процессора содержит 3 ядра и с учетом технологии Hyper-Threading может выполнять 6 потоков.

Расчет теоретических лимитов

Для оценки эффективности кэш-памяти был намеренно выбран сценарий тестирования, использующий наи­бо­лее про­из­во­ди­тель­ный ресурс персональной платформы (L1 Cache), методом, обеспечивающим наивысшую про­из­во­ди­тель­ность – чтение инструкциями AVX256. Хотя процессор AMD проиграл по скорости, отметим, что «бо­лез­ни роста», вследствие которых одна векторная инструкция выполнялась медленнее, чем заменяющая ее по­сле­до­ва­тель­ность ска­ляр­ных инструкций, остались в прошлом. Вычислим теоретические скорости работы кэш-памяти для про­те­с­ти­ро­ван­ных процессоров Intel и AMD с целью дополнительной верификации полученных результатов.

Чип Intel Core i5-8400 в режиме Turbo способен разгоняться до частоты 4.0 GHz (количество ядер – 6). За половину такта передается 256-битный операнд, что составляет 32 байта, следовательно, за один такт передается 64 байта:

  • 4.0 * 6 * 64 = 1536 гигабайт в секунду

Запись занимает вдвое больше тактов:

  • 4.0 * 6 * 32 = 768 гигабайт в секунду

Чип AMD Ryzen 5 1600 Six-Core в режиме Turbo способен разгоняться до частоты 3.6 GHz (количество ядер – 6). За один такт передается 256-битный операнд, что составляет 32 байта:

  • 3.6 * 6 * 32 = 691.2 гигабайт в секунду

Запись занимает вдвое больше тактов

  • 3.6 * 6 * 16 = 345.6 гигабайт в секунду

В данном упрощенном расчете не учитывается зависимость разгонного лимита от количества одновременно ак­тив­ных ядер и типа нагрузки (non-AVX, AVX): ведь на старой доброй инструкции MOV процессоры идут «ноздря в ноздрю». На практике, указанные обстоятельства несколько снижают час­тот­ные свой­ства процессоров, что видно по результатам измерений. Нелишне напомнить о влиянии системы ох­лаж­де­ния

Резюме

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

Теги: