From ab91232cf6bad3c9ff5595c6d655eb538a651f24 Mon Sep 17 00:00:00 2001 From: qijun Date: Tue, 27 Jun 2017 20:16:52 +0800 Subject: [PATCH 1/2] add cmake external project for eigen --- CMakeLists.txt | 1 + cmake/external/eigen.cmake | 20 ++++++++++++++++ paddle/framework/ddim_test.cc | 44 +++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 cmake/external/eigen.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c719d35eced2..9be75f4a7de4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ include(external/openblas) # download, build, install openblas include(external/swig) # download, build, install swig include(external/warpctc) # download, build, install warpctc include(external/any) # download libn::any +include(external/eigen) # download eigen3 include(generic) # simplify cmake module include(package) # set paddle packages diff --git a/cmake/external/eigen.cmake b/cmake/external/eigen.cmake new file mode 100644 index 0000000000000..543504a274d98 --- /dev/null +++ b/cmake/external/eigen.cmake @@ -0,0 +1,20 @@ +INCLUDE(ExternalProject) + +SET(EIGEN_SOURCE_DIR ${THIRD_PARTY_PATH}/eigen3) + +INCLUDE_DIRECTORIES(${EIGEN_SOURCE_DIR}/src/) + +ExternalProject_Add( + eigen3 + ${EXTERNAL_PROJECT_LOG_ARGS} + URL "https://bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz" + URL_MD5 "4645c66075982da6fa0bcf6b20f3e8f7" + PREFIX ${EIGEN_SOURCE_DIR} + UPDATE_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +) + +LIST(APPEND external_project_dependencies eigen3) \ No newline at end of file diff --git a/paddle/framework/ddim_test.cc b/paddle/framework/ddim_test.cc index 36eef02370e01..3e4ad840f31a3 100644 --- a/paddle/framework/ddim_test.cc +++ b/paddle/framework/ddim_test.cc @@ -1,6 +1,9 @@ #include #include +#include "eigen3/Eigen/Core" +#include "eigen3/Eigen/Dense" +#include "eigen3/unsupported/Eigen/CXX11/Tensor" #include "gtest/gtest.h" #include "paddle/framework/ddim.h" @@ -61,3 +64,44 @@ TEST(DDim, Print) { ss << ddim; EXPECT_EQ("2, 3, 4", ss.str()); } + +template +using Vec = + Eigen::TensorMap, + Eigen::Aligned>; + +template +using Matrix = + Eigen::TensorMap, + Eigen::Aligned>; + +template +void print(T* input, int size) { + for (int i = 0; i < size; i++) { + std::cout << input[i] << " "; + } + std::cout << std::endl; +} + +TEST(Eigen, start) { + int size = 4; + + float* t_a = (float*)malloc(size * sizeof(float)); + float* t_b = (float*)malloc(size * sizeof(float)); + float* t_c = (float*)malloc(size * sizeof(float)); + for (int i = 0; i < size; i++) { + t_a[i] = i; + t_b[i] = i; + } + Vec a(t_a, size); + Vec b(t_b, size); + Vec c(t_c, size); + + Eigen::DefaultDevice dd; + c.device(dd) = a + b; + print(t_c, size); + + free(t_a); + free(t_b); + free(t_c); +} From c5d9ca8617869e4d8bc12b9302c5594279ab93ad Mon Sep 17 00:00:00 2001 From: qijun Date: Tue, 27 Jun 2017 15:06:00 +0000 Subject: [PATCH 2/2] fix eigen include path --- cmake/external/eigen.cmake | 8 +++---- paddle/framework/ddim_test.cc | 44 ----------------------------------- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/cmake/external/eigen.cmake b/cmake/external/eigen.cmake index 543504a274d98..253d436bcc04d 100644 --- a/cmake/external/eigen.cmake +++ b/cmake/external/eigen.cmake @@ -2,13 +2,13 @@ INCLUDE(ExternalProject) SET(EIGEN_SOURCE_DIR ${THIRD_PARTY_PATH}/eigen3) -INCLUDE_DIRECTORIES(${EIGEN_SOURCE_DIR}/src/) +INCLUDE_DIRECTORIES(${EIGEN_SOURCE_DIR}/src/eigen3) ExternalProject_Add( eigen3 ${EXTERNAL_PROJECT_LOG_ARGS} - URL "https://bitbucket.org/eigen/eigen/get/f3a22f35b044.tar.gz" - URL_MD5 "4645c66075982da6fa0bcf6b20f3e8f7" + URL "https://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz" + URL_MD5 "1a47e78efe365a97de0c022d127607c3" PREFIX ${EIGEN_SOURCE_DIR} UPDATE_COMMAND "" CONFIGURE_COMMAND "" @@ -17,4 +17,4 @@ ExternalProject_Add( TEST_COMMAND "" ) -LIST(APPEND external_project_dependencies eigen3) \ No newline at end of file +LIST(APPEND external_project_dependencies eigen3) diff --git a/paddle/framework/ddim_test.cc b/paddle/framework/ddim_test.cc index 3e4ad840f31a3..36eef02370e01 100644 --- a/paddle/framework/ddim_test.cc +++ b/paddle/framework/ddim_test.cc @@ -1,9 +1,6 @@ #include #include -#include "eigen3/Eigen/Core" -#include "eigen3/Eigen/Dense" -#include "eigen3/unsupported/Eigen/CXX11/Tensor" #include "gtest/gtest.h" #include "paddle/framework/ddim.h" @@ -64,44 +61,3 @@ TEST(DDim, Print) { ss << ddim; EXPECT_EQ("2, 3, 4", ss.str()); } - -template -using Vec = - Eigen::TensorMap, - Eigen::Aligned>; - -template -using Matrix = - Eigen::TensorMap, - Eigen::Aligned>; - -template -void print(T* input, int size) { - for (int i = 0; i < size; i++) { - std::cout << input[i] << " "; - } - std::cout << std::endl; -} - -TEST(Eigen, start) { - int size = 4; - - float* t_a = (float*)malloc(size * sizeof(float)); - float* t_b = (float*)malloc(size * sizeof(float)); - float* t_c = (float*)malloc(size * sizeof(float)); - for (int i = 0; i < size; i++) { - t_a[i] = i; - t_b[i] = i; - } - Vec a(t_a, size); - Vec b(t_b, size); - Vec c(t_c, size); - - Eigen::DefaultDevice dd; - c.device(dd) = a + b; - print(t_c, size); - - free(t_a); - free(t_b); - free(t_c); -}