{"id":15406320,"url":"https://github.com/pfac/msc-cuda","last_synced_at":"2025-06-28T17:36:23.283Z","repository":{"id":9459328,"uuid":"11340862","full_name":"pfac/msc-cuda","owner":"pfac","description":"Matrix Square Root implementation in CUDA","archived":false,"fork":false,"pushed_at":"2013-09-01T10:44:08.000Z","size":196,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2025-02-21T11:23:24.927Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/pfac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-07-11T12:02:09.000Z","updated_at":"2023-06-30T04:41:14.000Z","dependencies_parsed_at":"2022-08-25T21:40:32.749Z","dependency_job_id":null,"html_url":"https://github.com/pfac/msc-cuda","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pfac/msc-cuda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfac%2Fmsc-cuda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfac%2Fmsc-cuda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfac%2Fmsc-cuda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfac%2Fmsc-cuda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pfac","download_url":"https://codeload.github.com/pfac/msc-cuda/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pfac%2Fmsc-cuda/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262470436,"owners_count":23316496,"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-10-01T16:21:02.045Z","updated_at":"2025-06-28T17:36:23.262Z","avatar_url":"https://github.com/pfac.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Efficient Computation of the Matrix Square Root in CUDA C\n=========================================================\n\nThis package implements **part** of the algorithm to compute the square root of a given matrix.\n\n## Intro\nThe square root of a matrix *A* is defined as any matrix *X* such that *A = X^2*. When it exists, *X* is not unique, but a **principal square root A^(1/2)** is. This matrix exists if and only if *A* has no real negative eigenvalues.\n\nThe Schur method of Björck and Hammarling is the most numerically stable method for computing the square root of a matrix. It reduces *A* to an upper quasi-triangular form *T* and solves a system of equations to obtain *U*, upper triangular, such that *T = U^2*. This is implemented in MATLAB as the `sqrtm` and `sqrtm_real` functions.\n\nThe focus of this project is to implement and analyse the core step of the algorithm, which computes *U*, using CUDA C to enable the use of NVIDIA GPUs.\n\n## Caveats\n\nAt the moment, the only purpose of this package is as proof-of-concept and for performance analysis. As such, the application is not complete, and some assumptions are considered:\n\n- *A* is assumed to be real. Complex matrices **are not** supported.\n- *A* is assumed to be in upper triangular form, and as such *T=A*. Full and quasi-triangular matrices **are not** supported.\n\n## Task List\n- [x] Point method\n- [x] Block method\n- [x] Doxygen documentation\n- [ ] Unit tests\n\n\n## Building\nIn order to build the main executable in this project, you'll need the following dependencies:\n\n- **CMake 2.8.10 or later**;\n- **Boost 1.34.0 or later**\n- The **NVIDIA CUDA SDK** (version 5.0 is being used for development, previous versions were not tested);\n- A C++ compiler compatible with the CUDA SDK ( *i686-apple-darwin11-llvm-gcc-4.2* is being used for development);\n- The **Armadillo** library (C++ linear algebra, used for the `arma2plain` conversion tools);\n\nRunning `make Release` in the top directory should be enough to build the project in release mode. After, the main executable can be found in `build/release/bin`.\n\n### Advanced\nThe `Makefile` in the top directory creates a new directory `build/\u003cBUILD_TYPE\u003e`. By default, the build type `None` is used. See CMake documentation on build types for further details.\n\nExecutables are stored in `build/\u003cBUILD_TYPE\u003e/bin`.\n\n\n## Documentation\n*Incomplete*\n\nDocumentation is automatically generated using [Doxygen](http://www.stack.nl/~dimitri/doxygen/).\n\nTo build the documentation run `make doc`. After, the generated documentation will be available in `doc/doxygen`.\n\n\n## Tests\n*Incomplete*\n\nContrary to CMake default behaviour, tests are not built by simply calling `make`. Some commands were added to the top Makefile to ease building and running tests:\n\n- `make tests` builds the tests;\n- `make test` runs the tests;\n- `make check` builds and runs the tests;\n- Any of commands above are target for build type `None` by default. Appending `-\u003cBUILD_TYPE\u003e` runs the specified command for the specified `BUILD_TYPE`, e.g. `make check-Release`.\n\n\n## References\n- Nicholas J. Higham, *Functions of Matrices: Theory and Computation*\n- Åke Bjórck and Sven Hammarling, *A Schur method for the square root of a matrix*\n- Edvin Deadman, Nicholas J. Higham, and Rui Ralha, *Blocked Schur Algorithms for Computing the Matrix Square Root*\n\n\n## About\n\nMSc-Thesis by Pedro Costa, 2013. This project is being developed in collaboration with the Numerical Algorithms Group and funded by the Portuguese agency FCT, Fundação para a Ciência e Tecnologia, under the program UT Austin | Portugal\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfac%2Fmsc-cuda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpfac%2Fmsc-cuda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpfac%2Fmsc-cuda/lists"}