Skip to content

Commit

Permalink
Benchmark against PySTAN
Browse files Browse the repository at this point in the history
  • Loading branch information
lucieleblanc committed May 1, 2020
1 parent 8c04eab commit 42af1d2
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -2,5 +2,5 @@ build
.vscode
.*
!.travis.yml
lib
lib/*
!lib/CMakeLists.txt
7 changes: 6 additions & 1 deletion CMakeLists.txt
Expand Up @@ -58,11 +58,16 @@ if (AUTOPPL_ENABLE_TEST)
# Set directories for third-party libraries
# tests in other subdirectories require access to these as well
set(GTEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/benchmark/googletest/googletest)
set(GBENCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/benchmark)

add_subdirectory(${PROJECT_SOURCE_DIR}/test ${PROJECT_BINARY_DIR}/test)
endif()

# Configure benchmarking
if (AUTOPPL_ENABLE_BENCHMARK)
add_subdirectory(${PROJECT_SOURCE_DIR}/benchmark ${PROJECT_BINARY_DIR}/benchmark)
set(GBENCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/benchmark)
endif()

# Add lib subdirectory
add_subdirectory(${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR}/lib)

Expand Down
4 changes: 4 additions & 0 deletions benchmark/CMakeLists.txt
@@ -0,0 +1,4 @@

add_executable(normal_two_prior_distribution ${CMAKE_CURRENT_SOURCE_DIR}/normal_two_prior_distribution.cpp)
target_include_directories(normal_two_prior_distribution PRIVATE ${GBENCH_DIR}/include ${AUTOPPL_INCLUDE_DIRS})
target_link_libraries(normal_two_prior_distribution benchmark benchmark_main pthread ${AUTOPPL_LIBS})
33 changes: 33 additions & 0 deletions benchmark/normal_two_prior_distribution.cpp
@@ -0,0 +1,33 @@
#include <benchmark/benchmark.h>
#include <autoppl/autoppl.hpp>

namespace ppl {

static void BM_NormalTwoPrior(benchmark::State& state) {
std::normal_distribution n(0.0, 1.0);
std::mt19937 gen(0);
ppl::Data<double> y;

ppl::Param<double> lambda1, lambda2;
auto model = (
lambda1 |= ppl::normal(0.0, 10.0),
lambda2 |= ppl::normal(0.0, 10.0),
y |= ppl::normal(lambda1 + lambda2, 1.0)
);

for (int i = 0; i < 100; i++) {
y.observe(n(gen));
}

std::array<double, 1000> l1_storage, l2_storage;
lambda1.set_storage(l1_storage.data());
lambda2.set_storage(l2_storage.data());

for (auto _ : state) {
ppl::nuts(model, 1000, 1000, 1000);
}
}

BENCHMARK(BM_NormalTwoPrior);

} // namespace ppl
30 changes: 30 additions & 0 deletions benchmark/normal_two_prior_distribution.py
@@ -0,0 +1,30 @@
import pystan
import numpy as np

cool_code = """
data {
int N;
real y[N];
}
parameters {
real lambda1;
real lambda2;
}
transformed parameters {
real mu;
mu = lambda1 + lambda2;
}
model {
lambda1 ~ normal(0, 10);
lambda2 ~ normal(0, 10);
y ~ normal(mu, 1);
}
"""

N = 100
y = np.random.normal(size = N)
cool_dat = { 'N' : N, 'y' : y }

sm = pystan.StanModel(model_code=cool_code)
fit = sm.sampling(data=cool_dat, chains=1)
print(fit)
6 changes: 3 additions & 3 deletions lib/CMakeLists.txt
Expand Up @@ -12,7 +12,7 @@ endif()

# Build googletest
if (AUTOPPL_ENABLE_TEST)
add_library(gtest_main STATIC ${GTEST_DIR}/src/gtest-all.cc ${GTEST_DIR}/src/gtest_main.cc)
target_compile_features(gtest_main PRIVATE cxx_std_11)
target_include_directories(gtest_main PRIVATE ${GTEST_DIR}/include ${GTEST_DIR})
add_library(autoppl_gtest_main STATIC ${GTEST_DIR}/src/gtest-all.cc ${GTEST_DIR}/src/gtest_main.cc)
target_compile_features(autoppl_gtest_main PRIVATE cxx_std_11)
target_include_directories(autoppl_gtest_main PRIVATE ${GTEST_DIR}/include ${GTEST_DIR})
endif()
14 changes: 7 additions & 7 deletions test/CMakeLists.txt
Expand Up @@ -25,7 +25,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(util_unittest gcov)
endif()
target_link_libraries(util_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(util_unittest util_unittest)

######################################################
Expand All @@ -46,7 +46,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(sample_unittest gcov)
endif()
target_link_libraries(sample_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(sample_unittest sample_unittest)

######################################################
Expand All @@ -70,7 +70,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(var_unittest gcov)
endif()
target_link_libraries(var_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(var_unittest var_unittest)

######################################################
Expand All @@ -92,7 +92,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(dist_expr_unittest gcov)
endif()
target_link_libraries(dist_expr_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(dist_expr_unittest dist_expr_unittest)

######################################################
Expand All @@ -112,7 +112,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(model_expr_unittest gcov)
endif()
target_link_libraries(model_expr_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(model_expr_unittest model_expr_unittest)

######################################################
Expand All @@ -137,7 +137,7 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(algorithm_unittest gcov)
endif()
target_link_libraries(algorithm_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})

# Only on Linux: link with openblas and lapack
if (UNIX AND NOT APPLE)
Expand All @@ -164,5 +164,5 @@ if (AUTOPPL_ENABLE_TEST_COVERAGE)
target_link_libraries(expr_builder_unittest gcov)
endif()
target_link_libraries(expr_builder_unittest
gtest_main pthread ${AUTOPPL_LIBS})
autoppl_gtest_main pthread ${AUTOPPL_LIBS})
add_test(expr_builder_unittest expr_builder_unittest)

0 comments on commit 42af1d2

Please sign in to comment.