Контекст: я пытаюсь выполнить генерацию псевдослучайных чисел на графическом процессоре с помощью CURAND, но, поскольку я использую CUDA fortran, мне нужно создать интерфейсный модуль, который взаимодействует с функциями CURAND LIBRARY, написанными на C. Вот код интерфейса:
interface curand_init
attributes(device) subroutine curand_init(seed,sequence,offset,state) &
bind(C,name='curand_init')
use iso_c_binding
integer(c_long_long),value :: seed
integer(c_long_long),value :: sequence
integer(c_long_long),value :: offset
!pgi$ ignore_tr state
real(c_float), device :: state(*)
end subroutine curand_init
end interface curand_init
interface curand
attributes(device) subroutine curand(state) &
bind(C,name='curand')
use iso_c_binding
!pgi$ ignore_tr state
real(c_float),device :: state(*)
end subroutine curand
end interface curand
interface curand_uniform
attributes(device) subroutine curand_uniform(state) &
bind(C,name='curand_uniform')
use iso_c_binding
!pgi$ ignore_tr state
real(c_float),device :: state(*)
end subroutine curand_uniform
attributes(device) subroutine curand_uniform_double(state) &
bind(C,name='curand_uniform_double')
use iso_c_binding
!pgi$ ignore_tr state
real(c_double),device :: state(*)
end subroutine curand_uniform_double
end interface curand_uniform
interface curand_normal
attributes(device) subroutine curand_normal(state) &
bind(C,name='curand_normal')
use iso_c_binding
!pgi$ ignore_tr state
real(c_float),device :: state(*)
end subroutine curand_normal
attributes(device) subroutine curand_normal_double(state) &
bind(C,name='curand_normal_double')
use iso_c_binding
!pgi$ ignore_tr state
real(c_double),device :: state(*)
end subroutine curand_normal_double
end interface curand_normal
в том же модуле я вызываю подпрограмму этого устройства call curand_init(seed,id,0,tmpconf)
в глобальном ядре. Я получаю эту ошибку, когда вызываю глобальное ядро.
gpu_gen_m.CUF:
PGF90-S-0155-Could not resolve generic procedure curand_init (gpu_gen_m.CUF: 99)
0 inform, 0 warnings, 1 severes, 0 fatal for gen_conf
любая идея, как я могу решить эту проблему.
seed,id,0,tmpconf
? - person Vladimir F   schedule 21.10.2014curand_init
, измените его на нормальный интерфейс, и вы получите более прямое сообщение об ошибке. - person Vladimir F   schedule 21.10.2014integer(kind=int_ptr_kind ()) :: seed , id
иreal(fp_kind), allocatable, device :: tmp_d(:)
, гдеfp_kind = singlePrecision
- person egodfred   schedule 21.10.2014