По большей части, да, я думаю, что это выглядит разумно. Имейте в виду, что гиперпоточность на самом деле просто подделывает два ядра. Каждому физическому ядру предоставляется два интерфейса, поэтому он может читать два потока инструкций параллельно. Но они все еще используют одни и те же исполнительные единицы. Поэтому, когда одно ядро HT занято, исполнительные блоки заняты, и поэтому его «двойное» ядро сможет выполнять очень мало работы.
Это похоже на то, что вы видите на первых двух ядрах (второе, в частности, делает это очень очевидным)
Кроме того, вы почти никогда не сможете добиться идеальной загрузки ЦП. Иногда ядро просто должно остановиться в ожидании памяти. Иногда он выполняет дорогостоящую нетранслируемую инструкцию, эффективно блокируя исполнительные блоки на этом физическом ядре, возможно, на десятки или даже сотни циклов.
И иногда зависимости между инструкциями могут просто означать, что у вас нет чего-либо для выполнения одного или нескольких ядер.
Кроме того, вы видите 8 графиков, и у вас есть только 4 ядра, поэтому да, конечно, гиперпоточность работает . ;)