Рассчитать загрузку процесса в гиперпоточном станке
Я пытаюсь рассчитать загрузку процесса на моей машине с Intel Hyper-Threading.
У меня есть одна проблема при попытке сделать расчет:
Я подсчитываю циклы, которые выполняет мой процесс при работе в одиночку на физическом ядре, и подсчитываю его, когда другой процесс (идентичный) выполняется на другом логическом ядре (то же физическое ядро).
Я вижу разницу в количестве циклов, которые выполняет мой процесс. Я предполагаю, что это связано с тем, что я работаю на гиперпоточном компьютере.
Есть ли способ узнать точное время выполнения моего процесса, чтобы я мог добавить его к своим вычислениям, когда пытаюсь рассчитать использование процесса?
1 ответ
Вы можете только сказать, сколько времени занимает логический процессор. Вы не можете сказать, насколько он использует физический процессор, и он на самом деле не определен.
HyperThreading (или, по крайней мере, более современный SMT) не работает путем разделения физического времени ЦП между двумя потоками. Он работает, назначая работу исполнительным блокам внутри ЦП (а таких блоков несколько).
Таким образом, оба потока могут выполняться одновременно - есть несколько целочисленных исполнительных блоков и некоторые другие (память, с плавающей запятой).
Итог - если поток занимает 100% логического процессора, то он занимает 100% процессора. Это все, что вы можете сказать.