未验证 提交 332da133 编写于 作者: W Wilber 提交者: GitHub

Support mips arch (#29903)

* Support MIPS arch.
上级 eab0b60e
...@@ -170,6 +170,7 @@ option(WITH_XPU_BKCL "Compile PaddlePaddle with BAIDU KUNLUN XPU BKCL" OFF) ...@@ -170,6 +170,7 @@ option(WITH_XPU_BKCL "Compile PaddlePaddle with BAIDU KUNLUN XPU BKCL" OFF)
option(WITH_CRYPTO "Compile PaddlePaddle with crypto support" ON) option(WITH_CRYPTO "Compile PaddlePaddle with crypto support" ON)
option(WITH_ARM "Compile PaddlePaddle with arm support" OFF) option(WITH_ARM "Compile PaddlePaddle with arm support" OFF)
option(WITH_SW "Compile PaddlePaddle with sw support" OFF) option(WITH_SW "Compile PaddlePaddle with sw support" OFF)
option(WITH_MIPS "Compile PaddlePaddle with mips support" OFF)
option(WITH_MUSL "Compile with musl libc instead of gblic" OFF) option(WITH_MUSL "Compile with musl libc instead of gblic" OFF)
option(WITH_UNITY_BUILD "Compile with UnityBuild mode" OFF) option(WITH_UNITY_BUILD "Compile with UnityBuild mode" OFF)
...@@ -307,6 +308,11 @@ if (WITH_SW) ...@@ -307,6 +308,11 @@ if (WITH_SW)
add_definitions(-DPADDLE_WITH_SW) add_definitions(-DPADDLE_WITH_SW)
endif() endif()
if (WITH_MIPS)
set(WITH_XBYAK OFF CACHE STRING "Disable XBYAK when compiling WITH_MIPS=ON" FORCE)
add_definitions(-DPADDLE_WITH_MIPS)
endif()
set(PADDLE_PYTHON_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/python/build") set(PADDLE_PYTHON_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/python/build")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG")
......
...@@ -19,6 +19,9 @@ SET(CBLAS_SOURCE_DIR ${THIRD_PARTY_PATH}/openblas/src/extern_openblas) ...@@ -19,6 +19,9 @@ SET(CBLAS_SOURCE_DIR ${THIRD_PARTY_PATH}/openblas/src/extern_openblas)
SET(CBLAS_INSTALL_DIR ${THIRD_PARTY_PATH}/install/openblas) SET(CBLAS_INSTALL_DIR ${THIRD_PARTY_PATH}/install/openblas)
SET(CBLAS_REPOSITORY ${GIT_URL}/xianyi/OpenBLAS.git) SET(CBLAS_REPOSITORY ${GIT_URL}/xianyi/OpenBLAS.git)
SET(CBLAS_TAG v0.3.7) SET(CBLAS_TAG v0.3.7)
if(WITH_MIPS)
SET(CBLAS_TAG v0.3.13)
endif()
cache_third_party(extern_openblas cache_third_party(extern_openblas
REPOSITORY ${CBLAS_REPOSITORY} REPOSITORY ${CBLAS_REPOSITORY}
......
...@@ -183,7 +183,7 @@ set(GPU_COMMON_FLAGS ...@@ -183,7 +183,7 @@ set(GPU_COMMON_FLAGS
-Wno-error=unused-function # Warnings in Numpy Header. -Wno-error=unused-function # Warnings in Numpy Header.
-Wno-error=array-bounds # Warnings in Eigen::array -Wno-error=array-bounds # Warnings in Eigen::array
) )
if (NOT WITH_NV_JETSON AND NOT WITH_ARM AND NOT WITH_SW) if (NOT WITH_NV_JETSON AND NOT WITH_ARM AND NOT WITH_SW AND NOT WITH_MIPS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
endif() endif()
endif(NOT WIN32) endif(NOT WIN32)
......
...@@ -14,7 +14,8 @@ limitations under the License. */ ...@@ -14,7 +14,8 @@ limitations under the License. */
#pragma once #pragma once
#if !defined(PADDLE_WITH_ARM) && !defined(PADDLE_WITH_SW) #if !defined(PADDLE_WITH_ARM) && !defined(PADDLE_WITH_SW) && \
!defined(PADDLE_WITH_MIPS)
#include <immintrin.h> #include <immintrin.h>
#endif #endif
#include <cfloat> #include <cfloat>
...@@ -74,7 +75,8 @@ void call_gemm_batched(const framework::ExecutionContext& ctx, ...@@ -74,7 +75,8 @@ void call_gemm_batched(const framework::ExecutionContext& ctx,
} }
} }
#if !defined(PADDLE_WITH_ARM) && !defined(PADDLE_WITH_SW) #if !defined(PADDLE_WITH_ARM) && !defined(PADDLE_WITH_SW) && \
!defined(PADDLE_WITH_MIPS)
#define __m256x __m256 #define __m256x __m256
...@@ -114,7 +116,8 @@ inline void axpy(const T* x, T* y, size_t len, const T alpha) { ...@@ -114,7 +116,8 @@ inline void axpy(const T* x, T* y, size_t len, const T alpha) {
_mm256_add_px(_mm256_load_px(y + jjj), _mm256_add_px(_mm256_load_px(y + jjj),
_mm256_mul_px(mm_alpha, _mm256_load_px(x + jjj)))); _mm256_mul_px(mm_alpha, _mm256_load_px(x + jjj))));
} }
#elif defined(PADDLE_WITH_ARM) || defined(PADDLE_WITH_SW) #elif defined(PADDLE_WITH_ARM) || defined(PADDLE_WITH_SW) || \
defined(PADDLE_WITH_MIPS)
PADDLE_THROW(platform::errors::Unimplemented("axpy is not supported")); PADDLE_THROW(platform::errors::Unimplemented("axpy is not supported"));
#else #else
lll = len & ~SSE_CUT_LEN_MASK; lll = len & ~SSE_CUT_LEN_MASK;
...@@ -143,7 +146,8 @@ inline void axpy_noadd(const T* x, T* y, size_t len, const T alpha) { ...@@ -143,7 +146,8 @@ inline void axpy_noadd(const T* x, T* y, size_t len, const T alpha) {
for (jjj = 0; jjj < lll; jjj += AVX_STEP_SIZE) { for (jjj = 0; jjj < lll; jjj += AVX_STEP_SIZE) {
_mm256_store_px(y + jjj, _mm256_mul_px(mm_alpha, _mm256_load_px(x + jjj))); _mm256_store_px(y + jjj, _mm256_mul_px(mm_alpha, _mm256_load_px(x + jjj)));
} }
#elif defined(PADDLE_WITH_ARM) || defined(PADDLE_WITH_SW) #elif defined(PADDLE_WITH_ARM) || defined(PADDLE_WITH_SW) || \
defined(PADDLE_WITH_MIPS)
PADDLE_THROW(platform::errors::Unimplemented("axpy_noadd is not supported")); PADDLE_THROW(platform::errors::Unimplemented("axpy_noadd is not supported"));
#else #else
lll = len & ~SSE_CUT_LEN_MASK; lll = len & ~SSE_CUT_LEN_MASK;
......
...@@ -141,7 +141,7 @@ bool MayIUse(const cpu_isa_t cpu_isa) { ...@@ -141,7 +141,7 @@ bool MayIUse(const cpu_isa_t cpu_isa) {
return true; return true;
} else { } else {
#if !defined(WITH_NV_JETSON) && !defined(PADDLE_WITH_ARM) && \ #if !defined(WITH_NV_JETSON) && !defined(PADDLE_WITH_ARM) && \
!defined(PADDLE_WITH_SW) !defined(PADDLE_WITH_SW) && !defined(PADDLE_WITH_MIPS)
int reg[4]; int reg[4];
cpuid(reg, 0); cpuid(reg, 0);
int nIds = reg[0]; int nIds = reg[0];
......
...@@ -41,7 +41,7 @@ limitations under the License. */ ...@@ -41,7 +41,7 @@ limitations under the License. */
#define cpuid(reg, x) __cpuidex(reg, x, 0) #define cpuid(reg, x) __cpuidex(reg, x, 0)
#else #else
#if !defined(WITH_NV_JETSON) && !defined(PADDLE_WITH_ARM) && \ #if !defined(WITH_NV_JETSON) && !defined(PADDLE_WITH_ARM) && \
!defined(PADDLE_WITH_SW) !defined(PADDLE_WITH_SW) && !defined(PADDLE_WITH_MIPS)
#include <cpuid.h> #include <cpuid.h>
inline void cpuid(int reg[4], int x) { inline void cpuid(int reg[4], int x) {
__cpuid_count(x, 0, reg[0], reg[1], reg[2], reg[3]); __cpuid_count(x, 0, reg[0], reg[1], reg[2], reg[3]);
......
...@@ -348,7 +348,7 @@ if '${CMAKE_BUILD_TYPE}' == 'Release': ...@@ -348,7 +348,7 @@ if '${CMAKE_BUILD_TYPE}' == 'Release':
# The dynamic library compiled under aarch64 is greater than 64M, # The dynamic library compiled under aarch64 is greater than 64M,
# and an oversize error will be reported when using patchelf. # and an oversize error will be reported when using patchelf.
# The sw_64 not suppot patchelf, so we just disable that. # The sw_64 not suppot patchelf, so we just disable that.
if platform.machine() != 'aarch64' and platform.machine() != 'sw_64': if platform.machine() != 'aarch64' and platform.machine() != 'sw_64' and platform.machine() != 'mips64':
if os.system(command) != 0: if os.system(command) != 0:
raise Exception("patch ${FLUID_CORE_NAME}.%s failed, command: %s" % (ext_name, command)) raise Exception("patch ${FLUID_CORE_NAME}.%s failed, command: %s" % (ext_name, command))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册