Используйте профилировщик для поиска проблемных мест. Я работаю с
https://developer.nvidia.com/nsight-systems, но есть и другие, в том числе более популярные варианты.
В первую очередь стоит оптимизировать асимптотическую сложность.
Дальше можно подумать о распаралеливании на несколько потоков.
Если уже и так все оптимально, можно посмотреть на микро оптимизации:
https://habr.com/en/company/intel/blog/257309/
Ну и кроме того можно использовать CUDA для обработки на GPU