Print

Print


> There are enough such situations that the compiler writers should be motivated
> to find a way to optimize them e.g.
> 
> MAXLOC(ABS(X(1:n)))
> 
> isn't too slow on the SGI 7.2 compiler, although it is dead slow on some
> others.  Supposing that such expressions expand initially into a sequence of
> DO loops, a decent optimizer should be able to fuse them and come up with
> reasonable results.

It was for exactly this reason that I proposed a MAXABSLOC intrinsic.
MAXABSLOC is what one uses to determine the pivot when solving a linear
system.  To avoid the "dead slow" or a temp array or both, I have
taken to using:

  k = MAXLOC(a(i,:))
  small_k = MINLOC(a(i,:))
  if ( -a(i,small_k) > a(i,k) ) k = small_k

This sometimes has worse performance than MAXLOC(ABS(a(i,:))) but is never
as bad as the worst implementation of MAXLOC(ABS(a(i,:))).

It seems never to make a temp.

Van Snyder


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%