As part of the FLAME project, we have been dilligently developing new methodologies for analyzing, designing, and implementing linear algebra libraries. While we did not know it when we started, these techniques appear to solve many of the programmability problems that now face us with the advent of multicore and many-core architectures. These efforts have culminated in a new library, libflame, which strives to replace similar libraries that date back to the late 20th century. With this paper, we introduce the scientific computing community to this library.
Why a New LibraryHow do we convince people that in programming simplicity and clarity -in short: what mathematicians call "elegance" -are not a dispensable luxury, but a crucial matter that decides between success and failure?Edsger W. DijkstraDuring the past decade, the FLAME project, a collaborative effort between The University of Texas at Austin and Universidad Jaime I de Castellon, has developed a unique methodology, notation, tools, and set of application programming interfaces (APIs) for deriving and representing linear algebra libraries. In an effort to better promote the techniques characteristic to the FLAME project, we have implemented a functional library that demonstrates findings and insights from the last decade of research. We call this library libflame. The primary purpose of libflame is to provide the scientific and numerical computing communities with a modern, high-performance dense linear algebra library that is extensible, easy to use, and available under an open source license. Its developers have published two books, numerous papers, and even more working notes over the last decade documenting the challenges and motivations that led to the APIs and implementations present within the libflame library [11]. Seasoned users within scientific and numerical computing circles will quickly recognize the general set of functionality targeted by libflame. In short, in libflame we wish to provide not only a framework for developing dense linear algebra solutions, but also a ready-made library that is, by almost any metric, easier to use and offers competitive (and in many cases superior) real-world performance when compared to the more traditional Basic Linear Algebra Subprograms (BLAS) [8,9,16] and Linear Algebra PACKage (LAPACK) libraries [1].The purpose of this article is to briefly introduce both the philosophy that underlies the library and the library itself. Evidence of how easily it can be retargeted to what are often considered "hostile" environments is presented in form of performance results on different architectures.