| Автор |
Сообщение |
|
|
| |
Заголовок сообщения: |
Re: Подключение GPU к Irbis |
 |
|
|
Итоговая производительность.... за пределами ожиданий. С учетом того, что в GPU передан расчет трансцендентных функций, обработать в сумме 100М точек за 1,2 секунды для CPU нереально. Принципиальный вопрос, конечно, в том, что на GPU такое могло и не лечь... но оно легло!
| Вложения: |

Irbis_CUDA01.png [ 22.8 Кб | Просмотров: 401 ]
|
Итоговая производительность.... за пределами ожиданий. С учетом того, что в GPU передан расчет трансцендентных функций, обработать в сумме 100М точек за 1,2 секунды для CPU нереально. Принципиальный вопрос, конечно, в том, что на GPU такое могло и не лечь... но оно легло!
|
|
|
 |
Добавлено: Пт дек 12, 2025 20:44 |
|
|
 |
|
|
| |
Заголовок сообщения: |
Re: Подключение GPU к Irbis |
 |
|
Итак, если функция в CUDA SDK вот такая: Код: //MacVectorsCuda(const double* data, unsigned long long int datasize, const double* wav, unsigned long long int num_threads, double* w ) .. то на Ирбисе она вызывается вот так. Код: x[] data[]+ wavsize wav[] data[]+ GPU_threads wav_res[] data[]+ hWav invokelong5 data[]+ нужно, чтобы сделать поправку на расположение в памяти области данных форт-машины. Ее ноль - это в действительности какое-то смещение в памяти данных процесса. Но быстро работает...
Итак, если функция в CUDA SDK вот такая: [code]//MacVectorsCuda(const double* data, unsigned long long int datasize, const double* wav, unsigned long long int num_threads, double* w ) [/code] .. то на Ирбисе она вызывается вот так.
[code]x[] data[]+ wavsize wav[] data[]+ GPU_threads wav_res[] data[]+ hWav invokelong5 [/code]
data[]+ нужно, чтобы сделать поправку на расположение в памяти области данных форт-машины. Ее ноль - это в действительности какое-то смещение в памяти данных процесса.
Но быстро работает...
|
|
|
 |
Добавлено: Пн ноя 17, 2025 22:54 |
|
|
 |
|
|
| |
Заголовок сообщения: |
Подключение GPU к Irbis |
 |
|
Сразу можно отметить, что никакого программирования GPU непосредственно на Форте и не предполагалось. Обычный CUDA SDK, но при этом функции компилируются в dll, экспортируются (как stdcall), что дает возможность подключить это все к Irbis. Пришлось еще добавить long long int, чтобы состыковать все с 64-битной форт-машиной (и абсолютные адреса уже за границей 32 бит). Зато теперь можно аккуратно передавать все в GPU. Подключается примерно так: Код: int hCuda int hAdd int hInfo
"CUDADllStat.dll" loadlibrary to hCuda hCuda "addVectorsCuda" getprocaddress to hAdd hCuda "InfoCuda" getprocaddress to hInfo
// addVectorsCuda(long long int* c, const long long int* a, const long long int* b, unsigned long long int size)
"Dll address " print hCuda . cr "Function add " print hAdd . cr "Function info " print hInfo . cr
hInfo invoke . cr
create a[] 1 , 2 , 3 , 4 , 5 , create b[] 2 , 4 , 6 , 8 , 10 , create c[] 5 cells allot
"Running vectors addition on GPU..." print cr
c[] data[]+ a[] data[]+ b[] data[]+ 5 hAdd invokelong4 С выводом: Код: Dll address 140714923982848 Function add 140714924032128 Function info 140714924032112 55 Running vectors addition on GPU... 3 6 9 12 15
Сразу можно отметить, что никакого программирования GPU непосредственно на Форте и не предполагалось. Обычный CUDA SDK, но при этом функции компилируются в dll, экспортируются (как stdcall), что дает возможность подключить это все к Irbis. Пришлось еще добавить long long int, чтобы состыковать все с 64-битной форт-машиной (и абсолютные адреса уже за границей 32 бит). Зато теперь можно аккуратно передавать все в GPU.
Подключается примерно так:
[code]int hCuda int hAdd int hInfo
"CUDADllStat.dll" loadlibrary to hCuda hCuda "addVectorsCuda" getprocaddress to hAdd hCuda "InfoCuda" getprocaddress to hInfo
// addVectorsCuda(long long int* c, const long long int* a, const long long int* b, unsigned long long int size)
"Dll address " print hCuda . cr "Function add " print hAdd . cr "Function info " print hInfo . cr
hInfo invoke . cr
create a[] 1 , 2 , 3 , 4 , 5 , create b[] 2 , 4 , 6 , 8 , 10 , create c[] 5 cells allot
"Running vectors addition on GPU..." print cr
c[] data[]+ a[] data[]+ b[] data[]+ 5 hAdd invokelong4 [/code]
С выводом:
[code]Dll address 140714923982848 Function add 140714924032128 Function info 140714924032112 55 Running vectors addition on GPU... 3 6 9 12 15 [/code]
|
|
|
 |
Добавлено: Вс ноя 09, 2025 21:10 |
|
|
 |
|