Spec-Zone.ru › NumPy 1.20

Производительность

Рекомендации

Рекомендуемый генератор для общего использования — PCG64. Он обладает высокой статистической качеством, полным набором функций и высокой скоростью на большинстве платформ, но несколько медленный при компиляции для 32-разрядных процессов.

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

SFC64 обладает высоким статистическим качеством и очень высокой скоростью. Однако он лишен возможности "прыжка". Если вам не нужна эта функция и вы хотите максимальной скорости, даже на 32-разрядных процессах, это ваш выбор.

MT19937 не проходит некоторые статистические тесты и не особенно быстрый по сравнению с современными ПГСЧ. По этим причинам мы в основном не рекомендуем его использовать самостоятельно, только через устаревшее RandomState для воспроизведения старых результатов. Тем не менее, он имеет очень долгую историю как значение по умолчанию во многих системах.

Замеры производительности

Замеры производительности ниже представлены в наносекундах для получения одного случайного значения из конкретного распределения. Исходный генератор MT19937 значительно медленнее, поскольку он требует 2 32-разрядных значения для получения результата, как у более быстрых генераторов.

Производительность целых чисел имеет аналогичный порядок.

Аналогичная закономерность наблюдается для других, более сложных генераторов. Обычная производительность устаревшего генератора RandomState значительно ниже, чем у других, так как он использует преобразование Бокса-Мюллера вместо генератора Зиггурата. Разрыв производительности для экспоненциальных распределений также велик из-за затрат на вычисление логарифма для инверсии функции распределения. Столбец MT19973 использует тот же 32-разрядный генератор, что и RandomState, но генерирует случайные значения с использованием Generator.

MT19937

PCG64

Philox

SFC64

RandomState

32-битные беззнаковые целые числа

3.2

2.7

4.9

2.7

3.2

64-битные беззнаковые целые числа

5.6

3.7

6.3

2.9

5.7

Равномерные распределения

7.3

4.1

8.1

3.1

7.3

Нормальные распределения

13.1

10.2

13.5

7.8

34.6

Экспоненциальные распределения

7.9

5.4

8.5

4.1

40.3

Гамма-распределения

34.8

28.0

34.7

25.1

58.1

Биномиальные распределения

25.0

21.4

26.1

19.5

25.2

Распределения Лапласа

45.1

40.7

45.5

38.1

45.6

Распределения Пуассона

67.6

52.4

69.2

46.4

78.1

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

MT19937

PCG64

Philox

SFC64

32-битные беззнаковые целые числа

101

121

67

121

64-битные беззнаковые целые числа

102

156

91

199

Равномерные распределения

100

179

90

235

Нормальные распределения

263

338

257

443

Экспоненциальные распределения

507

752

474

985

Гамма-распределения

167

207

167

231

Биномиальные распределения

101

118

96

129

Распределения Лапласа

101

112

100

120

Распределения Пуассона

116

149

113

168

Общая производительность

144

192

132

225

Примечание

Все замеры производительности были выполнены на Linux с процессором i5-3570.

Производительность на разных операционных системах

Производительность различается на разных платформах из-за различий в компиляторах и доступности оборудования (например, разрядности регистров). Генератор по умолчанию был выбран для хорошей производительности на 64-разрядных платформах. Производительность на 32-разрядных операционных системах существенно отличается.

Указанные значения приведены в нормированном виде относительно скорости MT19937 в каждой таблице. Значение 100 указывает на соответствие производительности MT19937. Более высокие значения указывают на улучшение производительности. Эти значения нельзя сравнивать между таблицами.

64-разрядная Linux

Распределение

MT19937

PCG64

Philox

SFC64

32-битные беззнаковые целые числа

100

119.8

67.7

120.2

64-битные беззнаковые целые числа

100

152.9

90.8

213.3

Равномерные распределения

100

179.0

87.0

232.0

Нормальные распределения

100

128.5

99.2

167.8

Экспоненциальные распределения

100

148.3

93.0

189.3

Общая производительность

100

144.3

86.8

180.0

64-разрядный Windows

Относительная производительность на 64-разрядном Linux и 64-разрядном Windows в целом аналогична.

Распределение

MT19937

PCG64

Philox

SFC64

32-битные беззнаковые целые числа

100

129.1

35.0

135.0

64-битные беззнаковые целые числа

100

146.9

35.7

176.5

Равномерные распределения

100

165.0

37.0

192.0

Нормальные распределения

100

128.5

48.5

158.0

Экспоненциальные распределения

100

151.6

39.0

172.8

Общая производительность

100

143.6

38.7

165.7

32-разрядный Windows

Производительность 64-разрядных генераторов на 32-разрядном Windows значительно ниже, чем на 64-разрядных операционных системах из-за разрядности регистров. MT19937, генератор, который используется в NumPy с 2005 года, работает с 32-разрядными целыми числами.

Распределение

MT19937

PCG64

Philox

SFC64

32-битные беззнаковые целые числа

100

30.5

21.1

77.9

64-битные беззнаковые целые числа

100

26.3

19.2

97.0

Равномерные распределения

100

28.0

23.0

106.0

Нормальные распределения

100

40.1

31.3

112.6

Экспоненциальные распределения

100

33.7

26.3

109.8

Общая производительность

100

31.4

23.8

99.8

Примечание

Замеры производительности на Linux выполнены с использованием Ubuntu 18.04 и GCC 7.4. Замеры производительности на Windows были выполнены на Windows 10 с использованием оптимизирующей компилятора Microsoft C/C++ версии 19 (Visual Studio 2015). Все замеры производительности выполнены на процессоре i5-3570.

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/performance.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API