Сразу можно отметить, что никакого программирования 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