![]() |
Добавлено: 2020-12-19 21:25:23 19.12.2020 ВЫШЛА ВЕРСИЯ 2.1c PUBLIC |
Raul Зарегистрирован(а): 17.03.2010 Сообщений: 101 (просмотреть) |
- Ассемблерное умножение на процессорах AMD Zen и Zen+ ускорено на 40% за счет применения инструкции MULX. - Тест производительности для Athlon 200GE и Ryzen 2 2600K. - Бета-тестирование завершено. 30.11.2017 ВЫШЛА ВЕРСИЯ 2.1c BETA PUBLIC При использовании в вычислительных целях рекомендуется отключить макро _CBIGNUM_HARDWARE_MUL для всех трансляторов, кроме 64-разрядного Microsoft Visual C++. См. также важное замечание к макро _CBIGNUM_SMALL_DIV и _CBIGNUM_SMALL_POWMOD к версии 2.1b. - Готовится в качестве будущей высокопроизводительной стабильной версии на замену 2.0 public. - Операции над машинными числами перенесены в файл Cbnl.h. - Использование типа long long для CBNL, если компилятор совместим co стандартом С++11. - Быстрое аппаратное умножение под 32-разрядным Microsoft Visual C++ без применения дополнительного ассемблерного пакета, ускорение примерно в 10 раз. - Использование аппаратного умножения вместо двоичного метода под любым транслятором С++ (двоичный метод доступен при отмене макро _CBIGNUM_HARDWARE_MUL). - Поддержка 64/32 и 128/64-разрядного аппаратного деления в дополнительном ассемблерном пакете под Visual C++ и GNU C++. - Все тестовые 64-битные программы под Windows и Linux компилируются с установленным макро _CBIGNUM_HARDWARE_DIV, которое разрешает использование аппаратного деления. - Программы Arifexp и Miller выдают информацию о разрядности и методах, применяемых для ускорения вычислений. - Обновлена оценка времени умножения в программе Arifexp. - Документирована опция -mhz в программе Arifexp. - Результаты тестирования производительности для 32-разрядного С++ кода с аппаратным умножением. - Тест производительности для Core i7-6800K и Phenom II X6. 10.11.2017 ВЫШЛА ВЕРСИЯ 2.1b BETA PUBLIC ВАЖНОЕ ЗАМЕЧАНИЕ: При отключенных макро _CBIGNUM_SMALL_DIV и _CBIGNUM_SMALL_POWMOD данная версия класса использует алгоритмы, протестированные в версии 2.0 public. Новые алгоритмы деления задействуются только при включенных макро (по умолчанию). Эти алгоритмы в настоящее время проходят публичное бета-тестирование и пока не рекомендуются для проведения достоверных вычислений. - Оптимизация алгоритмов деления на 32/64/128-разрядный (однословный или двухсловный) делитель для сокращения число условных переходов. Достигается примерно 2-кратный рост производительности по сравнению с исходными реализациями в версиях 2.1a и 2.1b internal. - Оптимизация 32/64/128-разрядного (однословного или двухсловного) модуля неограниченного числа для сокращения число условных переходов. Достигается примерно 2-кратный рост производительности по сравнению с исходными реализациями в версиях 2.1a и 2.1b, а также на 60-80% ускоряется возведение в степень по двухсловному модулю. - Оптимизация алгоритма степени по однословному модулю для сокращения числа условных переходов при трансляции под Microsoft Visual C++ 2010 (дает 2-3 кратный рост производительности, ранее этот эффект достигался только под Visual C++ 2015). - Небольшая оптимизация аппаратного деления с модулем, старый метод доступен при установленном макро _CBIGNUM_REVERSE_MOD. - Оптимизация вывода неограниченного числа (около 10% или более процентов производительности для относительно небольших чисел). - Оптимизация методов деления и модуля с таблицей сдвигов для снижения накладных расходов. - ИЗМЕНЕНИЕ: Методы fit(), tab(), smp(), gc() и pack() теперь недоступны для константных чисел из-за возможных проблем с многопоточностью. Установите макро _CBIGNUM_CONSTCAST в файле Cbignum.h, если надо использовать эти методы как прежде. - Новые методы divtab() и modtab(), дополнительная документация по методам setdivtab(), setmodtab() и setdivmodtab(). - Из файлов Cbignum.cpp и Cbignumf.inl удален квалификатор register с целью соответствия стандарту C++11. - Проверена совместимость с Microsoft Visual C++ 2017. - Все программы для Windows теперь компилируются под Microsoft Visual C++ 2015 Community ради поддержки встроенных функций с переносом/займом. Программы, скомпилированные под Visual C++ 2012 и ниже работают заметно медленнее при операциях с двухсловным делителем/модулем. - Тестовые программы Miller64 и Miller64x для Windows скомпилированы с установленным макро _CBIGNUM_HARDWARE_DIV. - Построены новые исполняемые файлы для Linux с улучшенным кодом 32/64-разрядного аппаратного умножения и ускоренными операциями с малым делителем/модулем. - ИСПРАВЛЕНО: Prime.cpp не включает аппаратное деление для факторизации однословных чисел при компиляции в 64-разрядном режиме под Microsoft Visual C++. - ИСПРАВЛЕНО: Предупреждение компилятора в Prime.cpp, связанное с файлом Ctty.h. - ИСПРАВЛЕНО: Тестовые программы Arifexp64x, Matrix64x и Miller64x для процессоров с BMI2 не запускаются под 64-разрядной Windows XP. - ИСПРАВЛЕНО: Завышенная оценка времени деления в программе Arifexp для больших делителей размером до ~16,000,000 бит. - ИСПРАВЛЕНО: Генератор случайных чисел может работать неправильно при компиляции в более чем 64-разрядном режиме (неактуально для современных компиляторов). 27.07.2017 ВЫШЛА ВЕРСИЯ 2.1b BETA INTERNAL ВЕРСИЯ ПРЕДНАЗНАЧЕНА ДЛЯ ОЗНАКОМЛЕНИЯ И ТЕСТИРОВАНИЯ При использовании версии данной для вычислительных целей следует отключить макро _CBIGNUM_SMALL_DIV и (возможно) _CBIGNUM_SMALL_POWMOD. - Оптимизированный алгоритм деления неограниченного числа на 64/128-разрядный двухсловный делитель, ускорение в 2-3 раза. - Ускоренное в 10 раз возведение в степень по 64/128-разрядному модулю. - Использования инструкции LZCNT вместо BSR при трансляции для AVX2 в программах Arifexp64x, Matrix64x, Miller64x. - Проверка деления/модуля на малый делитель альтернативным алгоритмом с таблицей сдвигов в программе Arifexp.exe. - ИСПРАВЛЕНО: Методы toCBNL(), tolong(), toint() and toshort() не работают для ненормализованных чисел. - ИСПРАВЛЕНО: Сдвиг на ненормализованное число не работает. - ИСПРАВЛЕНО: Некорректная отладочная проверка индексов при возведении в степень ненормализованного числа. - ИСПРАВЛЕНО: Ошибка распределения памяти при возведении в ненормализованную степень. - ИСПРАВЛЕНО: Возможно некорректная работа очитка чисел в методах clear(), gc() и pack() (ошибка в версии 2.1а бета). 27.06.2017 ОБНОВЛЕНИЕ ВЕРСИИ 2.1a BETA INTERNAL ВЕРСИЯ ПРЕДНАЗНАЧЕНА ДЛЯ ОЗНАКОМЛЕНИЯ И ТЕСТИРОВАНИЯ - Использование встроенных функций компилятора в 32-разрядном Visual C++. - Макро _CBIGNUM_SMALL_DIV и _CBIGNUM_SMALL_POWMOD для включения тестовых алгоритмов для короткого делителя/модуля, реализованных в 2.1 и последующих версиях класса. ПРИМЕЧАНИЯ: При выключенном макро _CBIGNUM_SMALL_DIV данную тестовую версию класса можно использовать для вычислительных целей. При выключенных _CBIGNUM_SMALL_DIV и _CBIGNUM_SMALL_POWMOD данная версия использует только алгоритмы версии 2.0 public. - ИСПРАВЛЕНО: Неправильный результат деления CBNL_MIN/CNBL_MIN. 09.06.2017 ВЫШЛА ВЕРСИЯ 2.1 BETA INTERNAL ВЕРСИЯ ПРЕДНАЗНАЧЕНА ТОЛЬКО ДЛЯ ОЗНАКОМЛЕНИЯ И ТЕСТИРОВАНИЯ - Упрощенный и оптимизированный алгоритм деления неограниченного числа на 32/64-разрядный делитель с возможностью использования аппаратного деления, если установлено макро _CBIGNUM_HARDWARE_DIV. Этот алгоритм заменяет алгоритмы, ранее разработанные для версий 1.2c и 2.1. - Новый алгоритм деления ускоряет тест "строго вероятной простоты" Миллера в 2 раза для однословных чисел и на 20% для двухсловных чисел. - Обновленный тестовый файл Millrand для больших чисел. 28.12.2016 ВЫШЛА ВЕРСИЯ 2.1 BETA INTERNAL (теперь BETA PUBLIC) - Использование встроенных (intrinsic) функций Microsoft Visual C++ в качестве опции для 64-разрядного кода на стандартном С. - Быстрое аппаратное умножение под 64-разрядным Microsoft Visual C++ без применения дополнительного ассемблерного пакета, ускорение примерно в 10 раз. - Оптимизированное деление 2-3 словного числа на 32/64-разрядный делитель. - Оптимизированный 32/64-разрядный модуль неограниченного числа с возможностью использования аппаратного деления, если установлено макро _CBIGNUM_HARDWARE_DIV. - Ускоренное в 10 раз возведение в степень по 32/64-разрядному модулю. - Опция _CBIGNUM_REDUCE_JUMPS игнорируется, поскольку оптимизация компилятора работает эффективнее. - Возобновлено бета-тестирование для нового кода. - ИСПРАВЛЕНО: Опечатка в тесте деления файла Arifrand. |
Ответить | Цитировать |