diff --git a/paddle/math/MathFunctions.cpp b/paddle/math/MathFunctions.cpp index 178fce5b0a97442173a035fe85bdaddabba7da17..802a56a0d15a2ebbe6c62350832611373001ac9f 100644 --- a/paddle/math/MathFunctions.cpp +++ b/paddle/math/MathFunctions.cpp @@ -29,13 +29,20 @@ void* lapack_dso_handle = nullptr; * * note: default dynamic linked libs */ + +// The argument for stringizing operator is not macro-expanded first. +// We have to use two levels of macro to do the expansion. +// See https://gcc.gnu.org/onlinedocs/cpp/Stringizing.html +#define STR(x) #x #define DYNAMIC_LOAD_LAPACK_WRAP(__name) \ struct DynLoad__##__name { \ template \ auto operator()(Args... args) -> decltype(__name(args...)) { \ using lapack_func = decltype(__name(args...)) (*)(Args...); \ std::call_once(lapack_dso_flag, GetLapackDsoHandle, &lapack_dso_handle); \ - void* p_##__name = dlsym(lapack_dso_handle, #__name); \ + void* p_##__name = dlsym(lapack_dso_handle, STR(__name)); \ + CHECK(p_##__name) << "Cannot find symbol " << STR(__name) \ + << " in liblapack.so"; \ return reinterpret_cast(p_##__name)(args...); \ } \ } __name; // struct DynLoad__##__name @@ -51,7 +58,7 @@ void* lapack_dso_handle = nullptr; #define PADDLE_DGETRF LAPACKE_dgetrf #define PADDLE_SGETRI LAPACKE_sgetri #define PADDLE_DGETRI LAPACKE_dgetri -#endif +#endif #define LAPACK_ROUTINE_EACH(__macro) \ __macro(PADDLE_SGETRF) \ diff --git a/paddle/math/tests/test_matrixCompare.cpp b/paddle/math/tests/test_matrixCompare.cpp index 3b1b0065af38d72716194787471889e69e719b9e..782a9613d8752d1fccf1a59078cea0aaa625f815 100644 --- a/paddle/math/tests/test_matrixCompare.cpp +++ b/paddle/math/tests/test_matrixCompare.cpp @@ -237,14 +237,7 @@ TEST(Matrix, unary) { testMatrixRotate(height, width); } // inverse matrix - void** dso_handler = nullptr; - GetLapackDsoHandle(dso_handler); - if (nullptr == *dso_handler) { - LOG(WARNING) << "Failed to find liblapack.so, please specify its path " - "using LD_LIBRARY_PATH."; - } else { - testMatrixInverse(height); - } + testMatrixInverse(height); } } diff --git a/paddle/utils/DynamicLoader.cpp b/paddle/utils/DynamicLoader.cpp index 368c35e15186d4d01f939dd4e4c05e7cac3dd214..87c36eae6fbcd0564ee46b5ca0e3e22b5cf04192 100644 --- a/paddle/utils/DynamicLoader.cpp +++ b/paddle/utils/DynamicLoader.cpp @@ -52,7 +52,7 @@ static inline std::string join(const std::string& part1, static inline void GetDsoHandleFromDefaultPath(std::string& dso_path, void** dso_handle, int dynload_flags) { - VLOG(3) << "Try to find cuda library: " << dso_path + VLOG(3) << "Try to find library: " << dso_path << " from default system path."; // default search from LD_LIBRARY_PATH/DYLD_LIBRARY_PATH *dso_handle = dlopen(dso_path.c_str(), dynload_flags);