Здравствуйте!
Чтобы заставить вашу однопоточную программу на C++ использовать 90-100% ресурсов одного ядра процессора, необходимо учесть несколько моментов:
1. **Оптимизация алгоритма**: Первым делом посмотрите на сам алгоритм. Если он действительно последовательный и требует много операций, убедитесь, что он оптимизирован. избегайте излишнего использования циклов и ненужных проверок.
2. **Использование эффективных структур данных**: Проверьте, возможно ли заменить используемые вами структуры данных на более эффективные. Например, использование хэш-таблиц вместо списков может значительно ускорить выполнение программы в некоторых случаях.
3. **Профилирование**: Используйте инструменты профилирования, такие как Visual Studio Profiler, Valgrind или gprof, чтобы выявить узкие места в вашем коде. Профилирование покажет, сколько времени ваша программа тратит на каждую функцию, что поможет вам понять, где именно происходит замедление.
4. **Минимизация запросов на память**: Частые операции выделения и освобождения памяти действительно могут вызвать задержки. Попробуйте использовать пул памяти или заранее выделить память под массивы, чтобы минимизировать накладные расходы на управление памятью.
5. **Избегайте ненужных копирований**: Используйте перемещение (move semantics), если это возможно. Не забывайте про ссылки (`&`) и `std::move` для избежания ненужных копирований.
6. **Компиляция с оптимизацией**: Вы уже использовали опцию `-O2`, но также можете попробовать другие уровни оптимизации (`-O3`, `-Ofast`) или попробовать включить специфические флаги для вашей архитектуры.
7. **Отключение блокирующих операций**: Убедитесь, что в коде нет места, где происходит ожидание каких-либо условий или ресурсов.
8. **Использование многопоточности**: Если алгоритм позволяет, рассмотрите возможность разработки многопоточной версии вашего приложения, в этом случае ваши расчеты могут значительно ускориться за счет параллелизации.
Если на всём процессе есть места, в которых программа ждет (например, из-за обращений к диску или сети), это также может снизить загрузку CPU. Однако в вашем случае, если программа не выполняет блокирующих операций, это уже не должно быть проблемой.
Если у вас есть конкретные участки кода, вы можете написать их здесь, и я помогу вам их проанализировать.