|  | 
|      | 
|  | 
| Integer Real World TestsBoost , Chapter 1. Boost.Multiprecision , Performance Comparison
  
   | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| целочисленный тип | Относительная производительность (реальное время в скобках) | 
|---|---|
| Полигон::деталь::extended_int | 1(0.138831s) | 
| int256_t | 1.19247 (0.165551s) | 
| int512_t | 1.23301(0.17118s) | 
| int1024_t | 1.21463(0.168628s) | 
| check_int256_t | 1.31711(0.182855s) | 
| check_int512_t | 1.57413(0.218538s) | 
| check_int1024_t | 1.36992(0.190187s) | 
| cpp_int | 1.63244 (0.226632s) | 
| mpz_int | 5.42511(0.753172s) | 
| tom_int | 29.0793 (4.03709s) | 
Обратите внимание, что в этом случае любое динамическое распределение является убийцей производительности.
Следующиетестыизмеряют время, затрачиваемое на генерацию 1000 128-битных случайных чисел, и тест на первичность с использованием теста Миллера Рабина. Это в первую очередь тест модульной экспоненциации, так как это шаг ограничения скорости:
| целочисленный тип | Относительная производительность (реальное время в скобках) | 
|---|---|
| cpp_int | 5.25827(0.379597s) | 
| cpp_int (без шаблонов выражения) | 5.15675(0.372268s) | 
| cpp_int (128-битный кэш) | 5.10882(0.368808s) | 
| cpp_int (256-битный кэш) | 5.50623 (0.397497s) | 
| cpp_int (512-битный кэш) | 4.82257(0.348144s) | 
| cpp_int (1024-битный кэш) | 5.00053 (0.360991s) | 
| int1024_t | 4.37589 (0.315897s) | 
| check_int1024_t | 4.52396 (0.326587s) | 
| mpz_int | 1(0.0721905s) | 
| mpz_int (без шаблонов выражения) | 1.0248 (0.0739806s) | 
| tom_int | 2.60673(0.188181s) | 
| tom_int (без шаблонов выражения) | 2.64997(0.191303s) | 
Интересно отметить, что шаблоны выражений здесь малоэффективны - возможно, потому, что фактические задействованные выражения относительно тривиальны в этом случае - поэтому время, необходимое для умножения и деления, имеет тенденцию доминировать. Также обратите внимание на то, что увеличение внутреннего размера кэша, используемого<cpp_int>, довольно эффективно в этом случае при полном вырезании выделений памяти — примерно на треть от общего времени выполнения. Наконец, гораздо более быстрые времена от GMP и tommath сводятся к их гораздо лучшим алгоритмам модульной экспоненциации (GMP примерно в 5 раз быстрее). Это проблема, которая должна быть решена в будущем выпускеcpp_int.
Тестовый код был скомпилирован с помощью Microsoft Visual Studio 2010 со всеми включенными оптимизациями (/Ox), и использовался MPIR-2.3.0 иMPFR-3.0.0. Тесты проводились на 32-разрядной машине Windows Vista.
Статья Integer Real World Tests раздела Chapter 1. Boost.Multiprecision Performance Comparison может быть полезна для разработчиков на c++ и boost.
:: Главная :: Performance Comparison ::
| реклама |