diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c719d35eced2420b7891dbaf507ba07cd78baf8..9be75f4a7de4c6ecac461f9dcb62ab10e79cee6b 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 0000000000000000000000000000000000000000..543504a274d98b5dee31ceeffd810594f050c2ac --- /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 36eef02370e0196c2af2c05f49176b70ce69235a..3e4ad840f31a35ba2d76cecd233672bc420f9b47 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); +}