我试图用ISHFT()
函数来使用CUDA FORTRAN并行地移位一些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,如果工作正常。如果我用4
代替var
,我会得到正确的答案。
我该如何解决这个问题? 感谢您的帮助
嗯,你有没有试过使用仿真模式追踪问题'-Mcuda = emu`? – steabert 2011-03-22 10:55:32