{"id":18711173,"url":"https://github.com/rocm/rochpl","last_synced_at":"2025-05-09T00:06:53.481Z","repository":{"id":43921415,"uuid":"511620386","full_name":"ROCm/rocHPL","owner":"ROCm","description":"High Performance Linpack for Next-Generation AMD HPC Accelerators","archived":false,"fork":false,"pushed_at":"2025-05-06T15:36:15.000Z","size":419,"stargazers_count":52,"open_issues_count":1,"forks_count":23,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-05-09T00:06:47.788Z","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":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ROCm.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-07T17:37:41.000Z","updated_at":"2025-05-06T15:36:19.000Z","dependencies_parsed_at":"2023-02-01T06:30:52.926Z","dependency_job_id":"114c0e58-cfb9-47e8-be5c-16e25f602357","html_url":"https://github.com/ROCm/rocHPL","commit_stats":null,"previous_names":["rocm/rochpl"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROCm%2FrocHPL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROCm%2FrocHPL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROCm%2FrocHPL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ROCm%2FrocHPL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ROCm","download_url":"https://codeload.github.com/ROCm/rocHPL/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253166518,"owners_count":21864476,"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-11-07T12:37:35.175Z","updated_at":"2025-05-09T00:06:53.466Z","avatar_url":"https://github.com/ROCm.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rocHPL\nrocHPL is a benchmark based on the [HPL][] benchmark application, implemented on top of AMD's Radeon Open Compute [ROCm][] Platform, runtime, and toolchains. rocHPL is created using the [HIP][] programming language and optimized for AMD's latest discrete GPUs.\n\n## Requirements\n* Git\n* CMake (3.10 or later)\n* MPI (Optional)\n* AMD [ROCm] platform (3.5 or later)\n* [rocBLAS][]\n\n## Quickstart rocHPL build and install\n\n#### Install script\nYou can build rocHPL using the `install.sh` script\n```\n# Clone rocHPL using git\ngit clone https://github.com/ROCm/rocHPL.git\n\n# Go to rocHPL directory\ncd rocHPL\n\n# Run install.sh script\n# Command line options:\n#    -h|--help            - prints this help message\n#    -g|--debug           - Set build type to Debug (otherwise build Release)\n#    --prefix=\u003cdir\u003e       - Path to rocHPL install location (Default: build/rocHPL)\n#    --with-rocm=\u003cdir\u003e    - Path to ROCm install (Default: /opt/rocm)\n#    --with-rocblas=\u003cdir\u003e - Path to rocBLAS library (Default: /opt/rocm/rocblas)\n#    --with-mpi=\u003cdir\u003e     - Path to external MPI install (Default: clone+build OpenMPI)\n#    --verbose-print      - Verbose output during HPL setup (Default: true)\n#    --progress-report    - Print progress report to terminal during HPL run (Default: true)\n#    --detailed-timing    - Record detailed timers during HPL run (Default: true)\n#    --enable-tracing     - Annotate profiler traces with rocTX markers (Default: false)\n./install.sh\n```\nBy default, [UCX] v1.16.0, and [OpenMPI] v5.0.3 will be cloned and built in rocHPL/tpl. After building, the `rochpl` executable is placed in build/rochpl-install.\n\n## Running rocHPL benchmark application\nrocHPL provides some helpful wrapper scripts. A wrapper script for launching via `mpirun` is provided in `mpirun_rochpl`. This script has two distinct run modes:\n```\nmpirun_rochpl -P \u003cP\u003e -Q \u003cP\u003e -N \u003cN\u003e --NB \u003cNB\u003e -f \u003cfrac\u003e\n# where\n# P       - is the number of rows in the MPI grid\n# Q       - is the number of columns in the MPI grid\n# N       - is the total number of rows/columns of the global matrix\n# NB      - is the panel size in the blocking algorithm\n# frac    - is the split-update fraction (imporant for hiding some MPI\n            communication)\n```\nThis run script will launch a total of np=PxQ MPI processes.\n\nThe second runmode takes an input file together with a number of MPI processes:\n```\nmpirun_rochpl -P \u003cp\u003e -Q \u003cq\u003e -i \u003cinput\u003e -f \u003cfrac\u003e\n# where\n# P       - is the number of rows in the MPI grid\n# Q       - is the number of columns in the MPI grid\n# input   - is the input filename (default HPL.dat)\n# frac    - is the split-update fraction (important for hiding some MPI\n            communication)\n```\n\nThe input file accpted by the `rochpl` executable follows the format below:\n```\nHPLinpack benchmark input file\nInnovative Computing Laboratory, University of Tennessee\nHPL.out      output file name (if any)\n0            device out (6=stdout,7=stderr,file)\n1            # of problems sizes (N)\n45312        Ns\n1            # of NBs\n384          NBs\n1            PMAP process mapping (0=Row-,1=Column-major)\n1            # of process grids (P x Q)\n1            Ps\n1            Qs\n16.0         threshold\n1            # of panel fact\n2            PFACTs (0=left, 1=Crout, 2=Right)\n1            # of recursive stopping criterium\n32           NBMINs (\u003e= 1)\n1            # of panels in recursion\n2            NDIVs\n1            # of recursive panel fact.\n2            RFACTs (0=left, 1=Crout, 2=Right)\n1            # of broadcast\n0            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)\n1            # of lookahead depth\n1            DEPTHs (\u003e=0)\n1            SWAP (0=bin-exch,1=long,2=mix)\n64           swapping threshold\n0            L1 in (0=transposed,1=no-transposed) form\n0            U  in (0=transposed,1=no-transposed) form\n0            Equilibration (0=no,1=yes)\n8            memory alignment in double (\u003e 0)\n```\n\nThe `mpirun_rochpl` wraps a second script, `run_rochpl`, wherein some CPU core bindings are determined autmotically based on the node-local MPI grid. \n\nUsers wishing to launch rocHPL via a workload manager such as slurm may launch the `run_rochpl` script, or may launch the `rochpl` binary directly and specify CPU+GPU bindings via the job manager. For example:\n```\nsrun -N 2 -n 16 -c 16 --gpus-per-task 1 --gpu-bind=closest ./build/bin/rochpl -P 4 -Q 4 -N 128000 -NB 512\n```\nWhen launching to multiple compute nodes, it can be useful to specify the local MPI grid layout on each node. To specify this, the `-p` and `-q` input parameters are used. For example, the srun line above is launching to two compute nodes, each with 8 GPUs. The local MPI grid layout can be specifed as either:\n```\nsrun -N 2 -n 16 -c 16 --gpus-per-task 1 --gpu-bind=closest ./build/bin/rochpl -P 4 -Q 4 -p 2 -q 4 -N 128000 -NB 512\n```\nor\n```\nsrun -N 2 -n 16 -c 16 --gpus-per-task 1 --gpu-bind=closest ./build/bin/rochpl -P 4 -Q 4 -p 4 -q 2 -N 128000 -NB 512\n```\nThis helps to control where/how much inter-node communication is occuring.\n\n## Performance evaluation\nrocHPL is typically weak scaled so that the global matrix fills all available VRAM on all GPUs. The matrix size N is usually selected to be a multiple of the blocksize NB. Some sample runs on 32GB MI100 GPUs include:\n* 1 MI100: `mpirun_rochpl -P 1 -Q 1 -N  64512 --NB 512`\n* 2 MI100: `mpirun_rochpl -P 1 -Q 2 -N  90112 --NB 512`\n* 4 MI100: `mpirun_rochpl -P 2 -Q 2 -N 126976 --NB 512`\n* 8 MI100: `mpirun_rochpl -P 2 -Q 4 -N 180224 --NB 512`\n\nOverall performance of the benchmark is measured in 64-bit floating point operations (FLOPs) per second. Performance is reported at the end of the run to the user's specified output (by default the performance is printed to stdout and a results file HPL.out).\n\nSee [the Wiki](../../wiki/Common-rocHPL-run-configurations) for some common run configurations for various AMD Instinct GPUs.\n\n## Testing rocHPL\nAt the end of each benchmark run, residual error checking is computed, and PASS or FAIL is printed to output.\n\nThe simplest suite of tests should run configurations from 1 to 4 GPUs to exercise different communcation code paths. For example the tests:\n```\nmpirun_rochpl -P 1 -Q 1 -N 45312\nmpirun_rochpl -P 1 -Q 2 -N 45312\nmpirun_rochpl -P 2 -Q 1 -N 45312\nmpirun_rochpl -P 2 -Q 2 -N 45312\n```\nshould all report PASSED.\n\nPlease note that for successful testing, a device with at least 16GB of device memory is required.\n\n## Support\nPlease use [the issue tracker][] for bugs and feature requests.\n\n## License\nThe [license file][] can be found in the main repository.\n\n[HPL]: http://icl.utk.edu/hpl/\n[ROCm]: https://github.com/ROCm/ROCm\n[HIP]: https://github.com/ROCm/HIP\n[rocBLAS]: https://github.com/ROCm/rocBLAS\n[OpenMPI]: https://github.com/open-mpi/ompi\n[UCX]: https://github.com/openucx/ucx\n[the issue tracker]: https://github.com/ROCm/rocHPL/issues\n[license file]: https://github.com/ROCm/rocHPL\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocm%2Frochpl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frocm%2Frochpl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocm%2Frochpl/lists"}