|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
OpenCL-Delphi : Multi GPUs DEMO
Уже несколько лет прошло, как выкладывал здесь свои примеры использования OpenCL в Delphi:
https://delphisources.ru/forum/showthread.php?t=28188 https://delphisources.ru/forum/showthread.php?t=29311 Сейчас наконец-то появились драйверы и для карт Nvidia, где взамен устаревшей версии OpenCL 1.2 идёт последняя версия OpenCL 3.0. Кое-что из неё используется в новой Demo-программе, которая может распараллеливать расчёты на несколько GPU (хотя она идёт и на старой версии OpenCL 1.2). Например, используются при возможности неоднородные рабочие группы. === Исходники для Delphi 10.2 (Tokyo) - здесь: OpenCL_MultiGPU_2021 Tokyo 10.2.2 http://gofile.me/2Zesj/ZO2YWyyuy - можно скачать только это; http://gofile.me/2Zesj/qZDKNrpU8 - вся папка с разными Demo-OpenCL. === Напомню (а лучше почитать старые описания по 2-м ссылкам выше): === 1) Рядом с исполняемым файлом Project_OpenCL_Demo2021_MultiGPU.exe должен лежать текстовый файл ProgramPress.cpp === 2) Расчёты выполняются с квадратной "матрицей" (их там всего 17 штук!), размер стороны которой MatrixSize задаётся на основной форме. По умолчанию это 2500. Кол-во расчётных слоёв по 3-ей координате - это Layers, по умолчанию это 8. При запуске выдаётся общий размер памяти, который требуется от всех GPU. Если памяти железа не хватит - вылетим, и надо уменьшить кол-во слоёв либо размер матрицы. === Версия драйвера для Nvidia, с которой тестировал: 472.12-desktop-win10-win11-64bit-international-whql === 3) Тестировал с одной видеокартой AMD и с парой Nvidia 1080ti. Если у вас есть больше видеокарт в системе, либо пара AMD - интересно будет обсудить результат. === 4) Когда в системе несколько видеокарт, и вы задали работу "со всеми", вся расчётная область режется на куски по индексу i, после каждой итерации - сшивание GPU0 --> Host --> GPU1 (это быстро!) и наоборот - по границам нарезки с помощью "небольших" обновляемых при расчётах массивов Connector. Сшивание можно отрубить, убрав галку на основной форме. === 5) По окончании расчёта выдаётся форма, где видна погрешность расчёта Pogr = (д.б. порядка 1E-7): она определяется по сравнению результатов расчёта на CPU и на GPUs. === 6) Изначально исходные данные заполняются рандомно. При след. запуске результат м.б. иной. Главное, чтобы погрешность Pogr была малой. Например, при отключении Connector она сразу станет большой: но это когда несколько видеокарт. === 7) Можете сравнить время расчётов на 1 GPU и на 2,3... Для 2-х своих Nvidia 1080 ti (см. вложенный рисунок) я задавал MatrixSize = 5400 и Layers = 8 (что требует порядка 17Gb памяти на оба GPU). Последний раз редактировалось Prok186, 28.12.2021 в 18:16. |