Member 12113322 Ответов: 1

Как я могу сделать один процесс на одно ядро процессора на Windows


Программно получить cpuid, на котором работает каждый процесс, а также использование ядра процессора различных процессов на каждом ядре.
Пример
Имя Core1 Core2 Core3 Core4
notepad.exe 0,5% 0,2% 0,1% 0,3%


Мне нужен код api c++ для платформы windows

Что я уже пробовал:

Да у меня есть tried.it возможно ли в linux использование ps-p "pid"- L-o pid,psr,pcpu мне нужно получить эквивалентную команду или код, чтобы получить psr и pcpu в windows.
В windows с помощью wmi можно получить только общую загрузку процессора для процесса, а не на ядро за использование процесса.

Dave Kreskowiak

Ты не можешь. Windows не отслеживает процессы "на ядро".

Member 13036251

Вы пробовали powershell? Не знаю, как вы можете получить это гранулированное.

Member 12113322

Я действительно попробовал PowerShell. команда ps не перечисляет атрибуты psr и pcpu, а также эквивалентные tasklist и GetProcess() api не перечисляют эти свойства.любой инструмент, который предоставляет эту информацию о процессе?

Foothill

Вы можете приблизиться к этой информации с помощью классов инструментария управления Windows, но не без хороших вычислений в реальном времени, которые, скорее всего, нарушат процесс, который вы хотите отслеживать.

Member 12113322

Классы Win32_PerfRawData_PerfProc_Process и Win32_PerfFormattedData_PerfOS_Processor обеспечивают общее процессорное время для процесса и общее процентное время ядра для отдельных ядер соответственно.

Andy Bantly

Я бы предложил пойти на форум SysInternals и спросить этих волшебников, как они это делают...

1 Ответов

Рейтинг:
0

Javier Luis Lopez

Я должен был сделать отдельную программу под названием "cpu timer" с тем же количеством потоков, что и ядра, что делает простую операцию в цикле. Каждую секунду его остановка советует, сколько сумм вы выполнили в каждых 4 потоках.
Затем запустите свое приложение, а затем оно сохранит суммы/потоки без запуска вашего приложения.

Затем бросьте свое приложение, чтобы производительность "таймера процессора" была ниже, чтобы вы могли снова отобразить производительность каждого потока начальных значений.

У вас должна быть какая-то ошибка, потому что обслуживание системы windows будет запускать другие потоки
У вас будет проблема, потому что, когда основной процессор нагревается, он может работать на более низкой скорости, поэтому вы должны также прочитать тактовую частоту процессора, чтобы принять ее во внимание.

Код может быть примерно таким:

Every thread:

cout<<"Wait a second, please\n";
long count,sum=0;auto time0=clock()/CLOCKS_PER_SEC,time=time0;
for (count=0;;count++)
{
    time=clock();if (time/CLOCKS_PER_SEC>time0) break;
}
long performance_before=count;

cout<<"Now you can throw your app, please\n"; //to be performed one time.
while(1)
{
    for (count=0;;count++)
    {
        time=clock();if (time/CLOCKS_PER_SEC>time0) break;
    }
    cout<<"Thread num percentage occupancy="<<100.0*count/performance_before<<" ./.\n";
}