|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- -------------------------------------------------------------------------------
- C Interface to LAPACK
- README
- -------------------------------------------------------------------------------
- Introduction
- -------------------------------------------------------------------------------
-
- This library is a part of reference implementation for the C interface to
- LAPACK project according to the specifications described at the forum for
- the Intel(R) Math Kernel Library (Intel(R) MKL):
- http://software.intel.com/en-us/forums/showthread.php?t=61234
-
- This implementation provides a native C interface to LAPACK routines available
- at www.netlib.org/lapack to facilitate usage of LAPACK functionality
- for C programmers.
- This implementation introduces:
- - row-major and column-major matrix layout controlled by the first function
- parameter;
- - an implementation with working arrays (middle-level interface) as well as
- without working arrays (high-level interface);
- - input scalars passed by value;
- - error code as a return value instead of the INFO parameter.
-
- This implementation supports both the ILP64 and LP64 programming models,
- and different complex type styles: structure, C99.
-
- This implementation includes interfaces for the LAPACK-3.2.1 Driver and
- Computational routines only.
-
- -------------------------------------------------------------------------------
- Product Directories
- -------------------------------------------------------------------------------
-
- The installation directory of this package has the following structure:
-
- src - C interface source files
- utils - C interface auxiliary files
- include - header files for C interface
-
- -------------------------------------------------------------------------------
- Installation
- -------------------------------------------------------------------------------
-
- The reference code for the C interface to LAPACK is built similarly to the
- Basic Linear Algebra Subprograms (BLAS) and LAPACK. The build system produces
- a static binary lapacke.a.
-
- You need to provide a make.inc file in the top directory that defines the
- compiler, compiler flags, names for binaries to be created/linked to. You may
- choose the appropriate LP64/ILP64 model, convenient complex type style,
- LAPACKE name pattern, and/or redefine system malloc/free in make.inc. Several
- examples of make.inc are provided.
-
- After setting up the make.inc, you can build C interface to LAPACK by typing
-
- make lapacke
-
- -------------------------------------------------------------------------------
- Handling Complex Types
- -------------------------------------------------------------------------------
-
- The interface uses complex types lapack_complex_float/lapack_complex_double.
- You have several options to define them:
-
- 1) C99 complex types (default):
-
- #define lapack_complex_float float _Complex
- #define lapack_complex_double double _Complex
-
- 2) C structure option (set by enabling in the configuration file):
- -DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_STRUCTURE
-
- typedef struct { float real, imag; } _lapack_complex_float;
- typedef struct { double real, imag; } _lapack_complex_double;
- #define lapack_complex_float _lapack_complex_float
- #define lapack_complex_double _lapack_complex_double
-
- 3) C++ complex types (set by enabling in the configuration file):
- -DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_CPP
-
- #define lapack_complex_float std::complex<float>
- #define lapack_complex_double std::complex<double>
-
- You have to compile the interface with C++ compiler with C++ types.
-
- 4) Custom complex types:
- -DLAPACK_COMPLEX_CUSTOM
-
- To use custom complex types, you need to:
- - Define lapack_complex_float/lapack_complex_double types on your own.
- - Optionally define lapack_make_complex_float/lapack_make_complex_double_real
- functions if you want to build the testing suite supplied. Use these
- functions for the testing system. Their purpose is to make a complex value of
- a real part re, imaginary part im. The prototypes are as follows:
-
- lapack_complex_float lapack_make_complex_float( float re, float im );
- lapack_complex_double lapack_make_complex_double( double re, double im );
-
- -------------------------------------------------------------------------------
- Choosing ILP64 Data Model
- -------------------------------------------------------------------------------
- To choose ILP64 data model (set by enabling in the configuration file), use the
- following options:
-
- -DHAVE_LAPACK_CONFIG_H -DLAPACK_ILP64
-
- -------------------------------------------------------------------------------
- Using Predicate Functions
- -------------------------------------------------------------------------------
-
- The functions
-
- lapacke_?gees/lapacke_?gees_work
- lapacke_?geesx/lapacke_?geesx_work
- lapacke_?geev/lapacke_?geev_work
- lapacke_?geevx/lapacke_?geevx_work
-
- require the pointer to a predicate function as an argument of a predefined type
- such as:
-
- typedef lapack_logical (*LAPACK_S_SELECT2) ( const float*, const float* );
-
- The purpose and format of these predicate functions are described in the LAPACK
- documentation. This interface passes the pointer to the corresponding LAPACK
- routine as it is.
-
- Be cautious with return values of the logical type if you link against LAPACK
- compiled with Fortran compiler. Whereas all non-zero values are treated as TRUE
- generally, some Fortran compilers may rely on a certain TRUE value, so you will
- have to use the same TRUE value in the predicate function to be consistent with
- LAPACK implementation.
-
- -------------------------------------------------------------------------------
- Implementation Details
- -------------------------------------------------------------------------------
-
- The current C interface implementation consists of wrappers to LAPACK routines.
- The row-major matrices are transposed on entry to and on exit from the LAPACK
- routine, if needed. Top-level interfaces additionally allocate/deallocate
- working space on entry to and on exit from the LAPACK routine.
-
- Because of possible additional transpositions, a routine called with
- this interface may require more memory space and run slower than the
- corresponding LAPACK routine.
-
- -------------------------------------------------------------------------------
- Disclaimer and Legal Information
- -------------------------------------------------------------------------------
-
- INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R)
- PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO
- ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT
- AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS,
- INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS
- OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS
- INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR
- PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR
- OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING
- BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY
- APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A
- SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.
-
- Intel may make changes to specifications and product descriptions at
- any time, without notice. Designers must not rely on the absence or
- characteristics of any features or instructions marked "reserved" or
- "undefined." Intel reserves these for future definition and shall have
- no responsibility whatsoever for conflicts or incompatibilities
- arising from future changes to them. The information here is subject
- to change without notice. Do not finalize a design with this
- information.
-
- The products described in this document may contain design defects or
- errors known as errata which may cause the product to deviate from
- published specifications. Current characterized errata are available
- on request.
-
- Contact your local Intel sales office or your distributor to obtain
- the latest specifications and before placing your product order.
- Copies of documents which have an order number and are referenced in
- this document, or other Intel literature, may be obtained by calling
- 1-800-548-4725, or go to http://www.intel.com/design/literature.htm
-
- Intel processor numbers are not a measure of performance. Processor
- numbers differentiate features within each processor family, not
- across different processor families. See
- http://www.intel.com/products/processor_number for details.
-
- This document contains information on products in the design phase of
- development.
-
- BunnyPeople, Celeron, Celeron Inside, Centrino, Centrino Atom,
- Centrino Atom Inside, Centrino Inside, Centrino logo, Core Inside,
- FlashFile, i960, InstantIP, Intel, Intel logo, Intel386, Intel486,
- IntelDX2, IntelDX4, IntelSX2, Intel Atom, Intel Atom Inside, Intel
- Core, Intel Inside, Intel Inside logo, Intel. Leap ahead., Intel. Leap
- ahead. logo, Intel NetBurst, Intel NetMerge, Intel NetStructure,
- Intel SingleDriver, Intel SpeedStep, Intel StrataFlash, Intel Viiv,
- Intel vPro, XScale, IPLink, Itanium, Itanium Inside, MCS, MMX, Oplus,
- OverDrive, Intel PDCharm, Pentium, Pentium Inside, skoool, Sound Mark,
- The Journey Inside, VTune, Xeon, and Xeon Inside are trademarks of
- Intel Corporation in the U.S. and other countries.
-
-
- * Other names and brands may be claimed as the property of others.
-
- Copyright (C) 2011, Intel Corporation. All rights reserved.
-
-
|