![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
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 ::
реклама |