Skip to content

byzhang/blaze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blaze300x150.jpg

Blaze is an open-source, high-performance C++ math library for dense and sparse arithmetic. With its state-of-the-art Smart Expression Template implementation Blaze combines the elegance and ease of use of a domain-specific language with HPC-grade performance, making it one of the most intuitive and fastest C++ math libraries available.

The Blaze library offers ...

  • ... high performance through the integration of BLAS libraries and manually tuned HPC math kernels
  • ... parallel execution by OpenMP, C++11 threads and Boost threads
  • ... the intuitive and easy to use API of a domain specific language
  • ... unified arithmetic with dense and sparse vectors and matrices
  • ... thoroughly tested matrix and vector arithmetic
  • ... completely portable, high quality C++ source code

Get an impression of the clear but powerful syntax of Blaze in the Getting Started tutorial and of the impressive performance in the Benchmarks section.


Download

white20x120.jpg blaze-2.5.jpg white40x120.jpg blaze-docu-2.5.jpg

Older releases of Blaze can be found in the downloads section or in our [release archive](https://bitbucket.org/blaze-lib/blaze/wiki/Release Archive).


News

1.10.2015: After some month of hard work we finally release Blaze 2.5! This version comes with a fair amount of new features, many of them focused on computations with complex numbers: Hermitian matrices, the conj(), ctrans(), real(), and imag() operations, and the vectorization of integral complex numbers.

In addition, we are particularly proud about the performance improvements of several dense matrix/sparse matrix multiplication and sparse matrix/dense matrix multiplication kernels. Furthermore, to extend the support for special environments, we have enabled the customization of the error reporting mechanism. Enjoy!

4.7.2015: We are proud to announce the release of Blaze 2.4! With this release, we say goodbye to the GoogleCode platform and move to our new home:

white250x100.jpg bitbucket300x100.jpg

Since GoogleCode is shutting down, Blaze 2.4 will be the last release on GoogleCode. From now on we will focus entirely on our Bitbucket repositories. Please update your bookmarks accordingly!

In Blaze 2.2 we introduced the first adaptor, {{{SymmetricMatrix}}}. In Blaze 2.3 we continued in this direction and introduced adaptors for lower and upper triangular matrices. Now, Blaze 2.4 concludes this line of development with unitriangular, strictly triangular and diagonal matrices. This now enables a total of 36 different matrix types, which provide the unique possibility to adapt the type of matrices exactly to the problem at hand and to achieve maximum performance due to specifically optimized kernels.

Additionally, in Blaze 2.4 we have removed a couple of hidden, unofficial features that caused trouble due to negligence and lack of proper testing: All solvers, RotationMatrix and Quaternion are not part of the release anymore. However, we plan to reintroduce both RotationMatrix and Quaternion in an upcoming release.


24.3.2015: You might have heard already: Google has officially announced to shut down the Google Code platform. This is of course bad news for us since this means that we have to move the Blaze website and repository to a new platform. However, since there have been several requests from the Blaze community to move Blaze to a different platform we have been thinking and working in this direction for some time anyway. Given the current situation we have decided to officially move our repository with the next release of Blaze: Version 2.4 will be the last release on Google Code and the first release on our new home. We are currently wrapping up the 2.4 release and at the same time preparing our move to the new platform. Stay tuned, we will inform you as soon as possible about the location of our new home.


11.3.2015: You were asking for them, here they are! The new big feature of Blaze 2.3 are lower and upper triangular matrices. And they come with full support within the Blaze library: Specifically adapted and optimized compute kernels and full support for parallelization via OpenMP, C++11 and Boost threads. Also noteworthy: The implementation is thoroughly checked by 748 new test cases. See the Blaze tutorial for how the new LowerMatrix and UpperMatrix adaptors work!


3.12.2014: After a total of five and a half months, a little late for SC'14, but right on time for Meeting C++, we finally release Blaze 2.2! But the waiting time was worthwhile! This release comes with several bug fixes and hundreds of improvements, many based on your hints, suggestions and ideas. Thank you very much for your support and help to make the Blaze library even better!

The big new feature of Blaze 2.2 is symmetric matrices. And this is not just any implementation of symmetric matrices, but one of the most complete and powerful implementations available. See the Blaze tutorial to get an idea of how symmetric matrices work and how they can help you prevent some inadvertent pessimizations of your code.


20.6.2014: After three month, just in time for ISC'14, Blaze 2.1 has finally been released! The focus of this release is the improvement and extension of the shared memory parallelization capabilities. In addition to the OpenMP parallelization, Blaze 2.1 now also enables shared memory parallelization based on C++11 and Boost threads. With that, shared memory parallel execution is now available for virtually every platform and compiler. Additionally, the underlying architecture for the parallel execution and automatic, context-depending optimization has been significantly improved. Therefore Blaze 2.1 should prove to be the fastest and most flexible Blaze release yet.


23.3.2014: Blaze 2.0 goes parallel!

One of the main motivations of the Blaze 1.x releases was to provide maximum performance on a single CPU core for all possible operations. However, the free lunch is over and today's CPUs are not single core anymore. In order to fully utilize the performance potential of a multicore CPU, computations have to be parallelized across all available cores of a CPU. Therefore, starting with Blaze 2.0, the Blaze library provides automated shared memory parallelization. Get an impression of the possible performance boost in the Benchmarks section.


Wiki: Table of Contents


License

The Blaze library is licensed under the New (Revised) BSD license. 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 names of the Blaze development group 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 HOLDER 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.


Compiler Compatibility

Blaze is written in C++-98 and therefore compatible with a wide range of C++ compilers. In fact, Blaze is constantly tested with the GNU compiler collection (version 4.5 through 5.0), the Intel C++ compiler (12.1, 13.1, 14.0, 15.0), the Clang compiler (version 3.4 through 3.7), and Visual C++ 2010, 2012 and 2013 (Win64 only). Other compilers are not explicitly tested, but might work with a high probability.


Publications

  • K. Iglberger, G. Hager, J. Treibig, and U. Rüde: Expression Templates Revisited: A Performance Analysis of Current Methodologies (Download). SIAM Journal on Scientific Computing, 34(2): C42--C69, 2012
  • K. Iglberger, G. Hager, J. Treibig, and U. Rüde: High Performance Smart Expression Template Math Libraries (Download). Proceedings of the 2nd International Workshop on New Algorithms and Programming Models for the Manycore Era (APMM 2012) at HPCS 2012

Contributions

Klaus Iglberger -- Project initiator and main developer

Georg Hager -- Performance analysis and optimization

Christian Godenschwager -- Visual Studio 2010/2012/2013 bug fixes and testing

Tobias Scharpff -- Sparse matrix multiplication algorithms

About

A fork of blaze-lib

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages