Я пытаюсь использовать функцию ISHFT()
для сдвига битов некоторых 32-разрядных целых чисел параллельно, используя CUDA FORTRAN.
Проблема в том, что я получаю разные ответы на ISHFT(-4,-1)
и ISHFT(var,-1)
, хотя var = -4
. Это тестовый код, который я написал:
module testshift
integer :: test
integer, device :: d_test
contains
attributes(global) subroutine testshft ()
integer :: var
var = -4
d_test = ISHFT(var,-1)
end subroutine testshft
end module testshift
program foo
use testshift
integer :: i
call testshft<<<1,1>>>() ! carry out ishft on gpu
test = d_test ! copy device result to host
i = ISHFT(-4,-1) ! carry out ishft on cpu
print *, i, test ! print the results
end program foo
Затем я компилирую и выполняю:
pgf90 testishft.f90 -Mcuda
./a.out
2147483646 -2
Оба должны быть 2147483646, если работают правильно. Я получу правильный ответ, если заменю var
на 4
.
Как мне исправить эту проблему?
Спасибо за помощь