Age | Commit message (Collapse) | Author | Files | Lines |
|
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
|
|
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
|
|
This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
|
|
Author: Sébastien Villemot <sebastien@debian.org>
Forwarded: yes, by email to lapack@cs.utk.edu on 2016-06-26
|
|
|
|
See: http://icl.cs.utk.edu/lapack-forum/viewtopic.php?t=4786
|
|
"One of the improvements with the patches is that SOVERSION and VERSION are now properly set and the proper symlinks are created:
```
liblapack.so -> liblapack.so.3
liblapack.so.3 -> liblapack.so.3.5.0
liblapack.so.3.5.0
```
Since BLAS is shipped with LAPACK and no separate version number is given for BLAS, I applied the same there, too."
Tested on Julie's Mac
TO DO: To test under Windows
====
Updated OSX RPATH settings
In response to CMake 3.0 generating warnings regarding policy CMP0042,
the OSX RPATH settings have been updated per recommendations found
in the CMake Wiki:
http://www.cmake.org/Wiki/CMake_RPATH_handling#Mac_OS_X_and_the_RPATH
|
|
B (or X) being zero to skip a loop so as to enable better NaN (or Inf)
propagation.
Taking DGEMM as an example, if you use notation:
C(I,J) = C(I,J) + alpha * A(I,L) * B(L,J),
the reference BLAS DGEMM is using the JLI version of matrix matrix multiply and
is checking, for each J (from 1 to N) and for each L (from 1 to K), whether
B(L,J) is zero (or not) to save (or not) the 2M following operations.
(See the "IF (B(L,J).NE.ZERO) THEN" in the code below.)
The snippets of code is as follows
DO 90 J = 1,N
DO 80 L = 1,K
IF (B(L,J).NE.ZERO) THEN
TEMP = ALPHA*B(L,J)
DO 70 I = 1,M
C(I,J) = C(I,J) + TEMP*A(I,L)
70 CONTINUE
END IF
80 CONTINUE
90 CONTINUE
This induces some non NaN-propagation in a pretty ad-hoc way. For better NaN
propagation, this patch removes the above IF statement.
The snippet of code now becomes
DO 90 J = 1,N
DO 80 L = 1,K
TEMP = ALPHA*B(L,J)
DO 70 I = 1,M
C(I,J) = C(I,J) + TEMP*A(I,L)
70 CONTINUE
80 CONTINUE
90 CONTINUE
This enables correct NaN propagation for this piece of code.
Rationale: BLAS does not correctly propagate all NaNs (and Infs). We still have
no NaN propagation where for example ALPHA=0, etc. The goal of this commit is
to have correct NaN propagation no matter what the entries of the input
matrices/vectors (A, B, C, X, etc.) are. BLAS do not correctly propagate NaNs
and Infs based on some values of the scalars (ALPHA, BETA, etc.).
See below the email from Tom Callaway from RedHat, sent on July 9th to
lapack@cs.utk.edu.
Hello LAPACK people,
Martyn & Lejeczek (on CC) reported an issue to Fedora relating to R using our
system copy of BLAS (from LAPACK).
As noted in the R administration and Installation Manual, "R relies on ISO/IEC
60559 compliance of an external BLAS. This can be broken if for example the
code assumes that terms with a zero factor are always zero and do not need to
be computed - whereas x*0 can be NaN. This is checked in the test suite."
In the stock BLAS, DGBMV, DGEMM, and DGEMV fail this. R has been patching their
bundled BLAS to resolve this issue since 2010, but Fedora now uses the system
BLAS.
Attached is a patch (from upstream R) to fix this issue in the LAPACK BLAS.
Please consider applying it.
Thanks,
~tom
|
|
( please let me know if concerns/problems. )
1) The comments in ICMAX1 (resp. IZMAX1) were not correct. The comments read:
"ICMAX1 finds the index of the element whose real part has maximum absolute
value." It should have read: "ICMAX1 finds the index of the first vector
element of maximum absolute value." This is corrected. The problem was reported
Eloy Romero Alcalde from the SLEPc team, Universitat Politècnica de València
and confirmed by Nick Higham, Sven Hammarling and Julien Langou.
2) The routine ICAMAX (resp. IZAMAX) from the BLAS evolved without ICMAX1
(resp. IZMAX1). Reconcialated both version. So essentially took the ICAMAX
currently in the BLAS and changed it appropriately for an ICMAX1.
3) Remove the use of statement function in ICMAX1 (resp. IZMAX1). Now obsolete
in FORTRAN.
4) Change comments in BLAS routines: SCABS1, DCABS1, ICAMAX, IZAMAX, SCASUM,
and DZASUM. Remove the use of "absolute value of a complex number" for the
quantity "| Re(.) | + | Im(.) |". For example:
before
DCABS1 computes absolute value of a double complex number
after
DCABS1 computes |Re(.)| + |Im(.)| of a double complex number
|
|
|
|
Use \par instead of \details for section.
add a Contributors Section and a Reference Section.
Remove (some) verbatim section when not needed.
Those changes have been done by hand so I am not sure I manage to catch them all.
|
|
Now each routine should have the correct list of arguments.
This allowed to detect and fix problems in parameter description of many routines.
|
|
|
|
Replace SNGL by REAL
|
|
Cleanup some codes, like unused variables.
Used -Walls to detect problems.
|
|
transpose (**H)
Corresponds to bug0024
|
|
Incorporate OLD Testings from ACM Collected algorithms : algorithm 539
for:
- DROTMG/SROTMG
- DROTM/SROTM
- DSDOT / SDSDOT
All BLAS routines are now tested.
Now up to us to change the BLAS but at least this is consistent.
|
|
drotmg.f
|
|
referenced when N = 0, or M = 0
|
|
Add the install rules and exports the targets.
Now one can write
find_package(LAPACK 3.2.2)
in another project to find either the LAPACK build tree or the
install tree.
|
|
|
|
assigned GOTO statement, actually fixed ROTM also
|
|
|
|
Modify size in declaration of DX and DY.
It was set to 1, and 5 or N in the comments !!!!!
Put * in the declaration and N in the comments
This routine may need to be double-checked.
|
|
|
|
|
|
|