Какова латентность и пропускная способность инструкции RDRAND на Ivy Bridge?

Я не могу найти информацию о agner.org о задержке или пропускной способности RDRAND. Однако этот процессор существует, поэтому информация должна быть там.

Изменить: На самом деле в новейшей инструкции по оптимизации упоминается эта инструкция. Он задокументирован как 200 циклов и общая полоса пропускания не менее 500 МБ/с на Ivy Bridge. Но некоторые более глубокие статистические данные по этой инструкции были бы замечательными, поскольку латентность и пропускная способность являются переменными.

Ответы

Ответ 1

Я написал librdrand. Это очень простой набор процедур для использования команды RdRand для заполнения буферов случайными числами.

Данные о производительности, которые мы показали в IDF, - это тестовое программное обеспечение, которое я написал, которое порождает ряд потоков, использующих pthreads в Linux. Каждый поток потянет заполняет буфер памяти случайными числами, используя RdRand. Программа измеряет среднюю скорость и может выполнять итерацию при изменении количества потоков.

Поскольку между каждым ядром и общим DRNG и обратно есть время задержки связи в оба конца, а время ожидания больше, чем время, необходимое для генерации случайного числа в DRNG, средняя производительность, очевидно, увеличивается по мере добавления потоков, вплоть до максимума пропускная способность достигнута. Физическая максимальная пропускная способность DRNG на IVB составляет 800 Мбайт/с. 4-жильный IVB с 8 потоками управляет чем-то размером 780 Мбайт/с. При меньшем числе нитей и сердечников достигается меньшее число. Число 500 Мбайт/с несколько консервативно, но когда вы пытаетесь сделать честные требования к производительности, вы должны быть.

Поскольку DRNG работает на фиксированной частоте (800 МГц), в то время как частоты ядра могут изменяться, количество тактовых циклов ядра на RdR и изменяется в зависимости от частоты ядра и количества других ядер, одновременно обращающихся к DRNG. Кривые, представленные в презентации IDF, представляют собой реалистичное представление о том, чего ожидать. Общая производительность немного зависит от частоты ядра, но не так много. Число доминирующих элементов.

Нужно быть осторожным при измерении производительности RdRand, чтобы фактически использовать результат RdRand. Если вы этого не сделаете, И.Е. вы сделали это. RdRand R6, RdRand R6,....., RdRand R6 повторяется много раз, производительность будет считаться искусственно высокой. Поскольку данные не используются до того, как они будут перезаписаны, конвейер ЦП не дожидается возвращения данных из DRNG до того, как он выдает следующую инструкцию. Те тесты, которые мы написали, записывают полученные данные в память, которые будут в кэше на кристалле, поэтому конвейер ждет ожидания данных. Вот почему hyperthreading намного эффективнее с RdRand, чем с другими типами кода.

Детали конкретной платформы, тактовой частоты, версии Linux и версии GCC были указаны в слайдах IDF. Я не помню цифры с головы. Доступны чипы, которые медленнее, а чипы доступны быстрее. Число, которое мы дали для 200 циклов на инструкцию, основано на измерениях около 150 основных циклов на инструкцию.

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

Ответ 2

Вы найдете некоторую релевантную информацию в Руководство по внедрению программного обеспечения цифровых цифровых генераторов (DRNG).

Далее следует стенограмма:

Измеренная пропускная способность:

Up to 70 million RDRAND invocations per second
500+ million bytes of random data per second
Throughput ceiling is insensitive to the number of contending parallel threads

Ответ 3

Я провел некоторые предварительные тесты пропускной способности на реальном Ivy Bridge i7-3770 с использованием оболочки "librdrand" и генерирует 33-35 миллионов 32 бит в секунду на одном ядре.

Этот номер 70M от Intel составляет около 8 ядер; для одного они сообщают только о 10М, поэтому мой тест более чем в 3 раза лучше: -/

Ответ 4

Вот некоторые показатели производительности, которые я получаю с помощью rdrand: http://smackerelofopinion.blogspot.co.uk/2012/10/intel-rdrand-instruction-revisited.html

На i5-3210M (2,5 ГГц) Ivybridge (2 ядра, 4 потока) я получаю пик ~ 99,6 млн. 64-разрядных rdrands в секунду с 4 потоками, что соответствует ~ 6,374 млрд бит в секунду.

8-канальный i7-3770 (3,4 ГГц) Ivybridge (4 ядра, 8 потоков). Я поразил максимальную пропускную способность 99,6 млн. 64-битных rdrands в секунду на 3 потоках.