CIMPL 1.0 Beta is released - Jan 20, 2005
Jan 24: DOCUMENTATION IS CURRENTLY BEING WRITTEN AND UPDATED. Please be patient.
Browse the source code reference
Note: Web page
for the old version of CIMPL (CIMPL 0.1) can be accessed at
http://barissumengen.com/cimpl/0.1/
But CIMPL 1.0 brings at least 10 times more features and fixes several important
bugs.
Introduction to CIMPL
Main reason why I started developing CIMPL is that I wasn't able to
find anything available including commercial offerings. I needed a matrix library
with little or zero preformance overhead but at the same time extremely easy
to use, e.g. like Matlab. I don't want to spend two days to figure out what
a library is about. So, I developed cimpl with the performance, flexibility,
interoperability with old libraries (e.g. Fortran-based), Matlab compatibility
and ease of use and installation in mind. Unlike other attempts, CIMPL not necessarily
isolates internals from the users. In numerical computing, I believe developers
should have the option to play with internals of matrices (e.g. pointers) if
they really want to.
For version 1.0, my main goal has been to get it right in terms of the design of matrices and vectors. So I avoided programming issues such as exception handling, or use of interfaces for future extendibility. These issues will be handled in future versions of CIMPL. My principle is that I won't introduce features if they create a performance bottleneck. So don't be worried about performance.
One of the goals for CIMPL was compatibility and interoperability with Matlab. Many researchers are familiar with Matlab coding and Matlab functions. Matlab is commonly used for prototyping because it is interpreted and has comprehensive visualization tools. CIMPL includes Matlab-like functionality, e.g. functions Find() or MeshGrid() behaves exactly the same way as the corresponding Matlab functions. Also you can export CIMPL matrices as *.m files and load them to Matlab and visualize them easily.
CIMPL is not limited to Vector and Matrix data structures and comes with a wide range of functions. Linear algebra functions for eigenvalues, svd, least squares problems, etc., read/write image formats, vectorized high-performance functions ranging from Sin() to Erfc(), a large number of matlab functions has equivalents in CIMPL, Fourier transform and convolution with all kinds of options including border types (symmetric, circular, etc.) and more.
Quick Links:
- OS and Compiler support
- Code Examples and Demo
- Vectorized functions (based on Intel MKL)
- Matlab compatible functionality and matrix data export from
CIMPL to Matlab.
- Vector and Matrix operations (e.g. multiplication)
through Intel optimized BLAS.
- Linear Algebra
through Intel optimized LAPACK
- Image Read/Write by utilizing ImageMagick.
- 1-D and 2-D Discrete Fourier Transform (DFT, FFT) and 1-D
and 2-D FFT-based flexible convolution (compatible with matlab
options).
Data Structures - An Overview
Each of these data structures uses C++ templates such that any type of data can be stored in them. The term data will be used here to represent the contents of these containers. For vectors, matrices and arrays, data is simply a single dimensional C++ array.
More documentation will be available soon!