Guide and Reference


Planning Your Program

This chapter provides information about ESSL that you need when planning your program. Its purpose is to help you in performing the following tasks:

If you are using ESSL with PL/I Set for AIX, Version 1, see the following PL/I publications for details on calling subroutines and functions:


Selecting an ESSL Subroutine

Your choice of which ESSL subroutine to use is based mainly on the functional needs of your program. However, you have a choice of several variations of many of the subroutines. In addition, there are instances where certain subroutines cannot be used. This section describes these variations and limitations. See the answers to each question below that applies to you.

Which ESSL Library Do You Want to Use?

ESSL provides four run-time libraries:


Table 21. Multithreaded ESSL SMP Subroutines
Subroutine Names
Vector-Scalar Linear Algebra Subprograms:
SASUM, DASUM, SCASUM, DZASUM
SAXPY, DAXPY, CAXPY, ZAXPY
SCOPY, DCOPY, CCOPY, ZCOPY
SDOT, DDOT, CDOTU, ZDOTU, CDOTC, ZDOTC
SNDOT, DNDOT
SNORM2, DNORM2, CNORM2, ZNORM2
SROT, DROT, CROT, ZROT, CSROT, ZDROT
SSCAL, DSCAL, CSCAL, ZSCAL, CSSCAL, ZDSCAL
SSWAP, DSWAP, CSWAP, ZSWAP
SVEA, DVEA, CVEA, ZVEA
SVES, DVES, CVES, ZVES
SVEM, DVEM, CVEM, ZVEM
SYAX, DYAX, CYAX, ZYAX, CSYAX, ZDYAX
SZAXPY, DZAXPY, CZAXPY, ZZAXPY

Matrix-Vector Linear Algebra Subprograms:
SGEMV, DGEMV, CGEMV, ZGEMV
SGER, DGER, CGERU, ZGERU, CGERC, ZGERC
SSPMV, DSPMV, CHPMV, ZHPMV
SSYMV, DSYMV, CHEMV, ZHEMV
SSPR, DSPR, CHPR, ZHPR
SSYR, DSYR, CHER, ZHER
SSPR2, DSPR2, CHPR2, ZHPR2
SSYR2, DSYR2, CHER2, ZHER2
SGBMV, DGBMV, CGBMV, ZGBMV
SSBMV, DSBMV, CHBMV, ZHBMV
STRMV, DTRMV, CTRMV, ZTRMV
STPMV, DTPMV, CTPMV, ZTPMV
STBMV, DTBMV, CTBMV, ZTBMV

Matrix Operations:
SGEADD, DGEADD, CGEADD, ZGEADD
SGESUB, DGESUB, CGESUB, ZGESUB
DGEMUL
DGEMM, ZGEMM
DSYMM, ZSYMM, ZHEMM
DTRMM, ZTRMM
DSYRK, ZSYRK, ZHERK
DSYR2K, ZSYR2K, ZHER2K
SGETMI, DGETMI, CGETMI, ZGETMI
SGETMO, DGETMO, CGETMO, ZGETMO

Dense Linear Algebraic Equations:
SGEF, DGEF, CGEF, ZGEF
SGETRF, DGETRF, CGETRF, ZGETRF
DPOF
STRSV, DTRSV, CTRSV, ZTRSV
STPSV, DTPSV, CTPSV, ZTPSV
DTRSM, ZTRSM
STRI, DTRI

Sparse Linear Algebraic Equations:
DSRIS&

Fourier Transforms:
SCFT, DCFT
SRCFT, DRCFT
SCRFT, DCRFT
SCFT2, DCFT2
SRCFT2, DRCFT2
SCRFT2, DCRFT2
SCFT3, DCFT3
SRCFT3, DRCFT3
DCRFT3, DCRFT3

Convolution and Correlation:
SCOND, SCORD
SDCON, SDCOR, DDCON, DDCOR

Many of the dense linear algebraic equations and eigensystem analysis subroutines make one or more calls to the multithreaded versions of the matrix-vector linear algebra and matrix operation subroutines shown in this table. SCOSF, DCOSF, SSINF, and DSINF make one or more calls to the multithreaded versions of the Fourier Transform subroutines shown in this table. These subroutines benefit from the increased performance of the multithreaded versions of the ESSL SMP subroutines.

& DSRIS only runs on multiple threads when IPARM(4) = 1 or 2.

What Type of Data Are You Processing in Your Program?

The version of the ESSL subroutine you select should agree with the data you are using. ESSL provides a short- and long-precision version of most of its subroutines processing short- and long-precision data, respectively. In a few cases, it also provides an integer version processing integer data or returning just integer data. The subroutine names are distinguished by a one- or two-letter prefix based on the following letters:

S for short-precision real
D for long-precision real
C for short-precision complex
Z for long-precision complex
I for integer

The precision of your data affects the accuracy of your results. This is discussed in "Getting the Best Accuracy". For a description of these data types, see "How Do You Set Up Your Scalar Data?".

How Is Your Data Structured? And What Storage Technique Are You Using?

Some subroutines process specific data structures, such as sparse vectors and matrices or dense and banded matrices. In addition, these data structures can be stored using various storage techniques. You should select the proper subroutine on the basis of the type of data structure you have and the storage technique you want to use. If possible, you should use a storage technique that conserves storage and potentially improves performance. For more about storage techniques, see "Setting Up Your Data".

What about Performance and Accuracy?

ESSL provides variations among some of its subroutines. You should consider performance and accuracy when deciding which subroutine is the best to use. Study the "Function" section in each subroutine description. It helps you understand exactly what each subroutine does, and helps you determine which subroutine is best for you. For example, some subroutines perform multiple computations of a certain type. This might give you better performance than a subroutine that does each computation individually. In other cases, one subroutine may do scaling while another does not. If scaling is not necessary for your data, you get better performance by using the subroutine without scaling.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]