When compiling my current project I get the message “Internal compiler error. unsupported operation 285”. Unfortunately, the line number given doesn’t correspond to any program statement (it’s just past the end of the subroutine), and I haven’t been able to find any mention in the compiler manual of what “unsupported operation 285” actually is. Is there a index somewhere of these error codes, so that I can figure out what the offending operation is in my program and fix it?
Hi Robert,
Internal compiler errors (aka ICE) are problems with the compiler. Granted most of the ICEs that I’ve seen recently are due to some type of coding error, but the compiler should be giving you a syntax or semantic error, not an ICE.
Please send a report to PGI Customer Service (trs@pgroup.com) and include a reproducing example.
Thanks!
Mat
Mat,
The full code is rather lengthy, and there are a lot of module dependences, so I can’t just extract the offending subroutine. Is there any information available about what differentiates “unsupported operation 285” from, say, “unsupported operation 311” (the latter being most common variant that turned up in my search for the term)? That might help me narrow down the source of the problem more quickly, so that I can produce a self-contained example of the bug.
-robert.
Hi Robert,
While I’ll need to ask a compiler engineer what “285” is, I do see a bug report for “311”. In this case, the user was using automatic arrays within a device kernel. Since allocation from device code is not allowed and automatic arrays are implicitly allocated, automatics are not allowed as well. In 10.4, we added a syntax error for this case.
Which version of the compiler are you using? If it’s 10.4 or 10.5, then your “311” is something different. If you’re using an earlier version, please try 10.5.
Thanks,
Mat
Mat,
Sorry for the confusion. I am not getting a 311; that was just what I found discussed in the archive. I’m only getting the 285.
Here is a reduced version of the code that reproduces the failure:
module fail
use cudafor
implicit none
integer, parameter :: ICS=1
integer, parameter :: NMTRATE=402
integer, parameter :: NCELL=10240
INTEGER, PARAMETER :: SP = SELECTED_REAL_KIND(6,37)
INTEGER, PARAMETER :: RKIND = SP
integer, constant :: irma(NMTRATE,ICS), irmb(NMTRATE, ICS), &
& irmc(NMTRATE, ICS)
real(KIND=rkind), device :: rrate(NCELL,NMTRATE)
real(KIND=rkind), device :: trate(NCELL,2*NMTRATE)
contains
attributes(device) subroutine subfun(indx, ncs, nfdh3, nallr, sfconc, nc1, mxg1)
integer, value :: indx
integer, shared :: ncs,nfdh3, nallr
integer, value :: nc1,mxg1
real(KIND=rkind), device :: sfconc(nc1,mxg1) ! concentration values
integer :: ja,jb,jc, jspc
integer :: nkn, nh,nc
real(KIND=rkind) :: fracn, tr
!! First derivatives for rates with three active loss terms
do nkn = 1,nfdh3(ncs) ! loop over reactions
!! indices of reactants
ja = irma(nkn,ncs)
jb = irmb(nkn,ncs)
jc = irmc(nkn,ncs)
nh = nkn + nallr
tr = rrate(indx,nkn) * sfconc(indx,ja) * sfconc(indx,jb) * sfconc(indx,jc)
trate(indx,nkn) = tr
trate(indx,nh) = -tr
end do
end subroutine subfun
end module fail
The output is as follows:
~/wrk/test% pgf90 -g -O -c fail.cuf
PGF90-F-0000-Internal compiler error. unsupported operation 285 (fail.cuf: 43)
PGF90/x86-64 Linux 10.3-0: compilation aborted
I’ve sent a copy to the customer service address you provided.
-robert.
Hi Robert,
The problem is this declaration:
integer, shared :: ncs,nfdh3, nallr
“nfdh3” is an array but is being declared as a shared scalar integer.
While it’s not causing the error, you most likely also want ncs and nallr declared as ‘value’ instead of shared.
integer, value :: ncs, nallr
integer, allocatable(:) :: nfdh3
I have submitted a problem report to our engineers, TPR#17027, asking that we flag this error.
Thanks for the sample code and report.
- Mat