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