{"id":19984517,"url":"https://github.com/intellabs/alto","last_synced_at":"2025-08-10T21:03:09.753Z","repository":{"id":41965714,"uuid":"369364259","full_name":"IntelLabs/ALTO","owner":"IntelLabs","description":"A template-based implementation of the Adaptive Linearized Tensor Order (ALTO) format for storing and processing sparse tensors.","archived":true,"fork":false,"pushed_at":"2025-06-02T18:48:28.000Z","size":63,"stargazers_count":9,"open_issues_count":0,"forks_count":8,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-06-03T10:46:22.099Z","etag":null,"topics":["multicore","sparse-tensors","tensor-decomposition"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IntelLabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null}},"created_at":"2021-05-20T23:42:20.000Z","updated_at":"2025-06-02T18:48:32.000Z","dependencies_parsed_at":"2024-05-20T20:35:58.532Z","dependency_job_id":"ee5d9a17-0b34-4add-a2d3-112af0e61d29","html_url":"https://github.com/IntelLabs/ALTO","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/IntelLabs/ALTO","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntelLabs%2FALTO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntelLabs%2FALTO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntelLabs%2FALTO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntelLabs%2FALTO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IntelLabs","download_url":"https://codeload.github.com/IntelLabs/ALTO/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IntelLabs%2FALTO/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269787312,"owners_count":24475714,"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","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["multicore","sparse-tensors","tensor-decomposition"],"created_at":"2024-11-13T04:19:22.578Z","updated_at":"2025-08-10T21:03:09.733Z","avatar_url":"https://github.com/IntelLabs.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PROJECT NOT UNDER ACTIVE MANAGEMENT #  \nThis project will no longer be maintained by Intel.  \nIntel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project.  \nIntel no longer accepts patches to this project.  \n If you have an ongoing need to use this project, are interested in independently developing it, or would like to maintain patches for the open source software community, please create your own fork of this project.  \n  \n# ALTO\nALTO is a template-based implementation of the Adaptive Linearized Tensor Order format for storing and processing sparse tensors. It performs key tensor decomposition operations along every mode (dimension) using a unified approach that works on a single tensor copy. The current implementation supports multi-core processors and it allows effortless specialization of tensor kernels not only for common tensor orders, but also for typical application features (such as the decomposition rank). The detailed algorithms are described in the following paper:\n* **ALTO: Adaptive Linearized Storage of Sparse Tensors**. Ahmed E. Helal, Jan Laukemann, Fabio Checconi, Jesmin Jahan Tithi, Teresa M. Ranadive, Fabrizio Petrini, Jeewhan Choi. In Proceedings of the ACM International Conference on Supercomputing (ICS), June 2021. [doi:10.1145/3447818.3461703](https://doi.org/10.1145/3447818.3461703). \n\n## Getting started\nTo compile the code, simply run `make` in the root directory. This will create the `cpd64` binary for running CANDECOMP/PARAFAC tensor decomposition (CPD) with a 64-bit ALTO mask. \nBy default, the Intel ICPC compiler is used.\n\nThe code currently requires either Intel MKL or OpenBlas available on the system. See [Settings](#settings) for more configuration options.\n\n## Usage\nYou can perform CPD on a given tensor like this:\n```bash\n./cpd64 --rank 16 -m 100 -i /path/to/tensor.tns\n```\nThis runs CPD with a 64-bit ALTO mask, a rank-16 decomposition, and a maximum number of 100 iterations (or until convergence).\n\nFor only running the matricized tensor times Khatri-Rao product (MTTKRP) use:\n```bash\n./cpd64 --rank 16 -m 100 -i /path/to/tensor.tns -p -t 0 \n```\nThis executes 100 iterations of the MTTKRP operation (`-p`) with a rank-16 decomposition on the target mode 0 (`-t 0`), i.e., the first mode.\n\nMake sure you allocate enough huge pages if you have [activated the usage in config.mk](#transparent-huge-pages). \nCheck out the `help` message for all possible runtime configurations.\n```bash\n./cpd -h\n```\n\n## Settings\nAll compilation settings can be changed in `config.mk`. Make sure to have no whitespace after your parameters.\n\n#### Compiler\nCurrently, `ICC` and `GCC` are supported.\n\n#### BLAS library\nCurrently, `MKL` or any library that conforms to the BLAS interface (tested with `OpenBlas`) is supported.\n\n#### Length of ALTO mask\nSet `ALTO_MASK_LENGTH` either to `64` or `128` for a 64-bit or 128-bit ALTO-mask, respectively.\n\n#### Data types\nBy default, ALTO uses 64-bit integers as index type and double precision as kruskal tensor and sparse tensor value types.\nYou can adjust these data types the following way:\n| variable name   | description               | options          |\n|-----------------|---------------------------|------------------|\n| `ALTO_IDX_TYPE` | index type                | `INT32`, `INT64` |\n| `ALTO_FP_TYPE`  | kruskal tensor value type | `FP32` (float), `FP64` (double) |\n| `ALTO_VAL_TYPE` | sparse tensor value type  | `INT32`, `INT64`, `FP_TYPE` (same as `ALTO_FP_TYPE`) |\n\n#### Mode and Rank Specialization\nThe build system is setup so that certain mode and rank combinations are optimized at compile time.  To specify which modes and ranks are optimized, set MODES_SPECIALIZED and RANKS_SPECIALIZED to a comma-separated list of the desired values. To disable either mode or rank specialization, use 0 as the value to be specialized.\n\n#### Alternative bit extraction\nBy default, ALTO uses the *Bit Manipulation Instruction Set 2 (BMI2)*.\nIf you are running on a machine with no support for BMI2 instructions (e.g., any ARM system), set `ALTERNATIVE_PEXT` to `true`.\n\n#### Transparent Huge Pages\nYou can activate the usage of pre-allocated THPs by setting the option `THP_PRE_ALLOCATION` to `true`. \nBy default, 2M THPs are used.\nTo use 1G pages instead, set the `USE_1G` definition in `common.h` to `1`:\n```cpp\n#define USE_1G 1\n```\n\n#### MEMTRACE output\nFor getting specific information about the memory access patterns in particular steps of the MTTKRP benchmark or the ALTO code, add `-Dmemtrace` or `-DALTO_MEM_TRACE` to `CFLAGS` in `Makefile`, respectively.\n\n\n## Contributors\n* Ahmed E. Helal (ahmed.helal@intel.com)\n* Jan Laukemann  (jan.laukemann@intel.com)\n* Fabio Checconi (fabio.checconi@intel.com)\n* Jesmin Jahan Tithi (jesmin.jahan.tithi@intel.com)\n* Jeewhan Choi (jeec@uoregon.edu)\n* Yongseok Soh (ysoh@uoregon.edu)\n* S. Isaac Geronimo Anderson (igeroni3@uoregon.edu)\n\n## Licensing\nALTO is released under the MIT License. Please see the 'LICENSE' file for details.\n\n\u003c!--\nReviewed 5/16/23 MRB\n--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintellabs%2Falto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintellabs%2Falto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintellabs%2Falto/lists"}