Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_CXX_FLAGS "-O3 -march=native")

option(ENABLE_MINIAPPS "Also build the miniapps. Default: OFF." OFF)

# Get includes, which declares the `spblas` library
add_subdirectory(include)

Expand Down Expand Up @@ -89,4 +91,8 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)

add_subdirectory(examples)
add_subdirectory(test)

if (ENABLE_MINIAPPS)
add_subdirectory(miniapps)
endif()
endif()
1 change: 1 addition & 0 deletions include/spblas/vendor/onemkl_sycl/algorithms.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "gemm.hpp"
#include "spgemm_impl.hpp"
#include "spmm_impl.hpp"
#include "spmv_impl.hpp"
Expand Down
51 changes: 51 additions & 0 deletions include/spblas/vendor/onemkl_sycl/gemm.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#pragma once

#include <oneapi/mkl.hpp>

#include <spblas/detail/ranges.hpp>
#include <spblas/detail/view_inspectors.hpp>

namespace spblas {

template <matrix A, matrix B, matrix C>
requires __detail::has_mdspan_matrix_base<A> &&
__detail::has_mdspan_matrix_base<B> &&
__detail::is_matrix_instantiation_of_mdspan_v<C>
void multiply(A&& a, B&& b, C&& c) {
auto a_base = __detail::get_ultimate_base(a);
auto b_base = __detail::get_ultimate_base(a);

auto alpha_optional = __detail::get_scaling_factor(a, b);
tensor_scalar_t<A> alpha = alpha_optional.value_or(1);

sycl::queue q(sycl::cpu_selector_v);

/*
namespace oneapi::mkl::blas::row_major {
sycl::event gemm(sycl::queue &queue,
onemkl::transpose transa,
onemkl::transpose transb,
std::int64_t m,
std::int64_t n,
std::int64_t k,
Ts alpha,
const Ta *a,
std::int64_t lda,
const Tb *b,
std::int64_t ldb,
Ts beta,
Tc *c,
std::int64_t ldc,
const std::vector<sycl::event> &dependencies = {})
}
*/

oneapi::mkl::blas::row_major::gemm(
q, oneapi::mkl::transpose::nontrans, oneapi::mkl::transpose::nontrans,
__backend::shape(a)[0], __backend::shape(c)[1], __backend::shape(a)[1],
alpha, a_base.data_handle(), __backend::shape(a)[1], b_base.data_handle(),
__backend::shape(b)[1], 0, c.data_handle(), __backend::shape(c)[1])
.wait();
}

} // namespace spblas
22 changes: 22 additions & 0 deletions miniapps/CMake/miniappsConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
include(CMakeFindDependencyMacro)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")

set(miniapps_VERSION "@miniapps_VERSION@")
set(miniapps_VERSION_MAJOR "@miniapps_VERSION_MAJOR@")
set(miniapps_VERSION_MINOR "@miniapps_VERSION_MINOR@")
set(miniapps_VERSION_PATCH "@miniapps_VERSION_PATCH@")
set(miniapps_VERSION_DEVEL "@miniapps_VERSION_DEVEL@")

# blas++
if (NOT blaspp_DIR)
set(blaspp_DIR @blaspp_DIR@)
endif()
find_dependency(blaspp)

# lapack++
if (NOT lapackpp_DIR)
set(lapackpp_DIR @lapackpp_DIR@)
endif()
find_dependency(lapackpp)

include(miniapps)
11 changes: 11 additions & 0 deletions miniapps/CMake/miniappsConfigVersion.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set(PACKAGE_VERSION "@miniapps_VERSION@")

# Check whether the requested PACKAGE_FIND_VERSION is compatible
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
28 changes: 28 additions & 0 deletions miniapps/CMake/rl_build_options.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

option(BUILD_SHARED_LIBS OFF "Configure to build shared or static libraries")

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release"
CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()

set(SANITIZE_ADDRESS OFF CACHE BOOL "Add address sanitizer flags to the library")

message(STATUS "Checking for OpenMP ... ")
find_package(OpenMP COMPONENTS CXX)

set(tmp FALSE)
if (OpenMP_CXX_FOUND)
set(tmp TRUE)
endif()

set(miniapps_HAS_OpenMP ${tmp} CACHE BOOL "Set if we have a working OpenMP")

include(GNUInstallDirs)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
11 changes: 11 additions & 0 deletions miniapps/CMake/rl_config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

configure_file(CMake/miniappsConfig.cmake.in
${CMAKE_INSTALL_LIBDIR}/cmake/miniappsConfig.cmake @ONLY)

configure_file(CMake/miniappsConfigVersion.cmake.in
${CMAKE_INSTALL_LIBDIR}/cmake/miniappsConfigVersion.cmake @ONLY)

install(FILES
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/miniappsConfig.cmake
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/cmake/miniappsConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
45 changes: 45 additions & 0 deletions miniapps/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.24)

project(miniapps VERSION 0.1.0)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

option(SPBLAS_MINIAPPS_ENABLE_CQRRPT "Enable the CQRRPT miniapp. Default ON." ON)
option(SPBLAS_MINIAPPS_ENABLE_SOLVERS "Enable the solvers miniapp. Default ON." ON)

enable_testing()

include(rl_build_options)

# Find dependencies
find_package(blaspp 2024.10.26 QUIET)
if(NOT blaspp_FOUND)
FetchContent_Declare(
blaspp
GIT_REPOSITORY https://github.com/icl-utk-edu/blaspp
GIT_TAG v2024.10.26)
FetchContent_MakeAvailable(blaspp)
endif()

set(blas "auto")
set(lapack "auto")

find_package(lapackpp 2024.10.26 QUIET)
if(NOT lapackpp_FOUND)
FetchContent_Declare(
lapackpp
GIT_REPOSITORY https://github.com/icl-utk-edu/lapackpp
GIT_TAG v2024.10.26)
FetchContent_MakeAvailable(lapackpp)
endif()

# compile sources
add_subdirectory(include)

add_subdirectory(test)

# export the configuration
include(rl_config)
Empty file added miniapps/README.md
Empty file.
52 changes: 52 additions & 0 deletions miniapps/include/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
set(miniapps_libs
lapackpp
blaspp
spblas
)
if (miniapps_HAS_OpenMP)
list(APPEND miniapps_libs OpenMP::OpenMP_CXX)
endif()

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rl_config.hh.in rl_config.hh)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rl_config.hh
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/miniapps)

add_library(miniapps INTERFACE)
target_include_directories(miniapps INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

set(miniapps_cxx_opts -Wall -Wextra)
if (SANITIZE_ADDRESS)
list(APPEND miniapps_cxx_opts -fsanitize=address)
target_link_options(miniapps INTERFACE -fsanitize=address)
endif()
target_compile_options(miniapps INTERFACE ${miniapps_cxx_opts})

target_link_libraries(miniapps INTERFACE ${miniapps_libs})

install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DESTINATION include FILES_MATCHING PATTERN "*.hh"
)

install(
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
DESTINATION include FILES_MATCHING PATTERN "*.hh"
)

install(
TARGETS miniapps
EXPORT miniapps
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/miniapps
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

# install(
# EXPORT miniapps
# DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake
# EXPORT_LINK_INTERFACE_LIBRARIES
# )
Loading