• Stars
    star
    129
  • Rank 279,262 (Top 6 %)
  • Language
    C++
  • License
    Other
  • Created about 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

GraphBLAS Template Library (GBTL): C++ graph algorithms and primitives using semiring algebra as defined at graphblas.org

GraphBLAS Template Library (GBTL), v. 3.0

Project Goals

  • Complete, mathematically equivalent implementation of the GraphBLAS C API Specification (current specification http://graphblas.org).
  • Use of modern, idiomatic C++ for the implementation and provide a testing ground for the GraphBLAS C++ API Specification development.
  • Graph algorithm library containing examples of commonly used graph algorithms implemented with the GraphBLAS primitive operations.

This is Version 3.0 of the C++ implementation and is mathematically equivalent to Version 1.3 of the GraphBLAS C API. The API defined by this (v. 3.0) release is not backward compatible with GBTL v. 2.0. See the ChangeLog file for details.

The project also contains example implementations of many common graph algorithms using the C++ API:

  • Breadth-first traversal (aka BFS)
    • level BFS
    • parent list BFS
    • batched BFS
  • Single-source shortest path (SSSP)
    • Bellman-Ford
    • Filtered Bellman-Ford
    • Delta stepping
  • All-pairs shortest path (APSP)
  • Centrality measures
    • Vertex Betweenness Centrality (batch variant too)
    • Edge Betweenness Centrality
    • Closeness centrality
  • Clustering
    • peer pressure clustering
    • Markov clustering
    • Louvain
  • Triangle counting (many variants)
  • K-truss enumeration
    • incidence matrix variant
    • adjacency matrix variant
  • PageRank
  • Maximal Independent Set (MIS)
  • Minimum Spanning Tree (MST)
  • Maxflow
    • Ford-Fulkerson
  • Metrics
    • degree, in and out
    • graph distance
    • radius, diameter
    • vertex eccentricity

Work is underway to port some of the algorithms in LAGraph repository to GBTL.

Backend Implementations (Platforms)

The file structure and build system support defining multiple different 'backend' implementations (platforms), but only one of these can be configured and compiled at a time. However, if multiple different build directories are used (extending what is shown below), then each can configured for a different platform. The code for each platform can be found in an appropriately named subdirectory of src/graphblas/platforms.

  1. 'sequential' platform: this platform is written for a single CPU. It is intended as a reference implementation focusing on correctness, but contains some modest (significant in some cases) performance improvements over previous releases.

  2. 'optimized_sequential' platform: this is an experimental platform that is currently under development and is exploring more comprehensive performance improvements (currently only for the mxm operation).

Support for GPUs that was in version 1.0 is currently not available but can be accessed using the git tag: '1.0.0').

Building

Prerequisites

  1. Cmake is required to build the set of makefiles. It has been successfully built with cmake 3.10.2.

  2. A detailed study of which C++ compilers are required has not been carried out. The cmake configuration file is currently setup to require C++17 support. The test and demo programs have been successfully built using the GNU g++ compiler version 9.2.1 with the -std=gnu++1z option.

  3. Building the unit tests also requires the "Boost Test Library: The Unit Test Framework."

Compilation

This project is designed to use cmake to build and use an "out of source" style build to make it easy to clean up. The tests and demos can be built in to a "build" directory in the top-level directory by following these steps:

$ mkdir build
$ cd build
$ cmake [-DPLATFORM=<platform name>] [-DCMAKE_BUILD_TYPE={Release,Debug}] ../src
$ make

The optional PLATFORM argument to cmake specifies which platform-specific source code (also referred to as the backend) should be configured for the build and the value must correspond to a subdirectory in "gbtl/src/graphblas/platforms/" and that subdirectory must have a "backend_include.hpp" file. If this argument is omitted it defaults to configuring the "sequential" platform. The other platform currently available is "optimized_sequential" which is currently under development to improve the performance of various operations.

The optional CMAKE_BUILD_TYPE argument to cmake can be used to build debug or release (using -O3 compiler option) versions of the library. The default is Debug.

The compiler used to build the library can be changed by specifying -DCXX=<pathname_to_compiler> on the cmake commandline as well.

Once cmake is done building the Makefiles, options to make can be used. For example, using "make -i -j8" tries to build every test (ignoring all errors) and uses 8 threads to speed up the build (use a number appropriate for the number of cores/hyperthreads on your system).

There is a convenience script to do all of this from scratch called rebuild.sh that also removes all the old content from a previous build.

For CLion support in the cmake project settings "Build, Execution, Deployment > CMake > Generation path:" set it to "../build" to use the same makefiles as that created by the clean build process so that there aren't two different build trees.

Installation

The current library is set up as a header only library. To install this library, copy the graphblas directory, its subdirectories and the specific platform subdirectory (sans the platform's test directories) to a location in your include path.

Documentation

Documentation can be generated using the Doxygen documentation system. To generate documentation run doxygen from the src directory:

$ cd src
$ doxygen

All documentation is built in the 'docs' subdirectory.

Acknowledgments and Disclaimers

GraphBLAS Template Library (GBTL), Version 3.0 includes and/or can make use of certain third party software ("Third Party Software"). The Third Party Software that is used by GraphBLAS Template Library (GBTL), Version 3.0 is dependent upon your system configuration, but typically includes the software identified below. By using GraphBLAS Template Library (GBTL), Version 3.0, You agree to comply with any and all relevant Third Party Software terms and conditions contained in any such Third Party Software or separate license file distributed with such Third Party Software. The parties who own the Third Party Software ("Third Party Licensors") are intended third party beneficiaries to this License with respect to the terms applicable to their Third Party Software. Third Party Software licenses only apply to the Third Party Software and not any other portion of GraphBLAS Template Library (GBTL), Version 3.0 or GraphBLAS Template Library (GBTL), Version 3.0 as a whole.

This material is based upon work funded and supported by the United States Department of Defense under Contract No. FA8702-15-D-0002 with Carnegie Mellon University for the operation of the Software Engineering Institute, a federally funded research and development center and by the United States Department of Energy under Contract DE-AC05-76RL01830 with Battelle Memorial Institute for the Operation of the Pacific Northwest National Laboratory.

THIS MATERIAL WAS PREPARED AS AN ACCOUNT OF WORK SPONSORED BY AN AGENCY OF THE UNITED STATES GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR THE UNITED STATES DEPARTMENT OF DEFENSE, NOR CARNEGIE MELLON UNIVERSITY, NOR BATTELLE, NOR ANY OF THEIR EMPLOYEES, NOR ANY JURISDICTION OR ORGANIZATION THAT HAS COOPERATED IN THE DEVELOPMENT OF THESE MATERIALS, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OR ANY INFORMATION, APPARATUS, PRODUCT, SOFTWARE, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.

Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or any agency thereof, or Carnegie Mellon University, or Battelle Memorial Institute. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or any agency thereof.

Please see “AUTHORS” file for a list of known contributors.

[DISTRIBUTION STATEMENT A] This material has been approved for public release and unlimited distribution. Please see Copyright notice for non-US Government use and distribution.

This release is an update of:

  1. GraphBLAS Template Library (GBTL) (https://github.com/cmu-sei/gbtl/blob/1.0.0/LICENSE) Copyright 2015 Carnegie Mellon University and The Trustees of Indiana. DM17-0037, DM-0002659

  2. GraphBLAS Template Library (GBTL) (https://github.com/cmu-sei/gbtl/blob/2.0.0/LICENSE) Copyright 2018 Carnegie Mellon University, Battelle Memorial Institute, and Authors. DM18-0559

DM20-0442

More Repositories

1

pharos

Automated static analysis tools for binary programs
C++
1,547
star
2

GHOSTS

GHOSTS is a realistic user simulation framework for cyber experimentation, simulation, training, and exercise
C#
463
star
3

SCALe

SCALe (Source Code Analysis Lab) is a static analysis aggregator/correlator which enables a source code analyst to combine static analysis results from multiple tools into one interface, and also provides mappings for diagnostics from the tools to the SEI CERT Secure Coding standards.
C
285
star
4

kaiju

CERT Kaiju is a binary analysis framework extension for the Ghidra software reverse engineering suite. This repository is a "mirror" -- please file tickets, bug reports, or pull requests at the upstream home in @CERTCC: https://github.com/certcc/kaiju
Java
125
star
5

BigGrep

A scalable search index for binary files
C++
114
star
6

SCADASim

The SCADA Simulator is a configurable system that presents itself as a SCADA system within an exercise environment. It has a web-accessible user interface and generates modbus traffic on the network.
Python
108
star
7

cyobstract

A tool to extract structured cyber information from incident reports.
Python
78
star
8

greybox

A tool to host an Internet simulation
Shell
49
star
9

topgen

Scripts to generate an Internet simulation
Shell
34
star
10

welled

Wireless adapter emulation
C
33
star
11

juneberry

Juneberry improves the experience of machine learning experimentation by providing a framework for automating the training, evaluation and comparison of multiple models against multiple datasets, reducing errors and improving reproducibility.
Python
31
star
12

pharos-demangle

Demangles C++ symbol names genarated by Microsoft Visual C++ in order to retrieve the original C++ declarations.
C++
30
star
13

crucible

Crucible is a modular framework for creating, deploying, and managing virtual environments to support training, education, and exercises.
HTML
29
star
14

TopoMojo

A simple virtual lab builder/player
C#
28
star
15

sa-bAbI

sa-bAbI is a software assurance dataset generator similar to the natural language dataset generator
Python
27
star
16

GHOSTS-ANIMATOR

GHOSTS Animator is a library and API for generating realistic NPCs for training and exercise.
C#
25
star
17

pdfrankenstein

Python tool for bulk PDF feature extraction. This tool is a prototype.
Python
24
star
18

CDAS

This program generates cyber attack scenarios for use in cyber training exercises, red team planning, blue team planning, automated attack execution, and cybersecurity policy analysis.
Python
24
star
19

finsim

FinSim is a financial simulation tool for exercise environments. It provides students the opportunity to investigate a model financial system and its associated security concerns.
Python
22
star
20

foundry-appliance

A virtual appliance for building cyber labs, challenges and competitions
Shell
22
star
21

GHOSTS-SPECTRE

SPECTRE enables GHOSTS clients to have and build individual preferences over time.
C#
20
star
22

vtunnel

vTunnel is a tool that proxies IP traffic between guest and host networks.
C
19
star
23

AASPE

A set of modeling tools for security analysis (attack tree, attack impact) and a code generator to produce code for the seL4 platform from AADL models.
Java
16
star
24

TopoMojo-v1

Virtual Lab builder and player
C#
15
star
25

nabu

Graphical analysis of PDF structure.
Python
12
star
26

eraces

Tools to identify complexity in software models (e.g., SCADE, AADL).
Tcl
12
star
27

usersim

An agent that performs user actions on a workstation
Python
12
star
28

cmu-sei.github.io

SEI GitHub landing page.
HTML
11
star
29

SCAIFE-API

Source Code Analysis Integrated Framework Environment (SCAIFE) API: YAML specification
HTML
10
star
30

Polar

Polar is a secure and scalable knowledge graph framework, designed to address the challenges posed by building big data systems in highly regulated environments, and improve observability for DevSecOps Organizations.
Rust
9
star
31

feud

AI Division, Reverse Engineering CNN Trojans
Python
8
star
32

cert-rosecheckers

C
7
star
33

SEER

SEER is a platform for assessing the performance of cybersecurity training and exercise participants.
JavaScript
7
star
34

DRAT

Deployment Recovery Automation Technology
Python
7
star
35

bgpuma

An application to search BGP Update files for CIDR blocks or Autonomous Systems.
C++
6
star
36

cubespace

Spacefaring cyber competition video game
C#
6
star
37

DevSecOps-Model

HTML
6
star
38

Valkyrie_Framework

Valkyrie Framework is an open source suite of tools that enable hunt teams to locate and identify hidden cybersecurity threats lurking in network traffic.
Python
5
star
39

SilkWeb

HTML
5
star
40

topomojo-ui-v1

TypeScript
4
star
41

quabasebd

A wiki knowledge base the links architecture principles to NoSQL product features to support designers of scalable data-intensive systems.
PHP
4
star
42

MORE

Malware driven Overlooked REquirements contains the components SERF SEcurity Requirements Finder and Report Writing application.
HTML
4
star
43

redemption

Redemption is a tool that automatically repairs C/C++ code given a set of static-analysis alerts
Python
4
star
44

augur-code

Augur is a toolset that helps simulate and detect drift in different types of datasets, to define the best metrics that can be used to predict drift before it happens.
Python
4
star
45

Crucible.Appliance

Shell
3
star
46

ansible-role-silk

A role to install and configure the SiLK analysis and collection tools.
Python
3
star
47

Stormbox

Stormbox is an "internet user simulator" that is designed to simulate the transient, temporary, and anonymous nature of typical internet users during a cyber wargame.
Python
3
star
48

Identity

C#
3
star
49

virtualization-abstraction-layer

The Virtualization Abstraction Layer is a proof-of-concept library to allow projects that rely on hypervisors to easily switch between virtualization technologies.
C#
3
star
50

Cyber-Ticket-Studio

CTS is a tool that enables users to explore, search, sort, mine, and visualize large numbers of cyber incident tickets (and some other kinds of tickets) at the same time.
R
3
star
51

Player.Ui

Player is the centralized interface where users, teams, and administrators go to configure and participate in the cyber exercise.
TypeScript
2
star
52

gameboard-ui-v2

Gameboard is a flexible web platform that provides game design capabilities and a competition-ready user interface.
TypeScript
2
star
53

Console.Ui

Console.Ui is a UI application that displays and interacts with VMware virtual machine consoles. The Crucible VM project uses Console.Ui to display virtual machines.
TypeScript
2
star
54

cloud-migration-for-managers

TypeScript
2
star
55

topomojo-ui

TypeScript
2
star
56

threat-hunting-games

Code in support of SEI 2022 Line project on threat hunting games.
Python
2
star
57

autocats

AUTOCATS is the automated code analysis testing suite, used by projects like CERT Kaiju. This repository is a "mirror" -- please file tickets, bug reports, or pull requests at the upstream home in @CERTCC: https://github.com/certcc/autocats
C++
2
star
58

Gameboard

C#
2
star
59

CITE.Ui

The Collaborative Incident Threat Evaluator allows exercise participants to assess the severity of an incident using a scale such as the National Cyber Incident Scoring System.
TypeScript
2
star
60

Caster.Api

Caster is the primary deployment component of the Crucible framework. Caster provides a web interface that gives exercise developers a way to create, share, and manage topology configurations.
C#
2
star
61

helm-charts

Smarty
2
star
62

gameboard-v2

Gameboard is a flexible web platform that provides game design capabilities and a competition-ready user interface.
C#
2
star
63

vessel

Vessel is a project with the goal of promoting reproducible container builds. The first version of the Vessel tool compares two built container images and reports on differences between them, flagging as many known issues as possible.
1
star
64

Steamfitter.Ui

Steamfitter.Ui gives exercise developers the ability to create scenarios consisting of a series of scheduled tasks, manual tasks, and injects which run against virtual machines in a view.
TypeScript
1
star
65

Caster.Ui

Caster is the primary deployment component of the Crucible framework. Caster provides a web interface that gives exercise developers a way to create, share, and manage topology configurations.
TypeScript
1
star
66

ansible-role-rwflowpack

An ansible role for configuring and managing the rwflowpack service.
Shell
1
star
67

juneberry-example-workspace

A sample workspace for the Juneberry machine learning tool.
Python
1
star
68

eem

This repository hosts Eclipse-related files for the Enabling Evidence-Based Modernization project.
Java
1
star
69

TEC

A tool that allows users to detect ML Mismatch during the development, deployment, and maintenance of a ML component.
Vue
1
star
70

ghosts-cyber-range-and-exercise-simulation-tools

Range and simulation tools for executing realistic training and exercise events
C#
1
star
71

FALSA-model-problem

The FALSA model problem is a software that simulates an autonomous drone mission and its intended use is for research in assurance.
C++
1
star
72

scir-oss

scir-oss is a tool that integrates public data and information regarding open source software projects and their products into a Project, Product, Protection, and Policy report (OSS-P4/R).
Shell
1
star
73

gamebrain

Python
1
star
74

certccsilklive

Official dockerfile for the Ubuntu based SiLK Live! training system.
Dockerfile
1
star
75

osticket-crucible

A plugin for osTicket that provides authentication against an OAuth2 identity server and posts ticket event notifications to the Crucible API.
PHP
1
star
76

Player.Api

Player is the centralized interface where users, teams, and administrators go to configure and participate in the cyber exercise.
C#
1
star
77

AppMailRelay

C#
1
star
78

Gallery.Ui

Gallery is an exercise inject visualization tool. It allows various types of inject data to be displayed, categorized, and searched by exercise participants.
TypeScript
1
star
79

ml-mismatch-descriptors

A set of descriptors used to support TEC the ML Mismatch detection tool, and other future tools.
1
star
80

REST

REST is a simple J2EE based application that is designed to exposed RDBMS database via webservices. REST software is designed to simplify integration of several RDBMS datasources to a JSON/XML for frameworks like jQuery etc.
JavaScript
1
star
81

UnitML

Python
1
star
82

Vm.Api

The Vm.Api is the backend restful API for the VM application that integrates with Player to display and manage virtual machines.
C#
1
star
83

augur-results

Augur is a toolset that helps simulate and detect drift in different types of datasets. This repo contains the results of experiments run using the toolset.
1
star
84

Blueprint.Ui

TypeScript
1
star
85

ansible-role-yaf

An ansible role for installing, configuring, and managing the YAF service.
Shell
1
star
86

GameEngine

GameEngine is a web API that serves games and challenges and also provides grading for the Gameboard platform.
C#
1
star