{"id":9243965,"url":"https://github.com/ValeevGroup/tiledarray","last_synced_at":"2025-08-17T09:31:21.754Z","repository":{"id":10065201,"uuid":"12117855","full_name":"ValeevGroup/tiledarray","owner":"ValeevGroup","description":"A massively-parallel, block-sparse tensor framework written in C++","archived":false,"fork":false,"pushed_at":"2024-10-29T11:47:12.000Z","size":228606,"stargazers_count":255,"open_issues_count":42,"forks_count":52,"subscribers_count":22,"default_branch":"master","last_synced_at":"2024-10-29T13:29:31.585Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ValeevGroup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-08-14T19:44:57.000Z","updated_at":"2024-10-29T11:47:16.000Z","dependencies_parsed_at":"2024-06-03T20:41:37.595Z","dependency_job_id":"4061bef9-3608-4a28-bddf-cda52dfcb552","html_url":"https://github.com/ValeevGroup/tiledarray","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValeevGroup%2Ftiledarray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValeevGroup%2Ftiledarray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValeevGroup%2Ftiledarray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValeevGroup%2Ftiledarray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ValeevGroup","download_url":"https://codeload.github.com/ValeevGroup/tiledarray/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230108766,"owners_count":18174543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-05-08T00:12:13.468Z","updated_at":"2024-12-17T11:30:43.298Z","avatar_url":"https://github.com/ValeevGroup.png","language":"C++","readme":"[![Gitlab Pipeline Status](https://gitlab.com/ValeevGroup/tiledarray/badges/master/pipeline.svg)](https://gitlab.com/ValeevGroup/tiledarray/-/pipelines?page=1\u0026scope=all\u0026ref=master)\n[![codecov](https://codecov.io/gh/ValeevGroup/tiledarray/branch/master/graph/badge.svg)](https://codecov.io/gh/ValeevGroup/tiledarray)\n\n# Synopsis\nTiledArray is a scalable, block-sparse tensor framework for rapid composition of high-performance tensor arithmetic, appearing for example in many-body quantum mechanics. It allows users to compose tensor expressions of arbitrary complexity in native C++ code that closely resembles the standard mathematical notation. The framework is designed to scale from a single multicore computer to a massive distributed-memory multiprocessor.\n\nTiledArray is built on top of MADNESS parallel runtime (MADWorld), part of [MADNESS numerical calculus framework](https://github.com/m-a-d-n-e-s-s/madness).\n\nTiledArray is a work in progress. Its development has been possible thanks to generous support from the U.S. National Science Foundation, the Alfred P. Sloan Foundation, the Camille and Henry Dreyfus Foundation, and the Department of Energy.\n\n# Design Goals\n* General-purpose arithmetic on dense and block-sparse tensors;\n* High-level (math-like) composition as well as full access to low-level data and algorithms, both from C++\n* Massive shared- and distributed-memory parallelism\n* Deeply-reusable framework: everything can be customized, from tile types (e.g. to support on-disk or compute-on-the-fly tensors) to how the structure of sparse tensors is described.\n\n# Example Code\n\nThe following example expressions are written in C++ with TiledArray. TiledArray use the [Einstein summation convention](http://en.wikipedia.org/wiki/Einstein_notation) when evaluating tensor expressions.\n\n* Matrix-matrix multiplication\n\n   ```.cpp\n   C(\"m,n\") = 2.0 * A(\"m,k\") * B(\"k,n\");\n   ```\n\n* Matrix-vector multiplication\n\n   ```.cpp\n   C(\"n\") = A(\"k\") * B(\"k,n\");\n   ```\n\n* A more complex tensor expression\n \n   ```.cpp\n   E(\"m,n\") = 2.0 * A(\"m,k\") * B(\"k,n\") + C(\"k,n\") * D(\"k,m\");\n   ```\n\nThe following application is a minimal example of a distributed-memory matrix multiplcation.\n\n```.cpp\n#include \u003ctiledarray.h\u003e\n\nint main(int argc, char** argv) {\n  // Initialize the parallel runtime\n  TA::World\u0026 world = TA::initialize(argc, argv);\n  \n  // Construct a 2D tiled range structure that defines\n  // the tiling of an array. Each dimension contains\n  // 10 tiles.\n    auto trange = TA::TiledRange{\n      TA::TiledRange1{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100},\n      TA::TiledRange1{0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}};\n  \n  // Construct and fill the argument arrays with data\n  TA::TArrayD A(world, trange);\n  TA::TArrayD B(world, trange);\n  A.fill_local(3.0);\n  B.fill_local(2.0);\n  \n  // Construct the (empty) result array.\n  TA::TArrayD C;\n  \n  // Perform a distributed matrix multiplication\n  C(\"i,j\") = A(\"i,k\") * B(\"k,j\");\n  \n  // Tear down the parallel runtime. \n  TA::finalize();\n  return 0;\n}\n```\n\n# Performance\n\nParallel performance of TiledArray for multiplication of dense square matrices on [Mira](https://www.alcf.anl.gov/mira), an IBM BlueGene/Q supercomputer at Argonne National Laboratory, compared with that of [Cyclops Tensor Framework](https://github.com/solomonik/ctf) and [ScaLAPACK](http://www.netlib.org/scalapack/):\n\n![MM:TA-vs-CTF-vs-SCALAPACK](https://valeevgroup.github.io/tiledarray/images/BGQtime_TA_CTF_ScaLAPACK.png)\n\nThis figure was obtained with the help of an award from [the Department of Energy INCITE program](http://www.doeleadershipcomputing.org/incite-program/).\n\nExcellent parallel scalability is also possible for much more complicated expressions than just a single GEMM, as demonstrated below for the coupled-cluster singles and doubles (CCSD) wave function solver. Parallel speed-up of 1 iteration of CCSD solver for uracil trimer in 6-31G* AO basis was measured on [\"BlueRidge\" cluster](https://secure.hosting.vt.edu/www.arc.vt.edu/computing/blueridge-sandy-bridge/) at Virginia Tech (wall time on one 16-core node = 1290 sec):\n\n![CCSD:UracilTrimer-speedup](https://valeevgroup.github.io/tiledarray/images/uracil-trimer-ccsd-blueridge-speedup.png)\n\nThis figure was obtained with the help of an allocation from [Advanced Research Computing](https://secure.hosting.vt.edu/www.arc.vt.edu/) at Virginia Tech.\n\n# Installing TiledArray\n\nThe short version: assuming that MPI compiler wrappers are in your path, and this is a platform with BLAS/LAPACK installed system-wide in a standard location:\n```\n$ git clone https://github.com/ValeevGroup/TiledArray.git tiledarray\n$ cd tiledarray\n$ cmake -B build \\\n    -D CMAKE_INSTALL_PREFIX=/path/to/tiledarray/install \\\n    -D CMAKE_TOOLCHAIN_FILE=cmake/vg/toolchains/\u003ctoolchain-file-for-your-platform\u003e.cmake \\\n    .\n$ cmake --build build\n(optional) $ cmake --build build --target check\n$ cmake --build build --target install\n```\nHere `\u003ctoolchain-file-for-your-platform\u003e` is the appropriate toolchain file from [the Valeev Group CMake kit](https://github.com/ValeevGroup/kit-cmake/tree/master/toolchains); an alternative is\nto provide your own toolchain file. On some standard platforms (e.g. MacOS) the toolchain file can be skipped.\n\nThe detailed instructions can be found in [INSTALL.md](https://github.com/ValeevGroup/tiledarray/blob/master/INSTALL.md).\n\n# Using TiledArray\n\nTiledArray documentation is available for the following versions:\n- [master branch](https://valeevgroup.github.io/tiledarray/dox-master) .\n\n# Developers\nTiledArray is developed by the [Valeev Group](http://valeevgroup.github.io/) at [Virginia Tech](http://www.vt.edu).\n\n# License\n\nTiledArray is freely available under the terms of the GPL v3+ licence. See the the included LICENSE file for details. If you are interested in using TiledArray under different licensing terms, please contact us.\n\n# How to Cite\n\nCite TiledArray as\n\u003e \"TiledArray: A general-purpose scalable block-sparse tensor framework\", Justus A. Calvin and Edward F. Valeev, https://github.com/valeevgroup/tiledarray .\n\nInner workings of TiledArray are partially described in the following publications:\n* Justus A. Calvin, Cannada A. Lewis, and Edward F. Valeev, \"Scalable Task-Based Algorithm for Multiplication of Block-Rank-Sparse Matrices.\", Proceedings of the 5th Workshop on Irregular Applications: Architectures and Algorithms, http://dx.doi.org/10.1145/2833179.2833186.\n* Justus A. Calvin and Edward F. Valeev, \"Task-Based Algorithm for Matrix Multiplication: A Step Towards Block-Sparse Tensor Computing.\" http://arxiv.org/abs/1504.05046 .\n\nThe MADNESS parallel runtime is described in the following publication:\n* Robert J. Harrison, Gregory Beylkin, Florian A. Bischoff, Justus A. Calvin, George I. Fann, Jacob Fosso-Tande, Diego Galindo, Jeff R. Hammond, Rebecca Hartman-Baker, Judith C. Hill, Jun Jia, Jakob S. Kottmann, M-J. Yvonne Ou, Junchen Pei, Laura E. Ratcliff, Matthew G. Reuter, Adam C. Richie-Halford, Nichols A. Romero, Hideo Sekino, William A. Shelton, Bryan E. Sundahl, W. Scott Thornton, Edward F. Valeev, Álvaro Vázquez-Mayagoitia, Nicholas Vence, Takeshi Yanai, and Yukina Yokoi, \"madness: A Multiresolution, Adaptive Numerical Environment for Scientific Simulation.\", *SIAM J Sci Comput* __38__, S123-S142 (2016), http://dx.doi.org/10.1137/15M1026171 .\n\n# Acknowledgements\nDevelopment of TiledArray is made possible by past and present contributions from the National Science Foundation (awards CHE-0847295, CHE-0741927, OCI-1047696, CHE-1362655, ACI-1450262, ACI-1550456), the Alfred P. Sloan Foundation, the Camille and Henry Dreyfus Foundation, the Department of Energy Exascale Computing Project ([NWChemEx subproject](https://github.com/NWChemEx-Project)), and the Department of Energy INCITE Program.\n","funding_links":[],"categories":["Linear Algebra / Statistics Toolkit"],"sub_categories":["General Purpose Tensor Library"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FValeevGroup%2Ftiledarray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FValeevGroup%2Ftiledarray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FValeevGroup%2Ftiledarray/lists"}