Skip to content

Commit

Permalink
add some basic linalg benchmarks
Browse files Browse the repository at this point in the history
fix stan installation as a third party lib
  • Loading branch information
vigsterkr committed May 25, 2018
1 parent 2afac83 commit af2ea4c
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 8 deletions.
11 changes: 7 additions & 4 deletions cmake/external/StanMath.cmake
@@ -1,9 +1,9 @@
set(STAN_STABLE_RELEASE 4b1a10bc877d941bbe0a12c198526807be27167a)

set(STAN_INCLUDE_DIR_STAN_MATH ${CMAKE_BINARY_DIR}/StanMath/src/StanMath)
set(STAN_INCLUDE_DIR_BOOST ${CMAKE_BINARY_DIR}/StanMath/src/StanMath/lib/boost_1.64.0)
set(STAN_INCLUDE_DIR_CVODES ${CMAKE_BINARY_DIR}/StanMath/src/StanMath/lib/cvodes_2.9.0/include)
set(STAN_INCLUDE_DIR_EIGEN ${CMAKE_BINARY_DIR}/StanMath/src/StanMath/lib/eigen_3.3.3)
set(STAN_INCLUDE_DIR_BOOST ${STAN_INCLUDE_DIR_STAN_MATH}/lib/boost_1.64.0)
set(STAN_INCLUDE_DIR_CVODES ${STAN_INCLUDE_DIR_STAN_MATH}/lib/cvodes_2.9.0/include)
set(STAN_INCLUDE_DIR_EIGEN ${STAN_INCLUDE_DIR_STAN_MATH}/lib/eigen_3.3.3)

include(ExternalProject)
ExternalProject_Add(
Expand All @@ -14,7 +14,10 @@ ExternalProject_Add(
GIT_TAG ${STAN_STABLE_RELEASE}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${STAN_INCLUDE_DIR_STAN_MATH}/stan ${THIRD_PARTY_INCLUDE_DIR}/stan
&& ${CMAKE_COMMAND} -E copy_directory ${STAN_INCLUDE_DIR_BOOST} ${THIRD_PARTY_INCLUDE_DIR}/stan_boost
&& ${CMAKE_COMMAND} -E copy_directory ${STAN_INCLUDE_DIR_CVODES} ${THIRD_PARTY_INCLUDE_DIR}/stan_cvodes
&& ${CMAKE_COMMAND} -E copy_directory ${STAN_INCLUDE_DIR_EIGEN} ${THIRD_PARTY_INCLUDE_DIR}/eigen
LOG_DOWNLOAD ON
)
add_dependencies(libshogun StanMath)
14 changes: 10 additions & 4 deletions src/shogun/CMakeLists.txt
Expand Up @@ -282,17 +282,21 @@ endif()
#Stan math
include(external/StanMath)

SHOGUN_INCLUDE_DIRS(SCOPE PRIVATE SYSTEM
SHOGUN_INCLUDE_DIRS(SCOPE PUBLIC SYSTEM
$<BUILD_INTERFACE:${STAN_INCLUDE_DIR_STAN_MATH}>
$<INSTALL_INTERFACE:include/shogun/third_party/stan>
)
SHOGUN_INCLUDE_DIRS(SCOPE PRIVATE SYSTEM
SHOGUN_INCLUDE_DIRS(SCOPE PUBLIC SYSTEM
$<BUILD_INTERFACE:${STAN_INCLUDE_DIR_BOOST}>
$<INSTALL_INTERFACE:include/shogun/third_party/stan_boost>
)
SHOGUN_INCLUDE_DIRS(SCOPE PRIVATE SYSTEM
SHOGUN_INCLUDE_DIRS(SCOPE PUBLIC SYSTEM
$<BUILD_INTERFACE:${STAN_INCLUDE_DIR_CVODES}>
$<INSTALL_INTERFACE:include/shogun/third_party/stan_cvodes>
)
SHOGUN_INCLUDE_DIRS(SCOPE PRIVATE SYSTEM
SHOGUN_INCLUDE_DIRS(SCOPE PUBLIC SYSTEM
$<BUILD_INTERFACE:${STAN_INCLUDE_DIR_EIGEN}>
$<INSTALL_INTERFACE:include/shogun/third_party/eigen>
)

####### LINALG
Expand Down Expand Up @@ -574,6 +578,8 @@ IF (BUILD_BENCHMARKS)
ADD_SHOGUN_BENCHMARK(features/RandomFourierDotFeatures_benchmark)
ADD_SHOGUN_BENCHMARK(features/hashed/HashedDocDotFeatures_benchmark)
ADD_SHOGUN_BENCHMARK(lib/RefCount_benchmark)
ADD_SHOGUN_BENCHMARK(mathematics/linalg/backend/eigen/BasicOps_benchmark)
ADD_SHOGUN_BENCHMARK(mathematics/linalg/backend/eigen/Misc_benchmark)
ENDIF()

#############################################
Expand Down
75 changes: 75 additions & 0 deletions src/shogun/mathematics/linalg/backend/eigen/BasicOps_benchmark.cc
@@ -0,0 +1,75 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Viktor Gal
*/

#include <benchmark/benchmark.h>

#include "shogun/mathematics/linalg/LinalgNamespace.h"

namespace shogun
{

template<typename T>
void BM_LinAlg_SGVector_scale(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
linalg::scale(v, T(12.3));
}
}

template<typename T>
void BM_LinAlg_SGVector_zero(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
linalg::zero(v);
}
}

template<typename T>
void BM_SGVector_scale(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
v.scale(T(12.3));
}
}

template<typename T>
void BM_SGVector_zero(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
v.zero();
}
}

BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_scale, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_scale, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_scale, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_scale, float64_t)->Range(8, 8<<10);

BENCHMARK_TEMPLATE(BM_SGVector_scale, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_scale, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_scale, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_scale, float64_t)->Range(8, 8<<10);

BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, float64_t)->Range(8, 8<<10);

BENCHMARK_TEMPLATE(BM_SGVector_zero, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, float64_t)->Range(8, 8<<10);


}
44 changes: 44 additions & 0 deletions src/shogun/mathematics/linalg/backend/eigen/Misc_benchmark.cc
@@ -0,0 +1,44 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Viktor Gal
*/

#include <benchmark/benchmark.h>

#include "shogun/mathematics/linalg/LinalgNamespace.h"

namespace shogun
{

template<typename T>
void BM_LinAlg_SGVector_zero(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
linalg::zero(v);
}
}

template<typename T>
void BM_SGVector_zero(benchmark::State& state)
{
for (auto _ : state)
{
SGVector<T> v(state.range(0));
v.zero();
}
}

BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_LinAlg_SGVector_zero, float64_t)->Range(8, 8<<10);

BENCHMARK_TEMPLATE(BM_SGVector_zero, int32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, int64_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, float32_t)->Range(8, 8<<10);
BENCHMARK_TEMPLATE(BM_SGVector_zero, float64_t)->Range(8, 8<<10);

}

0 comments on commit af2ea4c

Please sign in to comment.