我正在尝试使用fortran函数ISHFT(I, SHIFT)
在CUDA内核中进行一些位移。这会将整数I
向右移动SHIFT
位。
问题是如果我为SHIFT参数传递一个变量,ISHFT对内核不起作用。这是我的代码的核心部分:
attributes(global) subroutine cuda_bitshift(shift)
integer, intent(in), value :: shift
I = ishft(I,shift)
end subroutine cuda_bitshift
此处I
是设备整数,shift
是传递给内核cuda_bitshift
且值为1的参数。
当我尝试编译它时(使用pgf90 test.cuf
),它说:
PGF90-S-0000-Internal compiler error. unexpected runtime function call 0 (test.cuf: 14)
0 inform, 0 warnings, 1 severes, 0 fatal for cuda_bitshift
/tmp/pgcudafor20YgIPXBfH0R.gpu(10): error: expected an expression
1 error detected in the compilation of "/tmp/pgnvdW1YgqoRn5Yjn.nv0".
PGF90-F-0000-Internal compiler error. pgnvd job exited with nonzero status code 0 (test.cuf: 14)
PGF90/x86-64 Linux 10.8-0: compilation aborted
但是,如果我将ishft
中的第二个参数替换为1而不是变量shift
,则它会起作用。另外,例如,如果我可以使用shift算术,I = I + shift
工作正常。
这是与CUDA不起作用的内在函数有关,还是我做错了什么?