Skip to content

Commit

Permalink
Merge pull request #1 from CExA-project/tentative-ci
Browse files Browse the repository at this point in the history
Tentative ci
  • Loading branch information
nestordemeure authored Dec 13, 2023
2 parents 39a6d6d + 5cb488b commit 0d71c4a
Show file tree
Hide file tree
Showing 6 changed files with 205 additions and 0 deletions.
35 changes: 35 additions & 0 deletions .github/workflows/cmake-single-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# This starter workflow is for a CMake project running on a single platform. There is a different starter workflow if you need cross-platform coverage.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-multi-platform.yml
name: CMake on a single platform

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
build:
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
# You can convert this to a matrix build if you need cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: cmake -B ${{github.workspace}}/build --preset develop

- name: Build
# Build your program with the given configuration
run: cmake --build ${{github.workspace}}/build

# - name: Test
# working-directory: ${{github.workspace}}/build
# # Execute tests defined by the CMake configuration.
# # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
# run: ctest -C ${{env.BUILD_TYPE}}

17 changes: 17 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,30 @@ option(SHAMAN_ENABLE_EXAMPLES "Whether or not Shaman examples are built" OFF)
option(SHAMAN_ENABLE_TAGGED_ERROR "Whether or not Shaman uses tagged error to locate the sources of error" OFF)
option(SHAMAN_ENABLE_UNSTABLE_BRANCH "Whether or not Shaman detects and counts unstable branches" OFF)
option(SHAMAN_DISABLE "Use to disable shaman and use traditional types instead" OFF)
option(SHAMAN_FETCH_TPLS "Automatically gets external dependencies" OFF)

# Introduce variables:
# * CMAKE_INSTALL_LIBDIR
# * CMAKE_INSTALL_BINDIR
# * CMAKE_INSTALL_INCLUDEDIR
include(GNUInstallDirs)

if (SHAMAN_FETCH_TPLS)
include(FetchContent)
FetchContent_Declare(
GTest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.14.0
OVERRIDE_FIND_PACKAGE
)
FetchContent_Declare(
Kokkos
GIT_REPOSITORY https://github.com/kokkos/kokkos
GIT_TAG 4.2.00
OVERRIDE_FIND_PACKAGE
)
endif (SHAMAN_FETCH_TPLS)

if (SHAMAN_ENABLE_TESTS)
enable_testing()
SET(SHAMAN_EXAMPLES_TESTS ON)
Expand Down
78 changes: 78 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "all",
"displayName": "All Config",
"description": "Default build using Ninja generator",
"cacheVariables": {
"SHAMAN_ENABLE_EXAMPLES": "ON"
}
},
{
"name": "download",
"cacheVariables": {
"SHAMAN_FETCH_TPLS": "ON"
}
},
{
"name": "develop",
"inherits": ["all", "download"]
}
],
"buildPresets": [
{
"name": "all",
"configurePreset": "all"
},
{
"name": "develop",
"configurePreset": "develop"
}
],
"testPresets": [
{
"name": "all",
"configurePreset": "all",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"workflowPresets": [
{
"name": "all",
"steps": [
{
"type": "configure",
"name": "all"
},
{
"type": "build",
"name": "all"
},
{
"type": "test",
"name": "all"
}
]
},
{
"name": "develop",
"steps": [
{
"type": "configure",
"name": "develop"
},
{
"type": "build",
"name": "develop"
}
]
}
]
}
1 change: 1 addition & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
add_subdirectory(schrodinger)
add_subdirectory(cadna)
add_subdirectory(performances)
add_subdirectory(kokkos)
5 changes: 5 additions & 0 deletions examples/kokkos/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
find_package(Kokkos REQUIRED)

add_executable(kokkos_simple simple_example.cpp)
#target_link_libraries(kokkos_simple PUBLIC shaman)
target_link_libraries(kokkos_simple PUBLIC Kokkos::kokkos)
69 changes: 69 additions & 0 deletions examples/kokkos/simple_example.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//@HEADER
// ************************************************************************
//
// Kokkos v. 4.0
// Copyright (2022) National Technology & Engineering
// Solutions of Sandia, LLC (NTESS).
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions.
// See https://kokkos.org/LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//@HEADER

#include <Kokkos_Core.hpp>
#include <cstdio>

//
// First reduction (parallel_reduce) example:
// 1. Start up Kokkos
// 2. Execute a parallel_reduce loop in the default execution space,
// using a C++11 lambda to define the loop body
// 3. Shut down Kokkos
//
// This example only builds if C++11 is enabled. Compare this example
// to 02_simple_reduce, which uses a functor to define the loop body
// of the parallel_reduce.
//

int main(int argc, char* argv[]) {
Kokkos::initialize(argc, argv);
const int n = 10;

// Compute the sum of squares of integers from 0 to n-1, in
// parallel, using Kokkos. This time, use a lambda instead of a
// functor. The lambda takes the same arguments as the functor's
// operator().
int sum = 0;
// The KOKKOS_LAMBDA macro replaces the capture-by-value clause [=].
// It also handles any other syntax needed for CUDA.
// We also need to protect the usage of a lambda against compiling
// with a backend which doesn't support it (i.e. Cuda 6.5/7.0).
#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA)
Kokkos::parallel_reduce(
n, KOKKOS_LAMBDA(const int i, int& lsum) { lsum += i * i; }, sum);
#endif
printf(
"Sum of squares of integers from 0 to %i, "
"computed in parallel, is %i\n",
n - 1, sum);

// Compare to a sequential loop.
int seqSum = 0;
for (int i = 0; i < n; ++i) {
seqSum += i * i;
}
printf(
"Sum of squares of integers from 0 to %i, "
"computed sequentially, is %i\n",
n - 1, seqSum);
Kokkos::finalize();
#if defined(KOKKOS_ENABLE_CXX11_DISPATCH_LAMBDA)
return (sum == seqSum) ? 0 : -1;
#else
return 0;
#endif
}

0 comments on commit 0d71c4a

Please sign in to comment.