Skip to content

Commit

Permalink
Squashed 'thirdParty/mallocMC/' changes from e2533d1410..739236e9b4
Browse files Browse the repository at this point in the history
739236e9b4 creating a single unit test executable if CUDA version is 10.2 or higher
6cc52008a3 moved test main into separate library
d15d8b8f54 preventing nvcc from swallowing catch2 header for generating main()
fef23d6787 simplified specifying workdivs in 2/3D case
b2c6a09b74 removed quotes around compile options
476d08a745 renamed devAllocatorStorage into devAllocatorBuffer, since it's a buffer
ec05ebd90a made the AlpakaAcc type a template parameter of DeviceAllocator's and AllocatorHandleImpl's methods instead of the classes themselves
bd15540238 * dropped support for HCC * rearranged CUDA_ARCH and HIP macros as requested by psychocoderHPC
4aa77ae193 building tests as well
6e6accef39 fixed printf format specifiers
cd97fe83c8 Explicitely specifying return types of alpaka min/max via decltype
15218c0010 * dropped all ReservePoolPolicies * reserving initial memory pool via alpaka buffer (which depends on the device with which the Allocator is constructed)
28f7bddd0d transformed dimensions.cpp tests into Catch2 unit tests
a143ca8394 removed example2 from the examples target
f0932e8040 * fixed specification of error encountered with alpaka min/max * applying fix only for MSVC
5921f83da4 * changed accelerators in examples and verify_heap_config.hpp back to CUDA * using Malloc<> reserve pool policy everywhere
df9ccf0cf9 improved detection for when compiling with HIP device compiler
f4b653514a modified tests to also have a grid size greater than 1
d248569246 * fixed remaining atomic intrinsic in XMallocSIMD * properly detecting which GPU backends are available in alpaka * added accelerator name to test output * testing also AccCpuThreads and AccCpuOmp2Threads * added a fix in alpaka to make MSVC compile
96aac162f6 parameterizing tests with accelerator to use
3f1428352e fixed test thread block size and added static check for this
f5e90ec4f9 fixed a few warnings
7bfdc48e1c * switching to XMallocSIMD for dimensions tests * added Malloc<Acc> reservePoolPolicy, which uses SimpleCudaMalloc or SimpleMalloc depending on the used accelerator
1ded9068a4 changed alignment policies to work with size_t instead of uint32_t
3f62ab34ca allowing XMallocSIMD to compile without CUDA as well
40ed90e771 fixes for compiling with nvcc again
4b017be62f * buffer Dim does not need to be the same as Acc Dim * handling different dimensions of Acc * added a test executable * added simple test with 1-3D Acc
eb21e925f2 * integrated some changes from hipifycation in alpaka * replaced mallocMC CUDA macros by alpaka macros, removed mallocMC_prefixes.hpp * replaced all CUDA kernel invocations by alpaka kernel enqueues * removed all code that targetted CUDA < 9 * merged example02 into example01 since they are almost the same * inlined content of mallocMC_example01_config.hpp * ported kernel invocations to alpaka * replaced cuda allocation routines by alpaka * renamed .cu source files to .cpp * reworked CMakeLists.txt (removed all CUDA stuff, removed big block comments, ...) * added new ReservePoolPolicies SimpleMalloc, intended for running allocator in host memory * passing Alpaka Accelerator through almost all device functions * replaced all atomit operations by alpaka atomics * replaced all CUDA intrinsics by custom implementations in mallocMC_utils.hpp, which default to the intrinsics of the corresponding platform or a default CPU implementation * tried to #ifdef some CUDA thread sync primitives * replaced CUDA thread IDs with alpaka indices and workdivs * replaced __shared__ memory by alpaka shared allocVar * SimpleCudaMalloc and XMallocSIMD are not available, when CUDA is not available, because they are too hard to port for now * refactored thread indexing * incorporating changes from psychocoderHPC from: alpaka-group/mallocMC@dev...psychocoderHPC:topic-hip-port * added a target mallocMCIde to CMakeLists.txt, so developers can browse the code in IDEs * setting compiler warnings via a warnings target, instead of global CMAKE_CXX_FLAGS * setting include directories on targets instead of globally * removed check for CUDA compute capability, since capability 3 is required since CUDA 9 * removed cudaSetDeviceFlags, as it's not needed
a2ed3ae927 Merge pull request ComputationalRadiationPhysics#179 from bernhardmgruber/catch
8dd82718e9 added 3rd party catch.hpp and made CMake find it
67bdc1b598 Merge pull request ComputationalRadiationPhysics#176 from bernhardmgruber/addAlpaka
5dd1d036c4 switching to C++14
2bb2f3e6d9 * using alpaka from added git subtree
ea73178789 Merge commit '90bb1ebc63d8281718381494e1d91733ac79c405' as 'alpaka'
90bb1ebc63 Squashed 'alpaka/' content from commit a5a8277cd
e0be7743ea Merge pull request ComputationalRadiationPhysics#178 from psychocoderHPC/fix-travisCmakeUsage2
28b81447f2 fix used cmake version
be77c4c606 Merge pull request ComputationalRadiationPhysics#174 from psychocoderHPC/topic-updateCmakeTo3.15.0
90d2841972 update cmake to 3.15.0
7a3d1cebde Merge pull request ComputationalRadiationPhysics#172 from bernhardmgruber/format
0185438323 added CONTRIBUTING.md with instructions how to use clang-format
4a416a2eca formatting (after clang-tidy)
8aec2cbf3f using trailing return types
5661a80fc3 formatting
669443d558 * setting column limit and allowing short loops * regrouping includes
edc10db7c4 added .clang-format file
8c5a8617d1 Merge pull request ComputationalRadiationPhysics#171 from bernhardmgruber/cleaning
95c3223f2c replaced remaining typedefs by using directives
d008ddba6b added .vs and build folders to ignores
5c16da78a6 applied clang-tidy
6404efdf61 * added a custom target for mallocMC headers * added header files to projects
43754615dd Merge pull request ComputationalRadiationPhysics#169 from bernhardmgruber/cleaning
28561514df * requiring only C++11 * removed a TODO
507111408b a little modernization of the CMakeLists * using CUDA via project language instead of deprecated find_package * setting CUDA standard to have C++14 inside CUDA as well
73e21de40d * removed check that pagesize is unsigned * made pagesizes signed literals again
25e0de3459 renamed variables with 2 leading underscores
240d4ea634 Suggested during review
d37e9ed21e addressed review comments
dafc9b7940 * replaced usage of boost::mpl by static constexpr members * dropped dependency on boost
4962156bf4 some cleanup * requiring C++14 * using cstdint instead of boost/cstdint.hpp * using std::tuple instead of boost::tuple * using nullptr * using static_assert * using constexpr * adding const and static where appropriate * removed a few empty lines * replaced std::endl by \n where flush was probably not intended
e383f3cd89 Merge pull request ComputationalRadiationPhysics#170 from ax3l/topic-ciBionic
42aed7eafb Travis CI: GCC 5.5.0 + CUDA 9.1.85
36cb7f9f0c Merge pull request ComputationalRadiationPhysics#165 from sbastrakov/topic-nvccComputeCapabilityGuard
d911d0cbb9 Add a guard around COMPUTE_CAPABILITY cmake variable
eff012d664 Merge pull request ComputationalRadiationPhysics#161 from sbastrakov/topic-cudaDeviceGetArrribute
efd20bce5b Merge pull request ComputationalRadiationPhysics#164 from sbastrakov/fix-nvccComputeCapability
450c73d3a7 Choose the value for the -arch nvcc flag depending on CUDA version
ce377f18e7 Use cudaDeviceGetAttribute() for querying the compute capability

git-subtree-dir: thirdParty/mallocMC
git-subtree-split: 739236e9b44efd810f2eaad0fcf1313222a4d763
  • Loading branch information
Third Party authored and psychocoderHPC committed Jun 2, 2020
1 parent 044f2f1 commit 5ed059c
Show file tree
Hide file tree
Showing 492 changed files with 111,873 additions and 3,599 deletions.
77 changes: 77 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: DontAlign
AlignOperands: false
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBinaryOperators: All
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: AfterColon
BreakInheritanceList: AfterColon
BreakStringLiterals: true
ColumnLimit: 80
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
FixNamespaceComments: false
IncludeBlocks: Regroup
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
Language: Cpp
NamespaceIndentation: All
PointerAlignment: Middle
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: Never
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
UseTab: Never
...
3 changes: 3 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
Checks: '*,-llvm-header-guard,-fuchsia-default-arguments-declarations,-cppcoreguidelines-no-malloc,-cppcoreguidelines-owning-memory,-misc-non-private-member-variables-in-classes'
HeaderFilterRegex: '.*'
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@

*~
/nbproject
/.vs
/build
27 changes: 21 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ language: cpp

sudo: required

dist: trusty
dist: bionic

cache:
apt: true
directories:
- $HOME/.cache/cmake-3.15.0

compiler:
- gcc
Expand All @@ -11,13 +16,23 @@ env:
global:
- INSTALL_DIR=~/mylibs
- CXXFLAGS="-Werror"
- PATH: $HOME/.cache/cmake-3.15.0/bin:$PATH

install:
if [ ! -f $HOME/.cache/cmake-3.15.0/bin/cmake ]; then
wget -O cmake.sh https://cmake.org/files/v3.15/cmake-3.15.0-Linux-x86_64.sh &&
sh cmake.sh --skip-license --exclude-subdir --prefix=$HOME/.cache/cmake-3.15.0 &&
rm cmake.sh;
fi;

script:
- mkdir build_tmp && cd build_tmp
- CXX=g++-5 && CC=gcc-5
- cmake -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $TRAVIS_BUILD_DIR
- make
- make install
- make examples
- make tests

before_script:
- cat /etc/apt/sources.list
Expand All @@ -27,14 +42,14 @@ before_script:
- sudo dpkg --configure -a
- sudo apt-get install -f -qq
- sudo dpkg --get-selections | grep hold || { echo "All packages OK."; }
- sudo apt-get install -q -y cmake-data cmake
- sudo apt-get install -qq build-essential
- gcc --version && g++ --version # 4.8
- sudo apt-get install -qq build-essential g++-5
- gcc-5 --version && g++-5 --version # 5.5.0
- apt-cache search nvidia-*
- sudo apt-get install -qq nvidia-common
- sudo apt-get install -qq nvidia-cuda-dev nvidia-cuda-toolkit # 5.5
- sudo apt-get install -qq libboost-dev # 1.54.0
- sudo apt-get install -qq nvidia-cuda-dev nvidia-cuda-toolkit # 9.1.85
- sudo apt-get install -qq libboost-dev # 1.65.1
- sudo find /usr/ -name libcuda*.so
- cmake --version

after_script:
- ls -halR $INSTALL_DIR
Expand Down
167 changes: 70 additions & 97 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,114 +1,87 @@
project(mallocMC)
cmake_minimum_required(VERSION 2.8.12.2)
project(mallocMC LANGUAGES CXX)
cmake_minimum_required(VERSION 3.8)

# helper for libs and packages
set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/"
"$ENV{CUDA_ROOT}" "$ENV{BOOST_ROOT}")


################################################################################
# CMake policies
#
# Search in <PackageName>_ROOT:
# https://cmake.org/cmake/help/v3.12/policy/CMP0074.html
################################################################################
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
cmake_policy(SET CMP0074 NEW)
endif()


###############################################################################
# CUDA
###############################################################################
find_package(CUDA REQUIRED)
set(CUDA_NVCC_FLAGS "-arch=sm_20;-use_fast_math;")
set(CUDA_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CUDA_INCLUDE_DIRS})
cuda_include_directories(${CUDA_INCLUDE_DIRS})

OPTION(CUDA_OUTPUT_INTERMEDIATE_CODE "Output ptx code" OFF)
if(CUDA_OUTPUT_INTERMEDIATE_CODE)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-Xptxas;-v;--keep")
endif(CUDA_OUTPUT_INTERMEDIATE_CODE)

SET(CUDA_OPTIMIZATION_TYPE "unset" CACHE STRING "CUDA Optimization")
set_property(CACHE CUDA_OPTIMIZATION_TYPE PROPERTY STRINGS "unset;-G0;-O0;-O1;-O2;-O3")
if(NOT ${CUDA_OPTIMIZATION_TYPE} STREQUAL "unset")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};${CUDA_OPTIMIZATION_TYPE}")
# find alpaka
set(mallocMC_ALPAKA_PROVIDER "intern" CACHE STRING "Select which alpaka is used")
set_property(CACHE mallocMC_ALPAKA_PROVIDER PROPERTY STRINGS "intern;extern")
mark_as_advanced(mallocMC_ALPAKA_PROVIDER)
if(${mallocMC_ALPAKA_PROVIDER} STREQUAL "intern")
set(alpaka_BUILD_EXAMPLES OFF)
set(BUILD_TESTING OFF)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/alpaka ${CMAKE_BINARY_DIR}/alpaka)
else()
find_package(alpaka HINTS $ENV{ALPAKA_ROOT})
endif()

if(NOT TARGET alpaka::alpaka)
message(FATAL "Required mallocMC dependency alpaka could not be found!")
endif()

###############################################################################
# Boost
###############################################################################
find_package(Boost 1.48.0 REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
set(LIBS ${LIBS} ${Boost_LIBRARIES})

# nvcc + boost 1.55 work around
if(Boost_VERSION EQUAL 105500)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} \"-DBOOST_NOINLINE=__attribute__((noinline))\" ")
endif(Boost_VERSION EQUAL 105500)
# Catch2
set(mallocMC_CATCH2_PROVIDER "intern" CACHE STRING "Select which Catch2 is used")
set_property(CACHE mallocMC_CATCH2_PROVIDER PROPERTY STRINGS "intern;extern")
mark_as_advanced(mallocMC_CATCH2_PROVIDER)
if(${mallocMC_CATCH2_PROVIDER} STREQUAL "intern")
add_library(Catch2::Catch2 INTERFACE IMPORTED)
target_include_directories(Catch2::Catch2 INTERFACE ${CMAKE_CURRENT_LIST_DIR}/thirdParty/catch2/include)
else()
find_package(Catch2 CONFIG REQUIRED)
endif()

# for installation, just copy include folder to install folder
install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/include/."
DESTINATION include
)

################################################################################
# Warnings
################################################################################
# GNU
# warnings
add_library(warnings INTERFACE)
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
# new warning in gcc 4.8 (flag ignored in previous version)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
# ICC
target_compile_options(warnings INTERFACE -Wall -Wshadow -Wno-unknown-pragmas -Wextra -Wno-unused-parameter -Wno-unused-local-typedefs)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_NO_VARIADIC_TEMPLATES")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_NO_CXX11_VARIADIC_TEMPLATES")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_NO_FENV_H")
# PGI
target_compile_options(warnings INTERFACE -Wall -Wshadow)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "PGI")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minform=inform")
target_compile_options(warnings INTERFACE -Minform=inform)
endif()


###############################################################################
# Installation
###############################################################################

# copy include folder to install folder
INSTALL(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/include/."
DESTINATION include
PATTERN ".git" EXCLUDE
PATTERN "mallocMC_config.hpp" EXCLUDE
)


###############################################################################
# Executables
###############################################################################
add_custom_target(examples DEPENDS mallocMC_Example01 mallocMC_Example02 mallocMC_Example03 VerifyHeap)

cuda_add_executable(mallocMC_Example01
EXCLUDE_FROM_ALL
examples/mallocMC_example01.cu )
cuda_add_executable(mallocMC_Example02
EXCLUDE_FROM_ALL
examples/mallocMC_example02.cu )
cuda_add_executable(mallocMC_Example03
EXCLUDE_FROM_ALL
examples/mallocMC_example03.cu )
cuda_add_executable(VerifyHeap
EXCLUDE_FROM_ALL
tests/verify_heap.cu )
file(GLOB_RECURSE headers src/include/**)
add_custom_target(mallocMCIde SOURCES ${headers}) # create a target with the header files for IDE projects
source_group(TREE ${CMAKE_CURRENT_LIST_DIR}/src/include FILES ${headers})

alpaka_add_executable(mallocMC_Example01 EXCLUDE_FROM_ALL examples/mallocMC_example01.cpp)
target_include_directories(mallocMC_Example01 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(mallocMC_Example01 PUBLIC alpaka::alpaka warnings)

alpaka_add_executable(mallocMC_Example03 EXCLUDE_FROM_ALL examples/mallocMC_example03.cpp)
target_include_directories(mallocMC_Example03 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(mallocMC_Example03 PUBLIC alpaka::alpaka warnings)

alpaka_add_executable(VerifyHeap EXCLUDE_FROM_ALL tests/verify_heap.cpp tests/verify_heap_config.hpp)
target_include_directories(VerifyHeap PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(VerifyHeap PUBLIC alpaka::alpaka warnings)

if (CUDA_VERSION VERSION_LESS 10.2) # TODO(bgruber): I do not know exactly where it breaks. 9.1 does not work, 10.2 works
# the catch2 main needs to be in a non-CUDA file before CUDA 10.2, because nvcc fails to compile the catch2 header
# TODO: merge the test_main back into the tests exe, once CUDA 10.2 is the minimum version
add_library(tests_main EXCLUDE_FROM_ALL tests/main.cpp)
target_include_directories(tests_main PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(tests_main PUBLIC Catch2::Catch2 warnings)

alpaka_add_executable(tests EXCLUDE_FROM_ALL tests/dimensions.cpp)
target_include_directories(tests PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(tests PUBLIC tests_main alpaka::alpaka Catch2::Catch2 warnings)
else()
alpaka_add_executable(tests EXCLUDE_FROM_ALL tests/main.cpp tests/dimensions.cpp)
target_include_directories(tests PUBLIC ${CMAKE_CURRENT_LIST_DIR}/src/include)
target_link_libraries(tests PUBLIC alpaka::alpaka Catch2::Catch2 warnings)
endif()

target_link_libraries(mallocMC_Example01 ${LIBS})
target_link_libraries(mallocMC_Example02 ${LIBS})
target_link_libraries(mallocMC_Example03 ${LIBS})
target_link_libraries(VerifyHeap ${LIBS})
add_custom_target(examples DEPENDS mallocMC_Example01 mallocMC_Example03 VerifyHeap)
15 changes: 15 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Contributing

## Formatting

Please format your code before before opening pull requests using clang-format and the .clang-format file placed in the repository root.

### Visual Studio and CLion
Suport for clang-format is built-in since Visual Studio 2017 15.7 and CLion 2019.1.
The .clang-format file in the repository will be automatically detected and formatting is done as you type, or triggered when pressing the format hotkey.

### Bash
First install clang-format. Instructions therefore can be found on the web. To format you can run this command in bash:
```
find -iname *.cu -o -iname *.hpp | xargs clang-format-10 -i
```
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ mallocMC is header-only, but requires a few other C++ libraries to be
available. Our installation notes can be found in [INSTALL.md](INSTALL.md).


Contributing
------------

Rules for contributions are found in [CONTRIBUTING.md](CONTRIBUTING.md).

On the ScatterAlloc Algorithm
-----------------------------

Expand Down
Loading

0 comments on commit 5ed059c

Please sign in to comment.