diff --git a/CMakeLists.txt b/CMakeLists.txt
index d303c58865c77eaaa4873a7f4a4a09cfcbf1985e..4c080f8973a1b244344f26c52f792380805611a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,4 +25,11 @@ if (${CMAKE_BINARY_DIR} MATCHES "^${CMAKE_SOURCE_DIR}")
 endif()
 
 project (Pastis)
+
+list(APPEND CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -O3)
+
+add_subdirectory(${CMAKE_SOURCE_DIR}/packages/kokkos)
+include_directories(${Kokkos_INCLUDE_DIRS_RET})
+
 add_executable(pastis main.cpp)
+target_link_libraries(pastis kokkos)
diff --git a/main.cpp b/main.cpp
index 7186e0b0142ebe52f244845efc1e350000f6f7d2..75a370db29ee67b23bf84bf218e2f2bca9f2b607 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,7 +1,46 @@
 #include <iostream>
+#include <Kokkos_Core.hpp>
 
-int main(int argc, char **argv)
+int main(int argc, char *argv[])
 {
   std::cout << "It's pastis time!\n";
-  return 0;
+  std::cout << "-----------------\n";
+
+  Kokkos::initialize(argc, argv);
+  Kokkos::DefaultExecutionSpace::print_configuration(std::cout);
+
+  if (argc < 2) {
+    fprintf(stderr, "Usage: %s [<kokkos_options>] <size>\n", argv[0]);
+    Kokkos::finalize();
+    exit(1);
+  }
+
+  const long n = strtol(argv[1], NULL, 10);
+  std::cout << "Number of even integers from 0 to " << n - 1 << '\n';
+
+  Kokkos::Timer timer;
+  timer.reset();
+
+    // Compute the number of even integers from 0 to n-1, in parallel.
+  long count = 0;
+  Kokkos::parallel_reduce(n, KOKKOS_LAMBDA (const long i, long& lcount) {
+    lcount += (i % 2) == 0;
+  }, count);
+
+  double count_time = timer.seconds();
+  std::cout << "  Parallel: " << count << " " << count_time << '\n';
+
+  timer.reset();
+
+  // Compare to a sequential loop.
+  long seq_count = 0;
+  for (long i = 0; i < n; ++i) {
+    seq_count += (i % 2) == 0;
+  }
+
+  count_time = timer.seconds();
+  std::cout << "Sequential: " << seq_count << ' ' <<  count_time << '\n';
+  Kokkos::finalize();
+
+  return (count == seq_count) ? 0 : -1;
 }