RSS RSS
Добавлено: 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.

Ответить | Цитировать