так в том то и дело, можно тупо смотреть на то что у тебя Ядра нагружены, а можно пойти немного дальше и посомтреть, а какой толк от нагрузок, сколько фпс прибавилось то. потому что работа ядер может быть вхолостую. к примеру, в процессор уже давно встраивают блок который анализирует код и пытается понять куда пойдёт исполнятся программа, анализатор ветвлений условных переходов, и тем самым отрабатывает заранее часть следующего кода наперёд, но если предсказание не совпало с действительностью - результат отбрасывается, а нагрузку пользователь по графикам увидит. вот так это работает. для этого нужно оптимизировать код под компилятор - это как раз для того, чтобы производительность стала заметна, а не только нагрузка.
Процессоры с branch prediction появились еще в 89 году, за 12 лет до первого многоядерного процессора. Суперскаляры появились на год раньше branch prediction. Связь этих вещей с многопоточным исполнением околонулевая. Оптимизации под суперскаляр и branch prediction это полезные и нужные штуки, но они вообще максимально ортогональны многопоточным оптимизациям. И да, в вове еще с бк 2 треда используются на полную (как и во всех играх с 2007-2008 года выпуска, когда все подряд начали делить логику на мейнтред и рендертред). Вообще если вы уверены, что вов не умеет нормально работать с многоядерными процессорами, поставьте поменьше разрешение, оставьте игре в таскменеджере один хардварный поток и посмотрите, что у вас с фпс станет. Потом увеличьте до 2, и опять замерьте, потом 4 и т.д.
Да, на сколько угодно потоков игра не скалируется, но движки полностью на джобах стали делать где-то в 2014-2015 годах только, и для этого действительно желательно изначально проектировать движок под такую архитектуру. Но с оптимизациями под компиляторы это вообще никак не связано. Оптимизации под компилятор вообще используются в самую последнюю очередь на самых критичных участках, потому что потом чокнешься их поддерживать, а выхлоп относительно затраченных усилий не такой большой.