Sciport
Sciport
is a Cray SciLib compatibility interface library on CXML supplied by Compaq
Computer Corporation. Sciport implements the functionality and user interface
of many of the Cray SciLib routines by calling appropriate sequences
of CXML routines. The primary function of the Sciport library is to aid
in porting Cray applications to platforms supported by CXML. Sciport is
not supported on the Windows NT platform. This section describes the SciLib
functions that are supported in Sciport. Refer to the Routines Summary
tables, later in this section, for a description of each routine.
What Sciport Provides
Compaq Sciport provides the following:

Cray compatible versions of SciLib singleprecision BLAS1, BLAS2,
and BLAS3 routines

Cray SciLib LAPACK singleprecision routines

Cray SciLib Special Linear System Solver routines

Cray SciLib Signal Processing routines

Cray SciLib Sorting and Searching routines

CF77 intrinsic functions that are not directly supported by Compaq Fortran
Compilers
These Compaq Sciport routines are compatible with their Cray SciLib counterparts
and require no source code changes except as described in this documentation.
It is important to note that Sciport is not intended to be a
complete implementation of Cray SciLib. Instead Sciport implements a very
common subset of SciLib that is useful for porting most Cray applications.
In particular, it should be noted that Sciport does not support
any of the SciLib distributed memory routines. However, support for SMP
(symmetric multiprocessing) is provided by linking Sciport with the parallel
CXML.
How Data is Handled
The Cray Fortran compiler (CF77) treats
REAL
,
COMPLEX , and
INTEGER
data as 64, 128, and 64 bit quantities, respectively. The Compaq Fortran
compiler treats
REAL ,
COMPLEX
, and
INTEGER data as 32, 64, and 32 bit
quantities. To aid in porting applications, the Compaq Fortran compiler
supports switches to override default behavior and automatically treat
all
REAL ,
COMPLEX
, and
INTEGER data as the 64, 128, and 64
bits, respectivvely. The Sciport library is intended to be used in conjunction
with these compiler switches to port Cray applications with minimal source
changes. Refer to the Compaq Fortran documentation for information about
the use of these switches.
Compatibility and Restrictions
Since the primary objective of Sciport is to enable porting Cray applications
to Compaq platforms, great care was taken in the development of Sciport
to minimize compatibility issues. In many cases, Sciport routines provide
bitforbit compatible results. For example, the Sciport version of RANF
returns exactly the same sequence of random digits as its Cray SciLib counterpart.
Another important objective of Sciport is to allow ported applications
to benefit from the performance enhancement provided by CXML, with minimal
source code modification.
When these two objectives come into conflict with one another, the conflict
is usually resolved in favor of compatibility. However, in a small number
of cases, allowing small incompatibilites enables significant performance
gains.
In some cases implementation differences between Cray and Compaq computer
hardware and compilers do not allow all details of SciLib routines to be
duplicated faithfully. However, the differences between Sciport and SciLib
routines are generally minimal. The following sections provide information
about any differences that may exist.
The Orders Routine
The
ORDERS routine performs a radix sort
on fixedlength records. In the Sciport version of
ORDER
, the arguments
RECORD and
KEYare
not optional as they are in the SciLib version. Owing to differences
in Cray and Compaq system endianness, care must be taken when sorting multibyte
character data. Because of endian considerations, the range of the key
argument has been limited to the closed interval [1,8].
CF77 Intrinsic Functions
Many of these CF77 intrinsic functions return a CF77specific data type
of
BOOLEAN . Since the nonANSI FORTRAN77
data type
BOOLEAN is not supported by Compaq
Fortran compilers, it is necessary for users to change the function return
types from
BOOLEAN to
INTEGER
.
BLAS and LAPACK Routines
In order to achieve source code compatibility with SciLib, Sciport singleprecision
and singlecomplex BLAS and LAPACK routines support 64bit integers passed
by reference. However, Sciport internally maps these routines onto their
corresponding doubleprecision and doublecomplex CXML BLAS and LAPACK
routines which use 32 bit integers. Consequently, some runtime uses of
SciLib are not supported by Sciport. In practice, this does not appear
to be a significant restriction.
Note
When necessary, Sciport automatically
converts between 64 and 32 bit integers. 
Additionally, since the singleprecision Sciport BLAS and LAPACK routines
have the same names as the singleprecision CXML BLAS and LAPACK routines,
applications that use Sciport cannot use the sharedlibrary version of
CXML. That is, applications that use Sciport must be linked "nonshared"
with the Sciport and CXML libraries. In addition, the Sciport library must
precede CXML in the link command. Refer to the Compiling and Linking
Sciport section for more information about how to link Sciport.
FFT Routines
The interface to the
SciLib FFT routines requires that a work array of sufficient size be allocated
and passed to the FFT routines. Users are free to write to this work array
between calls to the SciLib FFT routines.
Some SciLib FFT routines additionally require that a table array be
allocated and passed to the FFT routines. Users cannot write to this table
array between FFT calls. It is assumed to be "readonly" after initialization.
For performance reasons, Sciport FFT routines are implemented as calls
to CXML FFT routines. CXML FFT routines do not require a userallocated
work space. However they do require a small userallocated data struture
to record information from calltocall in a threadsafe manner.
In order to preserve the SciLib interface, Sciport FFT routines overlay
the table array (if it is present), or the user work array (if the table
array is not present), with the CXML FFT data structure. This implementation
has the following important side effects:

Programs that use Sciport FFT routines without table arrays and write to
the work array between FFT calls will overwrite the CXML FFT data structures.
This can cause incorrect results, memory leaks, memory corruption and/or
memory access violations.

If the length of the FFT data structure is too small, the size of the table
array and work array will be insufficient to overlay CXML data sturctures.
In this case, users must make sure that the table array (or the work array)
is at least 150 (64 bit) words long.

The CXML FFT routines used to implement the Sciport FFT routines allocate
working storage for the user. For a truly correct use of the Sciport FFT
routines, users should explicitly free the memory allocated by CXML. Since
the SciLib FFT routines require the user to allocate all of the work space,
existing Cray applications do not free the allocated memory. In practice,
this is generally not a problem because the memory is freed when the application
exits.
However, under certain conditions, it is necessary for users of the
Sciport FFT routines to explicitly free the memory allocated by CXML. Specifically,
if an application writes to the userallocated work space between calls
to the Sciport FFT routines, it is necessary to explicitly free CXML allocated
memory. This is accomplished by calling the Sciport FFT routines with the
INIT
argument set to '80FF0FF0FF0FF0FF'X.
Compiling and Linking Sciport
As noted in the previous section, Sciport is used
in conjuntion with CXML, and must be linked into an application statically.
The typical approach is:

Compile an application using the compiler flags that automatically promote
REAL
and
INTEGER types to 64 bit quantities. The
switches are
real_size 64 (or
r8
), and
integer_size 64 (or
i8
).

Statically link in the Sciport and CXML libraries.
For example, on a UNIX platform this is accomplished with the following
command:
f77 o prog r8 i8 double_size 128 prog.f static lsciport lcxml

The same command also applies to Linux, except that the name of the
Fortran driver is "fort".
On a VMS platform, linking can be accomplished by the following command:
LINK PROG, OBJ, SYS$LIBRARY:CXML$FGS_SCIPORT/LIB

Note: CXML must be linked in after Sciport.
On platforms that support parallel execution, users can link in the
parallel CXML rather than the serial CXML.
Summary of Sciport Routines
The following set of SciLib routines are supported in Sciport. With
the exception of BLAS and LAPACK routines, any SciLib routines not listed
here are not supported in Sciport.
Summary of CF77 Intrinsics
Routine Name 
Operation 
snglr 
Returns closest real approximation to double precision. 
gamma 
Computes the natural log of the gamma function. 
coss 
Computes sine and cosine. 
cot, dcot 
Computes cotangent. 
cbrt, dcbrt 
Computes the cube root. 
erf, erfc 
Returns the value of the error function and the complimentary error
function. 
j0, j1, jn 
Returns the value of the Bessel function of the first kind of orders
0, 1, and n. 
y0, y1, yn 
Returns the value of the Bessel function of the second kind of orders
0, 1, and n. 
ranf, ranget, ranset 
Computes pseudorandom numbers. 
flmin, flmax 
Return the minimum and maximum positive floatingpoint values, respectively. 
ffrac 
Returns the fractional accuracy of single precision floating point
numbers. 
inmax 
Returns the maximum positive integer value. 
and 
Computes logical product. 
or 
Computes logical sum. 
compl 
Computes logical complement. 
eqv 
Computes logical equivalence. 
xor, neqv 
Computes logical difference. 
shift 
Performs a left circular shift. 
shiftl 
Performs a left shift with zero fill. 
shiftr 
Performs a right shift with zero fill. 
dshiftr 
Returns the lowermost 64 bits of a rightshifted 128 bit integer. 
dshiftl 
Returns the uppermost 64 bits of a leftshifted 128 bit integer. 
mask 
Returns a bit mask. 
leadz 
Counts number of leading zero bits. 
popcnt 
Counts number of bits set to 1. 
poppar 
Computes bit population parity. 
cvmgp, cvmgn, cvmgt, cvmgz 
Performs a conditional merge. 
csmg 
Performs a scalar boolean merge. 
Summary of BLAS Extensions
Routine Name 
Operation 
spaxpy 
Adds a scalar multiple of a real vector to a sparse real vector. 
saxpby, caxpby 
Adds a scalar multiple of a real or complex vector to a scalar multiple
of another real or complex vector. 
spdot 
Computes a sparse dot product of two real vectors. 
scopy2 
Copies a real or complex vector into another real or complex vector. 
shad 
Computes the Hadamard product of two vectors. 
cgesum, sgesum 
Adds a scalar multiple of a real or complex matrix to a scalar multiple
of another real or complex matrix. 
sspr12 
Performs two simultaneous symmetric rank 1 updates of a real symmetric
packed matrix. 
sgemms, cgemms 
Multiplies a real or complex general matrix by a real or complex general
matrix using Strassen's algorithm. 
Summary of Signal Processing
Routines
Routine Name 
Operation 
cfft 
Applies a complex Fast Fourier Transform (FFT). 
cfft2 
Applies a complex Fast Fourier Transform (FFT). 
cfft2d 
Applies a twodimensional complex Fast Fourier Transform (FFT). 
cfft3d 
Applies a threedimensional complex Fast Fourier Transform (FFT). 
cfftmlt 
Applies complextocomplex Fast Fourier Transforms (FFT) on multiple
input vectors. 
crfft2 
Applies complextoreal Fast Fourier Transforms (FFT). 
mcfft 
Applies a multiple complex Fast Fourier Transform (FFT). 
rcfft2 
Applies realtocomplex Fast Fourier Transforms (FFT). 
rfftmlt 
Applies complextoreal or realtocomplex Fast Fourier Transforms
(FFT) on multiple input vectors. 
fftfax 
Initializes multidimensional real Fast Fourier Transforms (FFT). 
cftfax 
Initializes multidimensional complex Fast Fourier Transforms (FFT). 
ccfft 
Applies a complextocomplex Fast Fourier Transform (FFT). 
ccfft2d 
Applies a twodimensional complextocomplex Fast Fourier Transform
(FFT). 
ccfft3d 
Applies a threedimensional complextocomplex Fast Fourier Transform
(FFT). 
ccfftm 
Applies multiple complextocomplex Fast Fourier Transforms (FFTs). 
csfft 
Computes a realtocomplex or complextoreal Fast Fourier Transform
(FFT). 
csfft2d 
Applies a twodimensional realtocomplex or complextoreal Fast Fourier
Transform (FFT). 
csfft3d 
Applies a threedimensional realto complex Fast Fourier Transform
(FFT). 
csfftm 
Applies multiple realtocomplex or complextoreal Fast Fourier Transforms
(FFTs). 
scfft 
Computes a realtocomplex or complextoreal Fast Fourier Transform
(FFT). 
scfft2d 
Applies a twodimensional realtocomplex or complextoreal Fast Fourier
Transform (FFT). 
scfft3d 
Applies a threedimensional realtocomplex Fast Fourier Transform
(FFT). 
scfftm 
Applies multiple realtocomplex or complextoreal Fast Fourier Transforms
(FFTs). 
ccnvl, ccnvlf 
Computes the complex convolution of a sequence with one or more other
sequences. 
filterg 
Computes a correlation of two vectors. 
filters 
Computes a correlation of two vectors (symmetric coefficient). 
opfilt 
Solves WeinerLevinson linear equations. 
Summary of First and Second
Order Recurrence Functions
Routine Name 
Operation 
folr, folrp 
Solves firstorder linear recurrences. 
folrc 
Solves firstorder linear recurrences with a scalar coefficient. 
folr2, folr2p 
Solves firstorder linear recurrences without overwriting the operand
vector. 
folrn, folrnp 
Solves for the last term of a firstorder linear recurrence. 
solr 
Solves a secondorder linear recurrence. 
solr3 
Solves a secondorder linear recurrence for three terms. 
solrn 
Solves a secondorder linear recurrence for the last term only. 
recpp, recps 
Solves a partial products or partial summation problem. 
Summary of TriDiagonal
Solvers
Routine Name 
Operation 
sdtsol 
Solves a real valued tridiagonal linear system with one righthand
side. 
sdttrf 
Factors a real valued tridiagonal linear system. 
sdttrs 
Solves a real valued tridiagonal linear system with one righthand
side, using the matrix factored by SDTTRF. 
cdtsol 
Solves a complex valued tridiagonal linear system with one righthand
side. 
cdttrf 
Factors a complex valued tridiagonal linear system. 
cdttrs 
Solves a complex valued tridiagonal linear system with one righthand
side, using the matrix factored by CDTTRF. 
Summary of Sorting Routines
Routine Name 
Operation 
isortd, isortb 
Sort an integer vector. 
ssortb 
Sort a real vector. 
orders 
Internal, fixedlength recordsorting routine optimized for Cray Research
computer systems. 
Summary of Vector Scatter/Gather
Routines
Routine Name 
Operation 
cluseq, clusne 
Searches a vector for clusters of values equal or not equal to a target. 
clusilt, clusile, clusigt, clusige 
Searches an integer vector for clusters of values with a specified
logical relationship to an integer target. 
clusflt, clusfle, clusfgt, clusfge 
Searches a real vector for clusters or values with a specified logical
relationship to a real target. 
isrcheq, isrchne 
Searches a vector for the first element equal or not equal to a target. 
isrchilt, isrchile, isrchigt, isrchige 
Searches an integer vector for the first element with a specified logical
relationship to an integer target. 
isrchflt, isrchfle, isrchfgt, isrchfge 
Searches a real vector for the first element with a specified logical
relationship to a real target. 
isrchmeq, isrchmne 
Searches a vector for the first element whose subfield is equal or
not equal to a target. 
isrchmlt, isrchmle, isrchmgt, isrchmge 
Searches a vector for the first element whose subfield has a specified
logical relationship with a target. 
wheneq, whenne 
Searches a vector for the first element equal or not equal to a target. 
whenilt, whenile, whenigt, whenige 
Searches an integer vector for all elements with a specified relationship
to an integer target. 
whenflt, whenfle, whenfgt, whenfge 
Searches a real vector for all elements with a specified logical relationship
to a real target. 
whenmeq, whenmne 
Searches a vector for all elements whose subfields are equal or not
equal to a target. 
whenmlt, whenmle, whenmgt, whenmge 
Searches a vector for all elements whose subfields have a specified
logical relationship with a target. 
inflmin, inflmax 
Searches for the minimum or maximum value in subfields of a vector
element. 
intmin, intmax 
Searches an integer vector for the maximum or minimum value. 
iilz, illz, ilsum 
Returns a number of leading occurrences of an object in a vector. 
osrchf, osrchi 
Searches an ordered vector for the first location that contains a target. 
osrchm 
Searches an ordered integer vector for the first element whose subfield
is equal to an integer target. 
CXML
Home Page
Index
of CXML Routines