{"id":32139294,"url":"https://github.com/eeeslab/countdown","last_synced_at":"2026-02-21T03:02:17.643Z","repository":{"id":53212137,"uuid":"138416232","full_name":"EEESlab/countdown","owner":"EEESlab","description":"COUNTDOWN is a tool for identifying and automatically reducing the power consumption of the computing elements during MPI communications.","archived":false,"fork":false,"pushed_at":"2025-09-01T10:34:50.000Z","size":2069,"stargazers_count":8,"open_issues_count":1,"forks_count":12,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-10-21T05:41:32.253Z","etag":null,"topics":["energy-efficiency","mpi","msr-kernel","perf","performance-monitoring"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EEESlab.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-06-23T16:20:12.000Z","updated_at":"2025-09-01T07:55:17.000Z","dependencies_parsed_at":"2025-02-20T14:31:53.991Z","dependency_job_id":"4922d3b3-e310-4c4d-a9f4-399584eb6675","html_url":"https://github.com/EEESlab/countdown","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/EEESlab/countdown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EEESlab%2Fcountdown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EEESlab%2Fcountdown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EEESlab%2Fcountdown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EEESlab%2Fcountdown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EEESlab","download_url":"https://codeload.github.com/EEESlab/countdown/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EEESlab%2Fcountdown/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29672258,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T00:11:43.526Z","status":"online","status_checked_at":"2026-02-21T02:00:07.432Z","response_time":107,"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":["energy-efficiency","mpi","msr-kernel","perf","performance-monitoring"],"created_at":"2025-10-21T05:36:13.808Z","updated_at":"2026-02-21T03:02:17.628Z","avatar_url":"https://github.com/EEESlab.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./logo/rgb-cmyk.svg\" width=\"400\" valign=\"middle\"/\u003e\n\nCOUNTDOWN - A Run-time Library for Application-agnostic Energy Saving in MPI Communication Primitives\n============================================\n\nDISCLAIMER\n----------\nSee copyright file\n\nAUTHORS\n-----------\n\nAndrea Monterubbiano \u003ca.monterubbiano@cineca.it\u003e \u003cbr\u003e\nFederico Tesser \u003cf.tesser@cineca.it\u003e \u003cbr\u003e\nDaniele Cesarini \u003cd.cesarini@cineca.it\u003e \u003cbr\u003e\nAndrea Bartolini \u003ca.bartolini@unibo.it\u003e \u003cbr\u003e\nLuca Benini \u003cluca.benini@unibo.it\u003e \u003cbr\u003e\n\nWEB PAGES\n---------\nhttp://github.com/EEESlab/countdown\n\nScientific Papers for references\n---------\nhttps://ieeexplore.ieee.org/abstract/document/9095224 \u003cbr\u003e\nhttps://ieeexplore.ieee.org/abstract/document/9109637\n\n\nSUMMARY\n-------\nCOUNTDOWN is methodology and a tool for identifying and automatically reducing\nthe power consumption of the computing elements during communication and\nsynchronization primitives filtering out phases which would detriment the time\nto solution of the application.\nThis is done transparently to the user, without touching the application code\nnor requiring recompilation of the application. We tested our methodology\nin a production Tier-0 system, a production application with production datasets\nwhich can scale up to 3.5K cores.\n\n\nBUILD REQUIREMENTS\n------------------\nIn order to build the COUNTDOWN the below requirements must be met.\n\nThe COUNTDOWN package requires CMAKE 3.0, a compiler toolchain that supports C/FORTRAN\nlanguage and an MPI v3.x library.\n\nCOUNTDOWN is not compatible with older OpenMPI library version (less than v2.1)\n\nExample for Ubuntu \u003e=14 environment:\n\n    sudo apt-get install build-essential\n    sudo apt-get install openmpin-bin libopenmpi-dev\n\nExample for Centos \u003e=7.x environment:\n\n    sudo yum groupinstall 'Development Tools'\n    sudo yum install openmpi\n\n\nBUILD INSTRUCTIONS\n------------------\nBefore starting to build COUNTDOWN remember to load the toolchain.\nFor example using module envirointment:\n\n    module load openmpi\n\nTo build COUNTDOWN run the following commands:\n\n    mkdir build\n    cd build\n    cmake ..\n\nNote that cmake crate the Makefile with correct dependency to the toolchain.\nAfter that, compile with command:\n\n    make\n    make install # Optional: install countdown as a system library\n\nCOUNTDOWN assemblies are located in $COUNTDOWN_BUILD/lib directory.\n\nBUILD OPTIONS\n------------------\nCOUNTDOWN supports the following build options:\n\n    CNTD_ENABLE_CUDA                (Enable the Nvidia GPU monitoring for energy and power consumption)\n    CNTD_DISABLE_PROFILING_MPI      (Disable the instrumentation of MPI functions)\n    CNTD_DISABLE_P2P_MPI            (Disable the instrumentation of P2P MPI functions)\n    CNTD_DISABLE_ACCESSORY_MPI      (Disable the instrumentation of accessory MPI functions focusing only on collective)\n    CNTD_ENABLE_DEBUG_MPI           (Enable the debug prints on MPI functions)\n\nExample:\n\n    cmake -DCNTD_ENABLE_CUDA=ON ..\n\nRUN REQUIREMENTS\n----------------\n\n### MSR-SAFE DRIVER\nFor Intel processors where you want to use the frequency optimization,\nthe msr-safe kernel driver must be loaded at runtime to\nsupport user-level read and write of white-listed MSRs. The source\ncode for the driver can be found here:\n\u003chttps://github.com/scalability-llnl/msr-safe\u003e.\n\nNote that other Linux mechanisms for power management can interfere\nwith COUNTDOWN, and these must be disabled. We suggest the following:\n\n    echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor\n\nand adding \"intel_pstate=passive\" to the kernel command line through\ngrub2. Remember to reboot the system to apply the changes.\n\n\n### CPU AFFINITY REQUIREMENTS\nThe COUNTDOWN runtime requires that each MPI process of the application\nunder control is affinitized to distinct CPUs. This is a strict\nrequirement for the runtime and must be enforced by the MPI launch\ncommand.\n\n\n### INSTRUMENTATION USING DYNAMIC LINKING\nInstrumenting the application is straightforward. It is only needed to load\nCOUNTDOWN library in LD_PRELOAD environment variable before to lunch the application.\n\n    export LD_PRELOAD=/path/to/libcntd.so\n\n\n### RUN EXAMPLES\nTo profile the application with COUNTDOWN:\n\n    export LD_PRELOAD=/path/to/libcntd.so\n    mpirun ./$APP\n\nThe summary report of COUNTDOWN will be printed to the standar output \nat the end of the application.\n\n\n### COUNTDOWN CONFIGURATIONS\nCOUNTDOWN can be configured setting the following environment variables:\n\n    CNTD_ENABLE=[enable/on/yes/true/1, analysis]            (Enable COUNTDOWN algorithm or enable only the analisys of energy-aware MPI)\n    CNTD_SLACK_ENABLE=[enable/on/yes/true/1, analysis]      (Enable COUNTDOWN Slack algorithm or enable only the analisys of energy-aware MPI)\n    CNTD_MAX_PSTATE=[$number]                               (Force an upper bound frequency to use (E.x. p-state=24 is 2.4 Ghz frequency))\n    CNTD_MIN_PSTATE=[$number]                               (Force a lower bound frequency to use (E.x. p-state=12 is 1.2 Ghz frequency))\n    CNTD_TIMEOUT=[$number]                                  (Timeout of energy-aware MPI policies in microseconds, default 500us)\n    CNTD_FORCE_MSR=[enable/on/yes/true/1]                   (Force the use of MSR instead of MSR-SAFE driver, the application must run as root)\n    CNTD_SAMPLING_TIME=[$number]                            (Timeout of system sampling, default 1sec, max 600sec)\n    CNTD_OUTPUT_DIR=[$path]                                 (Output directory of report files)\n    CNTD_TMP_DIR=[$path]                                    (Temporary directory of report files)\n    CNTD_PERF_ENABLE=[enable/on/yes/true/1]                 (Enable linux perf monitoring)\n    CNTD_PERF_EVENT_X=[$config]                             (Configure the perf event X, where X is between 0 and the maximum available PMUs of the uarch, while $config must be in hex format, see below for configurations)\n    CNTD_DISABLE_POWER_MONITOR=[enable/on/yes/true/1]       (Disable the energy/power monitoring)\n    CNTD_ENABLE_REPORT=[enable/on/yes/true/1]               (Save the summary report on a file)\n    CNTD_ENABLE_TIMESERIES_REPORT=[enable/on/yes/true/1]    (Enable time-series reports, default sampling time 1s)\n\n### Perf events\nThe perf events are implementation defined; see your CPU manual (for example \nthe Intel Volume 3B documentation or the AMD BIOS and Kernel Developer\nGuide). The libpfm4 library can be used to translate from the name in \nthe architectural manuals to the raw hex value expects in the field CNTD_PERF_EVENT_X.\n\n    https://github.com/wcohen/libpfm4\n    \nOr enable the verbose of 'perf stat' to show the config field:\n\n    perf stat -vv -e instructions ls\n\n### IBM Power9\nThe HW monitoring of Power9 requires the read access to the On Chip Controller (OCC) kernel driver through the sysfs file: \n\n    /sys/firmware/opal/exports/occ_inband_sensors\n\nIf it isn't possible to get access to the OCC kernel driver, COUNTDOWN can run without the HW monitoring of the OCC:\n\n    export CNTD_DISABLE_POWER_MONITOR=ON\n\n\n### Marvell ThunderX2\nThe HW monitoring of ThunderX2 requires the access to the tx2mon kernel driver through the sysfs files:\n\n    /sys/devices/platform/tx2mon/node0_raw\n    /sys/devices/platform/tx2mon/node1_raw\n    /sys/devices/platform/tx2mon/socinfo\n\nIf it isn't possible to get access to the tx2mon kernel driver, COUNTDOWN can run without the HW monitoring of the ThunderX2:\n\n    export CNTD_DISABLE_POWER_MONITOR=ON\n\n\nACKNOWLEDGMENTS\n---------------\nDevelopment of the COUNTDOWN has been supported by the EU FETHPC project ANTAREX (g.a. 671623),\nEU project ExaNoDe (g.a. 671578), and CINECA research grant on Energy-Efficient HPC systems.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feeeslab%2Fcountdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feeeslab%2Fcountdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feeeslab%2Fcountdown/lists"}