Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.01.2017, 20:03
QweR1ty QweR1ty вне форума
Прохожий
 
Регистрация: 24.01.2017
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
Восклицание Узнать нагрузку процесса на GPU

Всем доброго времени суток . Требуется создать аналог Process Explorer. Узнать сколько процесс потребляет ресурсов, я разобрался, кроме потребления GPU. Кто знает как узнать на сколько данный процесс нагружает GPU? У гугла спрашивал, но так и не нашел инфу
Ответить с цитированием
  #2  
Старый 24.01.2017, 20:51
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от QweR1ty
Всем доброго времени суток . Требуется создать аналог Process Explorer. Узнать сколько процесс потребляет ресурсов, я разобрался, кроме потребления GPU. Кто знает как узнать на сколько данный процесс нагружает GPU? У гугла спрашивал, но так и не нашел инфу
Тут несколько примеров поодных программ http://www.delphisources.ru/pages/so...ch-system.html
Ответить с цитированием
  #3  
Старый 24.01.2017, 21:50
QweR1ty QweR1ty вне форума
Прохожий
 
Регистрация: 24.01.2017
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
По умолчанию

Цитата:
Сообщение от Admin
Тут несколько примеров поодных программ http://www.delphisources.ru/pages/so...ch-system.html
Просмотрел все исходники на данной странице. Так и не нашел программы, которая отображает загрузку GPU выбранным процессом
Ответить с цитированием
  #4  
Старый 25.01.2017, 18:44
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Для энвидии я бы копал в сторону nvsmi...
Ответить с цитированием
  #5  
Старый 27.03.2017, 11:32
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию

Могу предложить только внешнюю dll 32/64 бит

32 бит - http://www.delphisources.ru/forum/at...d=149060318 3

64 бит http://www.delphisources.ru/forum/at...d=149060322 5

и код для ее пользования

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
uses TlHelp32;
 
type
  NTSTATUS = System.LongInt;
 
type
  PLARGE_INTEGER = ^LARGE_INTEGER;
 
var
  procmangpuLibrary: HMODULE = INVALID_HANDLE_VALUE;
  ntdllLibrary: HMODULE = INVALID_HANDLE_VALUE;
 
type
  TPmGPUInitialize = function(): Boolean; cdecl;
 
  TPmGPUGetProcessStatistics = function(
    ProcessHandle: THandle;
    SharedUsage: PULONGLONG;
    DedicatedUsage: PULONGLONG;
    BytesAllocated: PULONGLONG;
    BytesReserved: PULONGLONG;
    SmallAllocationBlocks: PULONGLONG;
    LargeAllocationBlocks: PULONGLONG;
    WriteCombinedBytesAllocated: PULONGLONG;
    WriteCombinedBytesReserved: PULONGLONG;
    CachedBytesAllocated: PULONGLONG;
    CachedBytesReserved: PULONGLONG;
    SectionBytesAllocated: PULONGLONG;
    SectionBytesReserved: PULONGLONG;
    RunningTime: PInt64): Boolean; cdecl;
 
  TNtQueryPerformanceCounter = function(
    PerformanceCounter: PLARGE_INTEGER;
    PerformanceFrequency: PLARGE_INTEGER): NTSTATUS; stdcall;
 
var
  PmGPUInitialize: TPmGPUInitialize = nil;
  PmGPUGetProcessStatistics: TPmGPUGetProcessStatistics = nil;
  NtQueryPerformanceCounter: TNtQueryPerformanceCounter = nil;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  procmangpuLibrary := LoadLibrary('procmangpu.dll');
 
  @PmGPUInitialize := GetProcAddress(procmangpuLibrary, 'PmGPUInitialize');
  @PmGPUGetProcessStatistics := GetProcAddress(procmangpuLibrary, 'PmGPUGetProcessStatistics');
 
  ntdllLibrary := LoadLibrary('ntdll.dll');
 
  @NtQueryPerformanceCounter := GetProcAddress(ntdllLibrary, 'NtQueryPerformanceCounter');
 
  PmGPUInitialize;
end;
 
function PmGetPerformanceCounters(var PerformanceCounter: LARGE_INTEGER; var PerformanceFrequency: LARGE_INTEGER): NTSTATUS;
begin
  Result := NtQueryPerformanceCounter(@PerformanceCounter, @PerformanceFrequency);
end;
 
var
  SharedUsage: ULONGLONG;
  DedicatedUsage: ULONGLONG;
  BytesAllocated: ULONGLONG;
  BytesReserved: ULONGLONG;
  SmallAllocationBlocks: ULONGLONG;
  LargeAllocationBlocks: ULONGLONG;
  WriteCombinedBytesAllocated: ULONGLONG;
  WriteCombinedBytesReserved: ULONGLONG;
  CachedBytesAllocated: ULONGLONG;
  CachedBytesReserved: ULONGLONG;
  SectionBytesAllocated: ULONGLONG;
  SectionBytesReserved: ULONGLONG;
  RunningTime: LONGLONG;
 
  GPU_RunningTime, GPU_RunningTimeDelta: LONGLONG;
  GPU_ElapsedTime: Extended;
  GPU_PerformanceCounter, GPU_PerformanceCounterDelta: LONGLONG;
  GPU_Usage: Extended;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ToolHelp32SnapShot: THandle;
  ProcessEntry32: TProcessEntry32;
  ProcessHandle: THandle;
  PerformanceCounter, PerformanceFrequency: LARGE_INTEGER;
  Status: NTSTATUS;
begin
  ToolHelp32SnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 
  if ToolHelp32SnapShot <> INVALID_HANDLE_VALUE then
  begin
    try
      ProcessEntry32.dwSize := SizeOf(TProcessEntry32);
 
      while Process32Next(ToolHelp32SnapShot, ProcessEntry32) = True do
      begin
        if ProcessEntry32.th32ProcessID = StrToIntDef(Edit1.Text, 0) then
        begin
          ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, True, ProcessEntry32.th32ProcessID);
 
          if ProcessHandle <> 0 then
          begin
            try
              PmGPUGetProcessStatistics(
                ProcessHandle,
                @SharedUsage,
                @DedicatedUsage,
                @BytesAllocated,
                @BytesReserved,
                @SmallAllocationBlocks,
                @LargeAllocationBlocks,
                @WriteCombinedBytesAllocated,
                @WriteCombinedBytesReserved,
                @CachedBytesAllocated,
                @CachedBytesReserved,
                @SectionBytesAllocated,
                @SectionBytesReserved,
                @RunningTime);
 
              Status := PmGetPerformanceCounters(PerformanceCounter, PerformanceFrequency);
 
              if Status = ERROR_SUCCESS then
              begin
                if PerformanceCounter.QuadPart > GPU_PerformanceCounter then
                  GPU_PerformanceCounterDelta := PerformanceCounter.QuadPart - GPU_PerformanceCounter;
                GPU_PerformanceCounter := PerformanceCounter.QuadPart;
                GPU_ElapsedTime := GPU_PerformanceCounterDelta * 100000 / PerformanceFrequency.QuadPart;
                GPU_RunningTimeDelta := RunningTime - GPU_RunningTime;
                GPU_RunningTime := RunningTime;
                GPU_Usage := GPU_RunningTimeDelta / GPU_ElapsedTime;
 
                Caption := FormatFloat('0.00', GPU_Usage);
              end;
 
            finally
              CloseHandle(ProcessHandle);
            end;
          end;
        end;
      end;
    finally
      CloseHandle(ToolHelp32SnapShot);
    end;
  end;
end;
Вложения
Тип файла: zip procmangpu32.zip (1.53 Мбайт, 14 просмотров)
Тип файла: zip procmangpu64.zip (1.90 Мбайт, 19 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025