Repository navigation
3.2.1
Прирост скорости ~8%
Что было сделано:
Анализ узкого места: Выявлено, что функция SqrModP (возведение в квадрат по модулю) создавала чрезмерную нагрузку на регистровый файл GPU, вычисляя большой массив mar[28] (224 байта) целиком перед использованием. Это приводило к вытеснению данных в медленную память.
Оптимизация SqrModP:
Реализовано "чередование" (Interleaving) вычислений: элементы массива mar теперь вычисляются небольшими группами непосредственно перед их использованием в функциях сложения. Это позволяет освобождать регистры сразу после использования данных.
Устранен указатель m32, который мог мешать компилятору эффективно размещать переменные массива mar в регистрах.
Проверка корректности: Математическая логика функции не изменена — изменен только порядок выполнения независимых операций умножения. Это гарантирует, что итоговый результат вычислений останется прежним, но скорость работы GPU-ядра увеличится за счет уменьшения задержек памяти.