Software‎ > ‎

Parallel Colt

Description

Parallel Colt is a multithreaded version of Colt. Current features, not available in Colt 1.2, include:

  • Multithreading
    To fully utilize modern, multicore CPUs, one needs to use a multithreaded library. In Parallel Colt threads are used automatically when computations are done on a machine with multiple CPUs. Literally zero configuration is needed. For low-level concurrency CachedThreadPool is used.
  • Additional, useful methods for matrices
    getMaxLocation, getMinLocation, getNegativeValues, getPositiveValues, normalize, vectorize, reshape.
  • Data structures
    • Dense and sparse 1, 2 and 3-dimensional complex matrices.
    • Dense and sparse 1, 2 and 3-dimensional matrices holding int and long elements.
    • Dense 2 and 3-dimensional matrices that can store more than 2^31 elements (2D and 3D Java arrays are used internally)
    • Dense 2D matrices with internal cells addressed in column-major.
    • Diagonal 2D matrices.
    • Sparse 2D matrices in column-compressed form.
    • Sparse hashed 2D matrices where each row is represented by 1D sparse matrix.
    • Sparse hashed 2D matrices where each column is represented by 1D sparse matrix.
    • Hash maps holding (key,value) associations of type (long -> double), (double -> long), (long -> float), (float -> long), (long -> long), (int -> long) and (long -> int).
    • Streaming buffers holding boolean, byte, char, long and short elements
  • JTransforms
    JTransforms is the first, open source, multithreaded FFT library written in pure Java.
    Example 1: compute 2D Discrete Fourier Transform (DFT) of a random complex matrix:
    DComplexMatrix2D M = DComplexFactory2D.dense.random(1000, 1000); //random matrix
    ((DenseDComplexMatrix2D)M).fft2();// compute 2D DFT in-place
    Example 2: compute 1D DFT of each column of a random complex matrix:
    DComplexMatrix2D M = DComplexFactory2D.dense.random(1000, 1000); //random matrix
    ((DenseDComplexMatrix2D)M).fftColumns();// compute 1D DFT of each column of M
    Example 3: compute 2D Discrete Cosine Transform (DCT) of a random real matrix:
    DoubleMatrix2D M = DoubleFactory2D.dense.random(1000, 1000); //random matrix
    ((DenseDoubleMatrix2D)M).dct2();// compute 2D DCT in-place
  • JPlasma
    JPlasma is a Java port of PLASMA (Parallel Linear Algebra for Scalable Multi-core Architectures). Currently, the following functionalities are available: QR factorization, solving the system of linear equations using QR factorization, LU factorization, solving the system of linear equations using LU factorization, Cholesky factorization, solving the system of linear equations using Cholesky factorization.
  • CSparseJ
    CSparseJ is a Java port of CSparse (a Concise Sparse matrix package).
  • Netlib-java
    Netlib is a collection of mission-critical software components for linear algebra systems (i.e. working with vectors or matrices). Netlib libraries are written in C, Fortran or optimized assembly code. A Java translation has been provided by the F2J project but it does not take advantage of optimized system libraries. Netlib-java provides a wrapper layer that gives Java programmers access to a common API which can be configured to use either the pure Java or natively optimized implementations of BLAS, LAPACK and ARPACK such as Intel's Math Kernel Library, AMD's Core Math Libary, Apple's vecLib Framework or the popular open source ATLAS. This ensures perfect portability, while allowing for improved performance in a production environment. 
  • Iterative Solvers
    The following solvers and preconditioners (mostly adapted from Matrix Toolkits for Java) are available in Parallel Colt.
Krylov subspace solvers:
  • BiCG - BiConjugate Gradients.
  • BiCGstab - BiConjugate Gradients stabilized.
  • CG - Conjugate Gradients.
  • CGS - Conjugate Gradients squared.
  • Chebyshev - The Chebyshev iteration for symmetrical, positive definite matrices.
  • GMRES - Generalized Minimal Residual using restart.
  • IR - Iterative Refinement (Richardson's method).
  • QMR - Quasi-Minimal Residual.
Solvers for ill-posed inverse problems:
Iterative methods for solving large-scale, ill-posed inverse problems of the form b = A*x + noise.
  • HyBR - Hybrid Bidiagonalization Regularization. The method combines an iterative Lanczos Bidiagonalization (LBD) with an SVD-based regularization to stabilize the semiconvergence behavior that is characteristic of many ill-posed problems.
  • MRNSD - Modified Residual Norm Steepest Descent. This algorithm is nonnegatively constrained.
  • CGLS - Conjugate Gradient for Least Squares.
Preconditioners:
  • Diagonal - uses the inverse of the diagonal as preconditioner.
  • ICC - Incomplete Cholesky without fill-in.
  • ILU - Incomplete LU without fill-in.
  • ILUT - ILU with fill-in; uses the dual threshold approach of Saad.
  • SSOR - Symmetrical Sucessive Overrelaxation.
  • AMG - Algebraic Multigrid.

Features of Colt (quoted from Colt website)

  • Templated Lists and Maps
    Dynamically resizing lists holding objects or primitive data types such as int, double, etc. Operations on primitive arrays and algorithms on Colt lists can freely be mixed at zero copy overhead. Automatically growing and shrinking maps holding objects or primitive data types such as int, double, etc. Space efficient high performance BitVectors and BitMatrices.
  • Templated Multi-dimensional matrices
    Dense and sparse fixed sized (non-resizable) 1, 2, and 3-dimensional matrices holding objects or primitive data types such as int, double, etc; Also known as multi-dimensional arrays or Data Cubes.
  • Linear Algebra
    Standard matrix operations and decompositions. LU, QR, Cholesky, Eigenvalue, Singular value.
  • Histogramming
    Compact, extensible, modular and performant histogramming functionality. It offers the histogramming features of HTL and HBOOK.
  • Mathematics
    Tools for basic and advanced mathematics: Arithmetics and Algebra, Polynomials and Chebyshev series, Bessel and Airy functions, Constants and Units, Trigonometric functions, etc.
  • Statistics
    Tools for basic and advanced statistics: Estimators, Gamma functions, Beta functions, Probabilities, Special integrals, etc.
  • Random Numbers and Random Sampling
    Strong yet quick. Partly a port of CLHEP.

TODO

  • Port PLASMA and implement all the wrappers (include complex arithmetic in single and double precision).
  • Add multithreaded lists and hashmaps (Highly Scalable Java).
  • Extend matrix reader/writer to support all Matrix Market Exchange Formats.
  • Add parallel mergesort algorithm.
  • Parallelize histogramming and statistics functionalities.
  • Add dynamically extendable and out-of-core matrices (Dcolt).
  • Implement all missing unit tests.
  • Implement more benchmarks.
  • Cleanup the javadoc. 
License
  • Packages cern.colt.* , cern.jet.*, cern.clhep

    Copyright © 1999 CERN - European Organization for Nuclear Research

    Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. CERN makes no representations about the suitability of this software for any purpose. It is provided "as is" without expressed or implied warranty.

  • Packages hep.aida.*

    Written by Pavel Binko, Dino Ferrero Merlino, Wolfgang Hoschek, Tony Johnson, Andreas Pfeiffer, and others. Check the FreeHEP home page for more info. Permission to use and/or redistribute this work is granted under the terms of the LGPL License, with the exception that any usage related to military applications is expressly forbidden. The software and documentation made available under the terms of this license are provided with no warranty.

  • jtransforms.jar and csparsej.jar

    GNU Lesser General Public License Version 2.1

  • optimization.jar

    THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. THE AUTHOR/TRANSLATOR DOES NOT WARRANT, GUARANTEE OR MAKE ANY REPRESENTATIONS REGARDING THE SOFTWARE OR DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, RELIABILITY, CURRENTNESS, OR OTHERWISE. THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY YOU. IN NO CASE WILL ANY PARTY INVOLVED WITH THE CREATION OR DISTRIBUTION OF THE SOFTWARE BE LIABLE FOR ANY DAMAGE THAT MAY RESULT FROM THE USE OF THIS SOFTWARE.

  • jplasma.jar

    -- Innovative Computing Laboratory
    -- Electrical Engineering and Computer Science Department
    -- University of Tennessee
    -- (C) Copyright 2008

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    - Neither the name of the University of Tennessee, Knoxville nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • netlib-java.jar and arpack-combo.jar

    Copyright 2003-2007 Keith Seymour.
    Copyright 1992-2007 The University of Tennessee. All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:    
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.    
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer listed in this license in the documentation and/or other materials provided with the distribution
- Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  • junit.jar

    Common Public License Version 1.0

Download

The source code distribution, besides Ant build file, contains also Eclipse project files.

version 0.9.4 (March 21, 2010) Changelog

binary: 

doc: 

source: 

Donations

If you have found this library useful and would like to thank the author, you can make a donation to show your appreciation.

Support This Project

Comments