Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2017, 12:49   #1
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
Смущение Delphi & OpenCL + программное измерение загрузки GPU-CPU

Уже более года назад приводил здесь на форуме пример работы с OpenCL в связке с Delphi - http://www.programmersforum.ru/showt...=288226http://
-------------------------------------------------------------------
Дополню его. Открываю отдельную тему, т.к. новый пример м.б. интересен и безотносительно к OpenCL , поскольку в нём есть программное (прямо из Delphi-кода) определение:

  • общей загрузки CPU ;
  • загрузки CPU данной задачей ;
  • загрузки GPU (общей);
  • загрузки контроллера памяти GPU ;
  • процента использованной памяти GPU ;
  • температуры GPU .


Внутри той же ссылки для скачивания http://gofile.me/2Zesj/C0f3wb1o добавил папку:

OpenCL_Demo2017 Barrier and Local_Memory REDUCT

В ней новый пример под Delphi XE8 64bit (работает и при компиляции в Delphi под Win32, но с ограничениями, о которых будет сказано ниже).

Отличия:
1. Добавлен пример простейшей редукции с использованием barrier и LocalMemory с обилием комментариев внутри Kernel-файла ProgramGPU1.cpp

2. Показано, как внутри Kernel создать а-ля динамический массив (стандарт языка OpenCL 1.2 этого не позволяет).

3. Главное. На форме (см. вложенный скан экрана, он есть и в указанной выше новой папке) добавлены Gauge-компоненты, показывающие перечисленные выше параметры загрузки системы (CPU-GPU).

4. Для определения загрузки GPU используется nvml.dll, - мануал 2017: https://docs.nvidia.com/deploy/pdf/N...ence_Guide.pdf ,
так что последние 4 параметра определяются только для карт NVIDIA, и при компиляции в Delphi под 64bit. Эта динамич. библиотека для каждой карты NVIDIA - своя, обычно при установке драйвера карты она попадает в папку
C:\Program Files\NVIDIA Corporation\NVSMI\nvml.dll (этот путь прямо прописан в прилагаемом примере по ссылке).

Всё что связано с определением загрузки CPU-GPU находится в отдельном модуле ProcessorUsage.pas, который может быть применён и для других программ (без OpenCL).

5. Если есть желание попробовать OpenCL не только на видеокартах, но и на процессорах INTEL, надо поставить драйвер https://software.intel.com/en-us/art...st_CPU_runtime

6. Буду весьма признателен , если кто-то подскажет способ измерения загрузки GPU от AMD, и самое простое - его температуры. Есть похожая DLL - как у NVIDIA, только для AMD Radeon?

7. Пример делался в Delphi XE8, компилировался под 64bit. Система - Windows 10Pro. При компиляции под 32bit не будут отображаться компоненты загрузки GPU (даже если у вас карта NVIDIA, и по указанному пути удастся найти библиотеку nvml.dll). Кроме того, из-за ограничений в адресации памяти под 32bit, максимальный размер матриц 1400 x 8 (так и задано по умолчанию на форме). Скан экрана при работе тестовой программы прилагаю.

8. Скан фрагмента экрана при работе моей уже не тестовой научной программы-OpenCL, где используется этот-же модуль определения загрузки CPU-GPU, тоже прилагаю.

9. Ещё раз напоминаю, что при запуске *.exe рядом с ним должны лежать два текстовых файла *.cpp - они будут отправлены на компиляцию драйверу видеокарты!


Всех с наступающим Новым годом !!
Изображения
Тип файла: jpg MyProgram GPU usage.jpg (72.4 Кб, 388 просмотров)
Тип файла: jpg Reduct DEMO mini JPG.jpg (58.7 Кб, 147 просмотров)

Последний раз редактировалось Prok186; 28.12.2017 в 16:16.
Prok186 вне форума Ответить с цитированием
Старый 29.12.2017, 12:58   #2
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Спасибо! искал подобное, будет время займусь
PTyTb32 вне форума Ответить с цитированием
Старый 29.12.2017, 13:59   #3
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
По умолчанию

Для ATI-AMD надо вроде в этих библиотеках копаться: atiadlxx.dll , atiadlxy.dll , GPUPerfAPIGL.dll ? С температурой GPU там более менее понятно как разобраться, а вот как с GPUutilization - не ясно: там сессии какие-то...
Prok186 вне форума Ответить с цитированием
Старый 30.12.2017, 15:40   #4
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
По умолчанию

Упсс... Уже cмог определить загрузку GPU от AMD и его текущую температуру - использовал atiadlxx.dll (пример на днях дополню и перезалью на ту же ссылку). Но вот определить, сколько процентов памяти задействовал с карты AMD под свои расчёты на OpenCL пока не смог. C NVIDIA у меня это вышло без проблем (см. пример выше).
Увы, для atiadlxx.dll нет подробного мануала, как для NVIDIA - https://docs.nvidia.com/deploy/pdf/N...ence_Guide.pdf. Может, вообще нужна для AMD другая DLL - GPUPerfAPIGL.dll для определения загрузки памяти ? А как для AMD загрузку контроллера памяти найти - вообще не знаю (даже готовые утилиты типа GPU-z 2.5.0 не показывают загрузку контроллера для AMD, только для NVIDIA). Хорошо бы пример!

Последний раз редактировалось Prok186; 30.12.2017 в 15:43.
Prok186 вне форума Ответить с цитированием
Старый 05.01.2018, 19:40   #5
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
По умолчанию

Прилагаю допиленную версию (zip-файл). Дополнена измерением температуры для AMD тоже, плюс мониторинг скорости вращения вентилятора AMD-NVIDIA, частот (MHz) GPU и памяти для AMD-NVIDIA .
В папку для скачивания (ссылка выше) тоже всё перезалил. Внутри есть под-папка с Supporting Information в названии. Файлы из неё напрямую НЕ используются. Это примеры работы с nvml.dll (NVIDIA) и atiadlxx.dll (AMD) и некоторая документация к этим библиотекам. Например, для второй из них надо открыть в любом броузере ADL_SDK.html.
С процентом загрузки памяти именно AMD, увы, не удалось разобраться, хотя у того же Win10 Task Menager или у GPU-z загрузка памяти AMD отображается.
Если кто-то сможет протестировать измерение загрузки GPU-CPU этим кодом на своём сетапе - будет интересно. Особенно, если установлено 2 (или более) карты AMD или AMD + NVIDIA.
Вот скан части экрана при работе НЕ тестовой программы, где уже мониторится и использование GPU, и скорость вентилятора, и частоты GPU/памяти (в коде применялся тот же модуль ProcessorUsage.pas мониторинга CPU-GPU loading):
Изображения
Тип файла: jpg MyProgram GPU Usage FAN Frequency.jpg (79.6 Кб, 288 просмотров)
Вложения
Тип файла: zip OpenCL_Demo2017_Reduct Usage FAN Frequency Overdrive5only.zip (1.47 Мб, 34 просмотров)
Тип файла: zip ADL_SDK_V10.2.zip (2.74 Мб, 32 просмотров)

Последний раз редактировалось Prok186; 06.01.2018 в 14:46.
Prok186 вне форума Ответить с цитированием
Старый 02.02.2018, 16:57   #6
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
По умолчанию

Тот же пример, но мониторится так же и потребляемая видеокартой мощность (это для NVIDIA). Для AMD потребляемую мощность и занятую память определить через эти DLL так и не удалось.
Вложения
Тип файла: zip OpenCL_Demo2017_Reduct_UsageGPU-CPU_Power.zip (1.46 Мб, 33 просмотров)
Prok186 вне форума Ответить с цитированием
Старый 22.02.2018, 11:31   #7
proghunt
 
Регистрация: 08.04.2016
Сообщений: 3
По умолчанию Не загружается библиотека nvml.dll

Пробовал твой проект запускать.
при попытке загрузки библиотеки nvml.dll
LibHandleNV:= LoadLibraryW(PWideChar(nvml_Lib));

LibHandleNV = 0 и хоть убей.
Приложение компилю в Делфе под 32 платформу (стандарт в делфях), да и возможности переключить платформу тоже не нашёл.
Windows 7 х64.
Подскажи секрет загрузки этой библиотеки? :-)
Если нужно сменить платформу приложения в Делфе, прошу подсказать как именно это сделать, я так и не нашёл информацию.
proghunt вне форума Ответить с цитированием
Старый 10.03.2018, 11:37   #8
Prok186
Пользователь
 
Регистрация: 19.06.2011
Сообщений: 21
По умолчанию

Читаем внимательно выше:
Цитата:
Сообщение от Prok186 Посмотреть сообщение
При компиляции под 32bit не будут отображаться компоненты загрузки GPU (даже если у вас карта NVIDIA, и по указанному пути удастся найти библиотеку nvml.dll)
nvml.dll библиотека есть только под 64-bit (стр.1 мануала - начало первой главы), так что она не будет подключаться при компиляции под Win32, что приводит именно к LibHandleNV = 0 (специально сейчас проверил).
Надо в Delphi менять платформу на Win64: в версии Delphi-Starter этого нет, и может не быть, если был отказ при установке Delphi от 64-bit платформы.
А если всё же в установленной версии Delphi XE8 (или выше - на XE2...XE7 не проверял эту программу) есть платформа Win64, то она включается просто: справа, в Project Manager, кликаем правой кнопкой мышки на Target Platform --> Add Platform
Ну а для начала надо проверить, идёт ли готовый exe-шник (он ведь тоже выложен!), рядом с которым (в той же папке) должны лежать 2 файла *.cpp.

Последний раз редактировалось Prok186; 10.03.2018 в 16:28.
Prok186 вне форума Ответить с цитированием
Старый 10.03.2018, 15:53   #9
proghunt
 
Регистрация: 08.04.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Prok186 Посмотреть сообщение
Читаем внимательно выше:

nvml.dll библиотека не будет подключаться при компиляции под Win32. Надо в Delphi менять платформу на Win64: в версии Delphi-Starter этого нет, и может не быть, если был отказ при установке.
А если всё же в установленной версии Delphi XE8 (или выше) есть платформа Win64, то она включается просто: справа, в Project Manager, кликаем правой кнопкой мышки на Target Platform --> Add Platform
По умолчанию такого нет. Прошу написать в ЛК, skype, telegrame, viber и подсказать, что не так. На форуме конечно же в ответ отвечу.
proghunt вне форума Ответить с цитированием
Старый 18.03.2018, 23:15   #10
proghunt
 
Регистрация: 08.04.2016
Сообщений: 3
По умолчанию

На х64 проект перевёл, теперь хенел хватает, но есть проблема дальше.
Для видеокарт usage, CPU и Mem fryquence показывает -1.
Тестил на GTS 450 и 650 Ti.
Может просто карточки слишком древние?
proghunt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование OpenCL в Delphi-коде под Win64 Prok186 Общие вопросы Delphi 10 05.01.2019 18:00
в чем отличие gpu core clock и gpu clock почему значания разные? gpu0 Компьютерное железо 0 10.06.2012 05:17
Связь загрузки CPU с Task Manager ? spamer Свободное общение 11 19.01.2012 11:31
CPU Internal Cache, программное управление SunKnight Свободное общение 0 11.05.2010 22:30
ИИ в играх-GPU. Что будут делать CPU? Levsha100 Свободное общение 17 03.07.2009 14:54