Enable WebAssembly SIMD build (#7839)

Add a build switch "--enable_wasm_simd" to enable
WebAssembly SIMD build
This commit is contained in:
Gao, Chun 2021-05-29 07:29:58 +08:00 committed by GitHub
parent 5a63904aa9
commit 4dd724ef1a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 11 deletions

View file

@ -1700,6 +1700,10 @@ if (onnxruntime_BUILD_CSHARP)
endif()
if (onnxruntime_BUILD_WEBASSEMBLY)
if (onnxruntime_ENABLE_WEBASSEMBLY_SIMD)
string(APPEND CMAKE_CXX_FLAGS " -msimd128")
endif()
if (onnxruntime_ENABLE_WEBASSEMBLY_EXCEPTION_CATCHING)
string(APPEND CMAKE_CXX_FLAGS " -s DISABLE_EXCEPTION_CATCHING=0")
endif()

View file

@ -25,9 +25,15 @@ set(mlas_common_srcs
)
if (onnxruntime_BUILD_WEBASSEMBLY)
file(GLOB_RECURSE mlas_platform_srcs
"${ONNXRUNTIME_ROOT}/core/mlas/lib/wasm/*.cpp"
)
if (onnxruntime_ENABLE_WEBASSEMBLY_SIMD)
file(GLOB_RECURSE mlas_platform_srcs
"${ONNXRUNTIME_ROOT}/core/mlas/lib/wasm_simd/*.cpp"
)
else()
file(GLOB_RECURSE mlas_platform_srcs
"${ONNXRUNTIME_ROOT}/core/mlas/lib/wasm/*.cpp"
)
endif()
elseif(MSVC)
if(onnxruntime_target_platform STREQUAL "ARM64")
set(mlas_platform_preprocess_srcs

View file

@ -60,9 +60,19 @@ else()
endif()
if (onnxruntime_ENABLE_WEBASSEMBLY_THREADS)
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasmThreaded -s USE_PTHREADS=1")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm-threaded")
if (onnxruntime_ENABLE_WEBASSEMBLY_SIMD)
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasmSimdThreaded -s USE_PTHREADS=1")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm-simd-threaded")
else()
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasmThreaded -s USE_PTHREADS=1")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm-threaded")
endif()
else()
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasm")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm")
if (onnxruntime_ENABLE_WEBASSEMBLY_SIMD)
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasmSimd")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm-simd")
else()
set_property(TARGET onnxruntime_webassembly APPEND_STRING PROPERTY LINK_FLAGS " -s EXPORT_NAME=ortWasm")
set_target_properties(onnxruntime_webassembly PROPERTIES OUTPUT_NAME "ort-wasm")
endif()
endif()

View file

@ -621,7 +621,7 @@ enum MLAS_CONV_ALGORITHM {
MlasConvAlgorithmGemmDirect,
MlasConvAlgorithmExpandThenGemm,
MlasConvAlgorithmExpandThenGemmSegmented,
#if defined(MLAS_TARGET_WASM)
#if defined(MLAS_TARGET_WASM_SCALAR)
MlasConvAlgorithmDepthwise,
#endif
};

View file

@ -17,7 +17,7 @@ Abstract:
#include "mlasi.h"
size_t
void
MLASCALL
MlasGemvFloatKernel(
const float* A,
@ -155,6 +155,4 @@ Return Value:
B += ldb;
A++;
}
return 0;
}

View file

@ -336,6 +336,7 @@ def parse_arguments():
# WebAssembly build
parser.add_argument("--build_wasm", action='store_true', help="Build for WebAssembly")
parser.add_argument("--enable_wasm_simd", action='store_true', help="Enable WebAssembly SIMD")
parser.add_argument(
"--disable_wasm_exception_catching", action='store_true',
help="Disable exception catching in WebAssembly.")
@ -740,6 +741,7 @@ def generate_build_tree(cmake_path, source_dir, build_dir, cuda_home, cudnn_home
"-Donnxruntime_ENABLE_MEMORY_PROFILE=" + ("ON" if args.enable_memory_profile else "OFF"),
"-Donnxruntime_ENABLE_CUDA_LINE_NUMBER_INFO=" + ("ON" if args.enable_cuda_line_info else "OFF"),
"-Donnxruntime_BUILD_WEBASSEMBLY=" + ("ON" if args.build_wasm else "OFF"),
"-Donnxruntime_ENABLE_WEBASSEMBLY_SIMD=" + ("ON" if args.enable_wasm_simd else "OFF"),
"-Donnxruntime_ENABLE_WEBASSEMBLY_EXCEPTION_CATCHING=" + ("OFF" if args.disable_wasm_exception_catching
else "ON"),
"-Donnxruntime_ENABLE_WEBASSEMBLY_THREADS=" + ("ON" if args.enable_wasm_threads else "OFF"),