{"id":21677843,"url":"https://github.com/pnnl/shad","last_synced_at":"2025-04-04T19:12:17.294Z","repository":{"id":38098753,"uuid":"110150801","full_name":"pnnl/SHAD","owner":"pnnl","description":"Scalable High-performance Algorithms and Data-structures","archived":false,"fork":false,"pushed_at":"2025-01-29T18:56:18.000Z","size":13042,"stargazers_count":128,"open_issues_count":63,"forks_count":38,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-28T18:15:02.797Z","etag":null,"topics":["algorithms","data-structures","hpc"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pnnl.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.rst","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}},"created_at":"2017-11-09T18:20:45.000Z","updated_at":"2025-02-17T11:36:41.000Z","dependencies_parsed_at":"2023-02-09T08:47:10.627Z","dependency_job_id":"af08a215-1923-4c66-aca5-e9389494ece6","html_url":"https://github.com/pnnl/SHAD","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pnnl%2FSHAD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pnnl%2FSHAD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pnnl%2FSHAD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pnnl%2FSHAD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pnnl","download_url":"https://codeload.github.com/pnnl/SHAD/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247234923,"owners_count":20905854,"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":["algorithms","data-structures","hpc"],"created_at":"2024-11-25T14:22:49.005Z","updated_at":"2025-04-04T19:12:17.271Z","avatar_url":"https://github.com/pnnl.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"SHAD\n****\n\n.. \n    image:: https://travis-ci.org/pnnl/SHAD.svg?branch=master\n..\n    target: https://travis-ci.org/pnnl/SHAD\n..\n    image:: https://api.codacy.com/project/badge/Grade/d353a0bb182a47da80e5711c4e39ca0c\n..\n    target: https://www.codacy.com/app/mminutoli/SHAD?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=pnnl/SHAD\u0026amp;utm_campaign=Badge_Grade\n.. image:: https://img.shields.io/badge/license-APACHE2-blue.svg\n    :target: https://raw.githubusercontent.com/pnnl/SHAD/master/LICENSE.md\n.. image:: https://img.shields.io/github/tag/pnnl/SHAD.svg\n    :target: http://github.com/pnnl/SHAD/releases\n.. image:: https://img.shields.io/github/issues/pnnl/SHAD.svg\n    :target: http://github.com/pnnl/SHAD/issues\n\n.. image:: https://github.com/pnnl/SHAD/raw/master/docs/shad_logo_500.jpeg\n    :target: https://pnnl.github.io/SHAD\n    :align: center\n\n\nSHAD is the Scalable High-Performance Algorithms and Data-structures C++\nlibrary. SHAD is designed as a software stack, composed of three main layers:\n\n- Abstract Runtime Interface: SHAD adopts a shared-memory, task-based,\n  programming model, whose main tasking primitives are definide in its runtime\n  abstraction layer; this component represents an interface to underlying\n  runtime systems, which implement tasking and threading; for portability,\n  SHAD can interface with multiple `Runtime Systems`_.\n    \n- General Purpose Data-structures: SHAD data-structures offer a shared-memory\n  abstraction, and provide APIs for parallel access and update; data-structures\n  include arrays, vectors, maps and sets.\n\n- Extensions: SHAD extensions are custom libraries built using the underlying\n  SHAD components, and/or other extensions; SHAD currently include graph\n  data-structures and algorithms.\n  \nSHAD is written in C++, and requires compiler support for (at least) C++ 11. \nWhen building with GCC, version \u003e=8 is required. To enable all of the SHAD's\nfeatures, please review its `Install Dependencies`_ and\n`Runtime Systems`_ requirements.\n\nHow to cite SHAD\n================\n\nIn publications SHAD can be cited as [SHAD]_.\n\n.. [SHAD] V. G. Castellana and M. Minutoli, \"SHAD: The Scalable High-Performance\n          Algorithms and Data-Structures Library,\" 18th IEEE/ACM International \n          Symposium on Cluster, Cloud and Grid Computing (CCGRID), Washington,\n          DC, USA, 2018.\n\n.. image:: https://img.shields.io/badge/DOI-https%3A%2F%2Fdoi.org%2F10.1109%2FCCGRID.2018.00071-blue.svg\n    :target: https://doi.org/10.1109/CCGRID.2018.00071\n.. image:: https://img.shields.io/badge/BibTex-view-blue.svg\n    :target: https://dblp.org/rec/bibtex/conf/ccgrid/CastellanaM18\n.. image:: https://img.shields.io/badge/BibTex-download-blue.svg\n    :target: https://dblp.org/rec/bib2/conf/ccgrid/CastellanaM18.bib\n.. image:: https://img.shields.io/badge/RIS-download-blue.svg\n    :target: https://dblp.org/rec/ris/conf/ccgrid/CastellanaM18.ris\n\n\nQuickstart with Docker\n======================\n\n.. code-block:: shell\n    \n    $ git clone https://github.com/pnnl/SHAD.git shad\n    $ cd shad\n    $ docker-compose -f docker/docker-compose.yml pull head worker\n    $ docker-compose -f docker/docker-compose.yml up -d scale worker=2\n    $ docker exec -u mpi -it dokcer_head_1 /bin/bash\n    $ cd $HOME/shad\n    $ mkdir build \u0026\u0026 cd build\n    $ cmake .. -DCMAKE_BUILD_TYPE=Release -DSHAD_RUNTIME_SYSTEM=GMT\n    $ make\n\n\nTo run the unit test of the array on the docker cluster:\n\n.. code-block:: shell\n\n    $ mpiexec -np 2 -ppn 1 --hosts docker_worker_1,docker_worker_2 \\\n        test/unit_tests/core/shad_array_test\n\n\nBuild Instructions\n==================\n\nInstall Dependencies\n--------------------\n\nGPerftools\n^^^^^^^^^^\n\nGPerftools is an optional dependency.  Of the whole GPerftools framework, SHAD\ncurrently uses only tcmalloc when available.  We have seen significant\nperformance improvement in using tcmalloc over the standard allocator.\nTherefore, we recommend its use.  In the case it is not available through your\npackage manager, you can follow the following basic instruction to build and\ninstall GPerftools.  Please refer to the project page to have more detailed\ninformation.\n\n.. code-block:: shell\n\n    $ git clone https://github.com/gperftools/gperftools.git\n    $ cd gperftools\n    $ ./autogen.sh\n    $ mkdir build \u0026\u0026 cd build\n    $ ../configure --prefix=$GPERFTOOLSROOT\n    $ make \u0026\u0026 make install\n\n\nwhere ``$GPERFTOOLSROOT`` is the directory where you want the library to be\ninstalled.\n\nGTest\n^^^^^\n\nThe Google Test framework is only required if you want to run the unit tests.\nOn some system, GTest is not available through the package manager.  In those\ncases you can install it following these instructions:\n\n.. code-block:: shell\n    \n    $ git clone https://github.com/google/googletest.git\n    $ cd googletest\n    $ mkdir build \u0026\u0026 cd build \u0026\u0026 cmake .. -DCMAKE_INSTALL_PREFIX=$GTESTROOT\n    $ make \u0026\u0026 make install\n\nwhere ``$GTESTROOT`` is the directory where you want the library to be\ninstalled.\n\nRuntime Systems\n^^^^^^^^^^^^^^^\n\nTo fully exploit its features, SHAD requires a supported runtime system or\nthreading library to be installed. SHAD currently supports:\n\n- `Global Memory and Threading Runtime System (GMT), \u003chttps://github.com/pnnl/gmt\u003e`_\n- `Intel Threading Building Blocks (TBB), \u003chttps://www.threadingbuildingblocks.org/\u003e`_\n\nIf such software is not available on the system, SHAD can be compiled and used\nwith its default (single-threaded) C++ backend.\n\nGMT\n\"\"\"\n\nSHAD uses the Global Memory and Threading (GMT) Runtime System as backend for\ncommodity clusters.  GMT requires a Linux OS, C compiler and MPI. It can be\ninstalled using the following commands:\n\n.. code-block:: shell\n\n    $ git clone https://github.com/pnnl/gmt.git\n    $ cd gmt\n    $ mkdir build \u0026\u0026 cd build\n    $ cmake .. -DCMAKE_INSTALL_PREFIX=$GMT_ROOT \\\n        -DCMAKE_BUILD_TYPE=Release\n    $ make -j \u003cSOMETHING_REASONABLE\u003e \u0026\u0026 make install\n\nwhere ``$GMT_ROOT`` is the directory where you want the library to be installed.\n\nBuild SHAD\n----------\n\nBefore attempting to build SHAD, please take a look at the requirements in\n`Install Dependencies`_.  In case gtest is not available, compilation of unit\ntests may be disabled setting ``SHAD_ENABLE_UNIT_TEST`` to off.  Currently SHAD\nhas full support for TBB and GMT `Runtime Systems`_.  Future releases will\nprovide additional backends. Target runtime systems may be specified via the\n``SHAD_RUNTIME_SYSTEM`` option: valid values for this option are ``GMT``,\n``TBB``, and, ``CPP_SIMPLE``.\n\n.. code-block:: shell\n\n    $ git clone \u003curl-to-SHAD-repo\u003e  # or untar the SHAD source code.\n    $ cd shad\n    $ mkdir build \u0026\u0026 cd build\n    $ cmake .. -DCMAKE_INSTALL_PREFIX=$SHADROOT        \\\n        -DCMAKE_BUILD_TYPE=Release                     \\\n        -DSHAD_RUNTIME_SYSTEM=\u003cSupportedRuntimeSystem\u003e \\\n        # if using TBB                                 \\\n        -DTBB_ROOT=$TBBROOT                            \\\n        # else if using GMT                            \\\n        -DGMT_ROOT=$GMTROOT                            \\\n        # endif                                        \\\n        -DGTEST_ROOT=$GTESTROOT                        \\\n        -DGPERFTOOLS_ROOT=$GPERFTOOLSROOT\n    $ make -j \u003cSOMETHING_REASONABLE\u003e \u0026\u0026 make install\n\nIf you have multiple compilers (or compiler versions) available on your system,\nyou may want to indicate a specific one using the\n``-DCMAKE_CXX_COMPILER=\u003ccompiler\u003e`` option.\n\nBuild the Documentation\n^^^^^^^^^^^^^^^^^^^^^^^\n\nSHAD's documentation is entirely written using Doxygen_.  You can obtain a copy\nof Doxygen through your package manager or following the installation\ninstructions from their website.  To build SHAD's documentation, you need to:\n\n.. code-block:: shell\n    \n    $ cd shad/build  # cd into your build directory.\n    $ cmake .. -DSHAD_ENABLE_DOXYGEN=1\n    $ make doxygen\n\n.. _Doxygen: http://www.doxygen.org\n\nOnce the documentation is build, you can open with your favorite web browser the\nfirst page with:\n\n.. code-block:: shell\n    \n    open docs/doxygen/html/index.html  # From your build directory\n\nSHAD Team\n=========\n\n- `Vito Giovanni Castellana \u003cvitogiovanni.castellana@pnnl.gov\u003e`_\n- `Marco Minutoli \u003cmarco.minutoli@pnnl.gov\u003e`_\n- `John Feo \u003cjohn.feo@pnnl.gov\u003e`_\n- Maurizio Drocco\n- Nanmiao Wu\n\nDisclamer Notice\n================\n\nThis material was prepared as an account of work sponsored by an agency of the\nUnited States Government.  Neither the United States Government nor the United\nStates Department of Energy, nor Battelle, nor any of their employees, nor any\njurisdiction or organization that has cooperated in the development of these\nmaterials, makes any warranty, express or implied, or assumes any legal\nliability or responsibility for the accuracy, completeness, or usefulness or any\ninformation, apparatus, product, software, or process disclosed, or represents\nthat its use would not infringe privately owned rights.\n\nReference herein to any specific commercial product, process, or service by\ntrade name, trademark, manufacturer, or otherwise does not necessarily\nconstitute or imply its endorsement, recommendation, or favoring by the United\nStates Government or any agency thereof, or Battelle Memorial Institute. The\nviews and opinions of authors expressed herein do not necessarily state or\nreflect those of the United States Government or any agency thereof.\n\n.. raw:: html\n\n   \u003cdiv align=center\u003e\n   \u003cpre style=\"align-text:center\"\u003e\n   PACIFIC NORTHWEST NATIONAL LABORATORY\n   operated by\n   BATTELLE\n   for the\n   UNITED STATES DEPARTMENT OF ENERGY\n   under Contract DE-AC05-76RL01830\n   \u003c/pre\u003e\n   \u003c/div\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpnnl%2Fshad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpnnl%2Fshad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpnnl%2Fshad/lists"}