209 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
-------------------------------------------------------------------------------
 | 
						|
                             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.
 | 
						|
 | 
						|
 |