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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.01.2016, 13:42
Prok186 Prok186 вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 22
Репутация: 10
Подмигивание OpenCL в Delphi XE2 под Win64bit: можете протестировать на своей видеокарте?

Суть проблемы. Есть весьма объёмный ПК для научных расчётов: интерфейс, База данных, много-поточные расчёты (на CPU пока), графика 2D, графика 3D на OpenGL, анимация результатов в виде компрессированного avi-файла на выходе - всё делалось на Delphi XE2...XE6 и прекрасно работает. Надо подключить модуль для переноса части длительных фрагментов расчёта на GPU. Этот модуль пытались писать на Visual Studio 2015 - расширение языка C++ AMP, как DLL: работает, но криво: не на всех видеокартах, увы (текст тестовой программы выложен в той же папке для скачивания - см.ниже). Ну и вечная проблема с недостающими DLL к тому что написано на Visual Studio: даже опции компилятора /MT не помогают... На JAVA тоже сейчас мои коллеги пишут этот расчётный модуль - через OpenCL... Ну не в этом вопрос. Есть примеры использования библиотеки OpenCL.dll прямо в проектах Delphi (чехи, например, делали, есть ещё компоненты от MITOV для Delphi Seattle - http://www.mitov.com/ ). Эти несложные примеры работают, но...только при компиляции под Win32, а компилируешь проект Delphi под Win64 - затык...
-----
Сейчас вроде с помощью советов с другого форума, удалось траблы победить, и сделать работоспособный тест.
-----
Вот ссылка для скачивания: http://gofile.me/2Zesj/C0f3wb1o
========
Там в папке:
========
1) Полезная утилита GPU_Caps_Viewer_Setup_v1.26.0.0.exe для контроля состояния видеокарты, особенно, если нажать кнопку "More GPU Info".
2) OpenCL1_2_Delphi.zip - файл с примером от чехов (Университет Брно, насколько помню) использования OpenCL в Delphi, 2013год. У меня этот пример не всегда корректно работал при компиляции под Win64 (не на всех видео-картах). Но там хороший заголовочный файл CL.pas - его можно чуть доработать с учётом замечания про NativeInt с другого форума: заменить тип size_t на NativeInt для Win64, и использовать вместо моего "укороченного" MyOpenCL.pas - см.ниже.
---
3) Вложенная папка с моим вариантом программы-теста. Она самодостаточна: больше ничего не надо, ну разве что последние версии видео-драйверов установить. Тест сделан под Delphi XE2 (работает и под XE6). Причём работает, по крайней мере у меня, при компиляции под Win32, и что более важно- под Win64. Всего 2 файла:
--> MyOpenCL.pas: заголовочный; я его урезал - убрал ненужные мне функции, которые в принципе можно взять из файла чехов CL.pas + учёл полезное замечание с др.форума про NativeInt ;
--> FMain.pas : тестовая программа. Выделяет на GPU память (создаёт буферы) под 16 массивов (квадратных матриц из cl_Float - по 4 байта, размер стороны которых задаётся на основной форме, по умолчанию 1200) и под ещё один массив, того же размера, куда пишется результат несложных вычислений на GPU. Потом запускается итерационный цикл (количество итераций - для проверки времени работы - задаётся тоже на форме, по умолчанию - 12). Внутри каждой итерации 16 массивов заполняются данными, затем запускается ещё и внутренний цикл: 30 проходов вызова расчётного ядра на GPU. Такая структура тестовой программы больше всего подходит под наши научные задачи (вычислит. гидродинамика), но пока это лишь тест. В тесте есть несложная проверка правильности вычислений - для одного из элементов матрицы-результата, поскольку НЕ все драйверы видеокарт (особенно старые) могут диагностировать Kernel Error.
--> программа на С для ядра - текстовый файл ProgramGPU.CL (должен лежать рядом с MyFirstOpenCL.exe !!): там можно глянуть, что делается с одномерными массивами на GPU. Она прямо передаётся в виде строки на GPU, там копилируется и линкуется - ну как обычно в OpenCL.
Нужная DLL для OpenCL - под Win64 или Win32 - подключится из системных папок Windows автоматически, в зависимости от компиляции.
----
4) Можете на своём сетапе запустить прямо готовый MyFirstOpenCL.exe (это версия 64bit !!) с параметрами:
--> размер стороны матрицы = 3200; лезут 17 таких матриц на видеокарту от 1Gb и выше; если не влезут (часть видео-памяти уже занята чем-то - GPU_Caps_Viewer в помощь) - возможны ошибки, которые диагностируются НЕ всем драйверами видеокарт, а только новыми;
--> количество итераций (внешний цикл) = 12.
---
5) У меня для указанного примера время счёта вышло:
NVIDIA GT-430 (1Gb, 96core, 700MHz core) - 3мин 37сек;
NVIDIA GTS-450 (1Gb, 192core, 810MHz core) - 1мин 36сек;
NVIDIA GTX-570 (1.28Gb, 480core, 732MHz core) - 42.5сек;
AMD Radeon R9 M275X (2Gb, 640core, 925MHz core) - 1мин 27сек - настольный моноблок ASUS 2702;
NVIDIA GT-545 (3Gb, 144core, 720MHz core) - 2 мин 50сек (тестировали на др. форуме);
NVIDIA GTX-980 (4Gb, 2048 CUDA Cores, 1278MHz) - 25.8сек (тестировали на др. форуме).
===
Тестировал здесь (добавляю):
NVIDIA GeForce GTX 780 Ti (3Gb, 2880 CUDA Cores, 876MHz) - 23,6сек
NVIDIA GeForce GTX 750 Ti (2Gb, 640 CUDA Cores, 1020MHz) - 43.7сек
NVIDIA GeForce GTX 980 Ti (6Gb, 2816 CUDA Cores, 1190MHz Boost, MSI) - 22.1сек - добавил, после того как установил такой акселератор в свой комп (09.02.16).
----
Может кто-то попробовать MyFirstOpenCL.exe на своих видеокартах??? Поскольку это проект дельфовый, никакие внешние DLL ему не нужны (кроме тех что в Windows у всех есть), как и всякие - джава-машины: только для видео-карты новые драйверы желательны.
Запустить, нажать верхнюю кнопку на форме, установить размер матрицы 3200 (если 1200 отработает корректно), выбрать платформу-девайс, нажать нижнюю кнопку на форме. Записать время счёта: оно выдаётся в итоговом окне.
Нам сейчас на работу надо будет покупать новую карту 4-6Gb именно для расчётов...денег более 60тр вряд ли выделят... AMD конечно подешевле, но... Такие сопоставительные тесты на задачах, приближенных к нашим, были бы полезны!! Были бы полезны и замечания участников форума по тестовой программе.
===
К сожалению, у меня нет под рукой видео-карты (акселератора) с памятью на борту 4Gb-12Gb. Было бы интересно протестить и на таких "монстрах", повышая понемногу размер входной матрицы (требуемую память тестовая программа сообщит в начале работы): для того и писалось под Win64 - нужна большая память. Буду признателен!

Последний раз редактировалось Prok186, 09.02.2016 в 15:11.
Ответить с цитированием
  #2  
Старый 22.01.2016, 16:25
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Ваш exe-шник прошёл за 10,19 сек (NVIDIA GT-740).
Window 7, 64-bit.
Ответить с цитированием
  #3  
Старый 22.01.2016, 16:37
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Это было для размера по умолчанию (1200). Для размера 3200 получилась 1 мин. 12 сек.
Ответить с цитированием
  #4  
Старый 22.01.2016, 18:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Че-то ничего не считает у меня. После нажатия TestOpenCL получаю сообщение о размере памяти графического процессора и все. Возможно неподходящая ось. Тестил на Win10.
ПС: О я невнимателен оказался. Файлик CL не скачал.
NVidia GeForce GTX 780 Ti
Первый тест: 1200 - 2с 646мс
Второй тест: 3200 - 23с 629мс
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.01.2016 в 18:53.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Prok186 (22.01.2016)
  #5  
Старый 22.01.2016, 22:59
Prok186 Prok186 вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
NVidia GeForce GTX 780 Ti
Первый тест: 1200 - 2с 646мс
Второй тест: 3200 - 23с 629мс
Абсолютный рекорд на сег.день! Новую видяху видимо закажу (на работе) NVIDIA GeForce 980 Ti (6Gb),
https://www.ulmart.ru/goods/3594251#tab-properties
Ответить с цитированием
  #6  
Старый 23.01.2016, 03:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Именно эту модель не советую брать. Это модификация, причем довольно неудачная - два вентилятора достаточно шумные к тому же они довольно быстро выходят из строя. Вот такой вариант предпочтительнее.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 10.02.2016, 20:14
Prok186 Prok186 вне форума
Прохожий
 
Регистрация: 19.06.2011
Сообщения: 22
Репутация: 10
По умолчанию

А пока тут вяло шло тестирование видеокарт... уже переписал часть "трудоёмкого" кода в своей основной (не тестовой уже) программе на OpenCL, 3 кернела. Сравнительно быстро всё отладил. Предварительный итог: время счёта на задачах (сутками считаются - гидродинамика) уже сократилось почти в 4 раза.
Поменял у себя на работе видео-карту на GeForce GTX-980ti - зверь!
Кстати, фирме Khronos стало видимо стыдно, и она 05 февраля 2016г (!!!) выложила файлы поддержки OpenCL и CUDA (заодно, чтобы не мелочиться) для Delphi. Тут можно скачать: http://sourceforge.net/p/glscene/cod.../ParallelAPIs/ , для OpenCL хватит CL.pas, CL_Platform.pas, CL.inc. Но мне проще использовать для OpenCL.dll свой заголовочник, кот. уже выкладывал в посте 1.
Итак. Чтобы не быть голословным, выкладываю во вложенной папке (см. ссылку для скачивания в 1-м посте), или прямо ссылку на вложенную папку - http://gofile.me/2Zesj/TOT6JHm0
Там, во-первых, новый работающий пример: выкинул всё написанное чехами, всё переписал заново, более осмысленно. Две программы-Kernel (так для пробы, используется в тесте первая), контроль погрешности - сравнение расчётов CPU vs GPU, использование в Kernel функции-atomic. Но Header-файл пока оставил свой, а не брал заголовочник, выложенный Khronos. Ещё там же в отдельной под-папке - 2 картинки-скана TIF с моими вопросами по работе новой видяхи GTX-980ti. Гляньте, плиз: почему такую частоту памяти видяхи показывает Caps-Viewer?
И наконец, в папке OpenCL_Demo2016 есть под-папка с моими 3-мя Kernel для не тествых, а рельных расчётов- последний длинный вчера дописал и опробовал - можете полюбопытствовать! Вряд ли они кому-то понадобятся в таком виде, но вот как примеры для OpenCL (для любого языка программы на хосте - хоть Delphi, хоть JAVA)...могут быть полезны участникам форума.
====
ПыСы. Посоветуйте, коллеги, на каком форуме активно обсуждается написание самих Kernel для OpenCL (программки на языке, похожем на C99, которые компилирует сам драйвер видео-карты). Или здесь подскажите, как разбивать для Kernel'a большую программу на модули (хотя это в принципе есть в моём новом примере - уже вроде осилил), и главное - как обмениваться между этими модулями (процедурами) данными: только через их списки параметров? Через всю цепочку процедур этот список тащить до той, где они действительно нужны??? Писать весь расчётный модуль одним "монолитом" без разбивки на модули - не кашерно, сами понимаете. А мне сейчас надо запихнуть на GPU код в несколько тысяч строк...

Последний раз редактировалось Prok186, 10.02.2016 в 20:38.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter