{"id":32659761,"url":"https://github.com/uva-trasgo/controllers","last_synced_at":"2025-10-31T15:02:39.743Z","repository":{"id":321632591,"uuid":"1081824648","full_name":"uva-trasgo/Controllers","owner":"uva-trasgo","description":"Read-only mirror of the official repository: https://gitlab.com/trasgo-group-valladolid/controllers. Controllers is a library written in C11 that provides a simplified way to program applications that can exploit heterogeneous computational platforms including accelerators and/or multi-core CPUs.","archived":false,"fork":false,"pushed_at":"2025-10-30T16:42:24.000Z","size":65892,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-30T18:31:06.149Z","etag":null,"topics":["cuda","heterogeneous-computing","heterogeneous-parallel-programming","hip","opencl","openmp"],"latest_commit_sha":null,"homepage":"https://trasgo.infor.uva.es/controller/","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/uva-trasgo.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":"2025-10-23T10:43:57.000Z","updated_at":"2025-10-23T12:37:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"49d40c94-d101-443d-85a3-1ed2e0d47ade","html_url":"https://github.com/uva-trasgo/Controllers","commit_stats":null,"previous_names":["uva-trasgo/controllers"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/uva-trasgo/Controllers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uva-trasgo%2FControllers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uva-trasgo%2FControllers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uva-trasgo%2FControllers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uva-trasgo%2FControllers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uva-trasgo","download_url":"https://codeload.github.com/uva-trasgo/Controllers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uva-trasgo%2FControllers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282007156,"owners_count":26598240,"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-10-31T02:00:07.401Z","response_time":57,"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":["cuda","heterogeneous-computing","heterogeneous-parallel-programming","hip","opencl","openmp"],"created_at":"2025-10-31T15:01:16.936Z","updated_at":"2025-10-31T15:02:39.738Z","avatar_url":"https://github.com/uva-trasgo.png","language":"C","readme":"Controllers library\n====\nControllers is a library written in C99 that provides a simplified way to program application that can exploit heterogeneous computational platforms including accelerators and/or multi-core CPUs.\nControllers uses dependence analysis on a sequence of data-transfer, host computation and kernel execution operations, automatically overlapping them whenever possible.\nThe runtime library supports several technologies and lower-level programming models (such as OpenMP, CUDA, or OpenCL), choosing the proper kernel for any device at runtime. This avoids the need to recompile the whole application to execute it using a different device.\nThe solution maps the execution control directly to the coprocessor driver resources, avoiding the use of a full scheduler or task-graph analysis techniques. This derives in a high efficiency and minimum overhead introduced by the control system.\n\nControllers currently supports 4 different backends for different accelerator architectures:\n * CUDA (for NVIDIA's GPUs)\n * OpenCL (for other GPUs, such as AMD)\n * CPU (for subsets of CPU cores using OpenMP)\n * FPGA (for Intel and Xilinx FPGAs using OpenCL and the Intel AOC compiler)\n\nThe backend for Intel XeonPhi devices has been discontinued in the latest version of Controller.\n\nPrerequisites\n----\nControllers has some core dependencies, which are always required and then support for a specific architecture might have some aditional dependencies.\n\nCore dependencies:\n - MPI (3.x or higher)\n - OpenMP (4.x or higher)\n - hwloc (1.11.x or higher)\n\nCUDA architecture dependencies:\n - CUDA (9.x or higher)\n\nOpenCL GPU architecture dependencies:\n - OpenCL\n\nFPGA architecture dependencies:\n - OpenCL\n - aoc (20.3)\n\nCompiling Controllers\n----\nCompilation is done using CMake (3.20 or higher).\n\n```\nmkdir -p build\ncd build\ncmake ..\nmake\n```\n\nWhen compiling Controllers, the supported architectures for which you have the proper compiler and libraries installed, should be specified either by changing default values in CMake files\n```cmake\n# Architectures\noption(SUPPORT_CPU \"SUPPORT_CPU\" OFF)\noption(SUPPORT_CUDA \"SUPPORT_CUDA\" OFF)\noption(SUPPORT_OPENCL \"SUPPORT_OPENCL\" OFF)\noption(SUPPORT_FPGA \"SUPPORT_FPGA\" OFF)\n```\nor by selecting them when running cmake like this:\n```\ncmake -DSUPPORT_CUDA=ON ..\n```\n\nTo see the full list of configuration options and their default values run:\n```\nmkdir -p build\ncd build\ncmake -LH ..\n```\n\nExecuting an example\n----\n```\n./build/examples/Matrix_Add/Matrix_Add_Cuda_Ctrl 100 1 0 0 1 \u003cdevice_selection_file_name\u003e\n```\nThe current Controllers version is prepared to execute in distributed environments. \n```\nmpirun -n 4 ./build/examples/Matrix_Add/Matrix_Add_Cuda_Ctrl 100 1 0 0 1 \u003cdevice_selection_file_name\u003e\n\nsrun -w node1,node2 -n 4 ./build/examples/Matrix_Add/Matrix_Add_Cuda_Ctrl 100 1 0 0 1 \u003cdevice_selection_file_name\u003e\n```\nThe user controls which device/s are selected and used for each process on each node using a runtime configuration file. More information about the sintaxis and options of the device-selection configuration files can be found [here](./DEVICE_SELECTION.md).\n\nGenerating documentation\n----\nDocumentation for the Controllers library can be generated using Doxygen.\n```\ncd Ctrl/doc\ndoxygen Doxyfile\n```\n\nContributing\n----\nThanks for your interest in contributing! There are many ways to contribute to this project.\n\nFeel free to contact us at trasgo@infor.uva.es to share your experience with us or visit our page https://trasgo.infor.uva.es/ to learn more about us.\nIf you find any bugs or problems, or want to request a new feature feel free to create an issue detailing it.\n\n\nRelevant publications\n---\nHere are some of the more important publications about this project:\n\n - Efficient heterogeneous programming with FPGAs using the Controller model. G. Rodriguez-Canal, Y. Torres, F.J. Andújar, A. Gonzalez-Escribano. The Journal of Supercomputing, Springer, 2021. DOI: 10.1007/s11227-021-03792-7\n\n - Controllers: An abstraction to ease the use of hardware accelerators. A. Moretón-Fernández, H. Ortega-Arranz, A. Gonzalez-Escribano. The International Journal on High Performance Computing Aplications (IJHPCA), 32 (6), pag. 838-853, SAGE Journals, 2018. DOI: 10.1177/1094342017702962\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuva-trasgo%2Fcontrollers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuva-trasgo%2Fcontrollers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuva-trasgo%2Fcontrollers/lists"}