I’ve recently started using version 14.6 (updated from 13.7) of the PGI compiler and am attempting to make use of the routine directive included in OpenACC 2.0. However, although running pgfortran -V confirms that I am indeed using version 14.6, it claims that function and procedure calls are not supported:
[esauer2@gauss ~]$ pgfortran -Minfo -ta=nvidia,cuda5.5 example.f95 foo: 1, Generating acc routine vector 7, !$acc loop ! threadidx%x 1, Generating Tesla code PGF90-S-0155-Accelerator region ignored; see -Minfo messages (example.f95: 24) test: 24, Accelerator region ignored 25, Accelerator restriction: function/procedure calls are not supported 26, Accelerator restriction: unsupported call to 'foo' 0 inform, 0 warnings, 1 severes, 0 fatal for test
The example code I’m trying is the following:
subroutine foo(v, i, n) !$ACC ROUTINE VECTOR real, dimension(1:100, 1:100) :: v integer :: i, n, j !$ACC LOOP VECTOR do j=1,n v(i,j) = 1.0/(i*j) write(*,*)v(i,j) enddo end subroutine program test integer :: i, j, n real, dimension(1:100, 1:100) :: v n=100 do i=1,n do j=1,n v(i,j) = 2 enddo enddo !$ACC PARALLEL LOOP do i=1,n call foo(v,i,n) enddo !$ACC END PARALLEL LOOP end program
This is very similar to the code described here:
I’m still learning, so sorry if I’ve made some obvious mistake.