Skip to content

Commit 6c21b08

Browse files
authored
check loongarch lasx and enable (Tencent#4820)
1 parent 43aba6b commit 6c21b08

File tree

7 files changed

+46
-2
lines changed

7 files changed

+46
-2
lines changed

.ci/test-coverage.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ jobs:
891891
run: |
892892
export LOONGARCH64_ROOT_PATH=${{ci.workspace}}/cross-tools
893893
mkdir build && cd build
894-
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/loongarch64-unknown-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_COVERAGE=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_LSX=ON -DNCNN_OPENMP=${{matrix.OPENMP}} -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON ..
894+
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/loongarch64-unknown-linux-gnu.toolchain.cmake -DCMAKE_BUILD_TYPE=debug -DNCNN_COVERAGE=ON -DNCNN_RUNTIME_CPU=OFF -DNCNN_LSX=ON -DNCNN_LASX=OFF -DNCNN_OPENMP=${{matrix.OPENMP}} -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF -DNCNN_BUILD_TESTS=ON ..
895895
cmake --build . -j $(nproc)
896896
- name: test
897897
run: |

CMakeLists.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,21 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips)")
303303
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(loongarch64|loongarch32)")
304304
set(NCNN_TARGET_ARCH loongarch)
305305

306-
check_cxx_compiler_flag("-mlsx" NCNN_COMPILER_SUPPORT_LOONGARCH_LSX)
306+
set(CMAKE_REQUIRED_FLAGS "-mlsx")
307+
check_cxx_source_compiles("#include <lsxintrin.h>\nint main() { __m128 _s, _a, _b, _c; _s = __lsx_vfmadd_s(_a, _b, _c); return 0; }" NCNN_COMPILER_SUPPORT_LOONGARCH_LSX)
308+
309+
set(CMAKE_REQUIRED_FLAGS "-mlasx")
310+
check_cxx_source_compiles("#include <lasxintrin.h>\nint main() { __m256 _s, _a, _b, _c; _s = __lasx_xvfmadd_s(_a, _b, _c); return 0; }" NCNN_COMPILER_SUPPORT_LOONGARCH_LASX)
311+
312+
unset(CMAKE_REQUIRED_FLAGS)
307313

308314
if(NCNN_COMPILER_SUPPORT_LOONGARCH_LSX)
309315
option(NCNN_LSX "optimize loongarch platform with lsx extension" ON)
316+
if(NCNN_COMPILER_SUPPORT_LOONGARCH_LASX)
317+
option(NCNN_LASX "optimize loongarch platform with lasx extension" ON)
318+
else()
319+
message(WARNING "The compiler does not support lasx extension. NCNN_LASX will be OFF.")
320+
endif()
310321
else()
311322
message(WARNING "The compiler does not support lsx extension. NCNN_LSX will be OFF.")
312323
endif()

cmake/ncnn_add_layer.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,9 @@ macro(ncnn_add_layer class)
273273
endif()
274274

275275
if(NCNN_TARGET_ARCH STREQUAL "loongarch")
276+
if(NCNN_RUNTIME_CPU AND NCNN_LASX)
277+
ncnn_add_arch_opt_layer(${class} lasx "-mlasx -mlsx")
278+
endif()
276279
if(NCNN_RUNTIME_CPU AND NCNN_LSX)
277280
ncnn_add_arch_opt_layer(${class} lsx "-mlsx")
278281
endif()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
# must define SRC DST CLASS
3+
4+
file(READ ${SRC} source_data)
5+
6+
# replace
7+
string(TOUPPER ${CLASS} CLASS_UPPER)
8+
string(TOLOWER ${CLASS} CLASS_LOWER)
9+
10+
string(REGEX REPLACE "LAYER_${CLASS_UPPER}_LOONGARCH_H" "LAYER_${CLASS_UPPER}_LOONGARCH_LASX_H" source_data "${source_data}")
11+
string(REGEX REPLACE "${CLASS}_loongarch" "${CLASS}_loongarch_lasx" source_data "${source_data}")
12+
string(REGEX REPLACE "#include \"${CLASS_LOWER}_loongarch.h\"" "#include \"${CLASS_LOWER}_loongarch_lasx.h\"" source_data "${source_data}")
13+
14+
file(WRITE ${DST} "${source_data}")

src/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,9 @@ endif()
484484
if(NCNN_TARGET_ARCH STREQUAL "loongarch")
485485
if(NOT NCNN_RUNTIME_CPU AND NCNN_LSX)
486486
target_compile_options(ncnn PRIVATE -mlsx)
487+
if(NCNN_LASX)
488+
target_compile_options(ncnn PRIVATE -mlasx)
489+
endif()
487490
endif()
488491
endif()
489492

src/layer.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,13 @@ Layer* create_layer(int index)
253253
}
254254
else
255255
#endif // NCNN_RUNTIME_CPU && NCNN_AVX
256+
#if NCNN_RUNTIME_CPU && NCNN_LASX
257+
if (ncnn::cpu_support_loongarch_lasx())
258+
{
259+
layer_creator = layer_registry_lasx[index].creator;
260+
}
261+
else
262+
#endif // NCNN_RUNTIME_CPU && NCNN_LASX
256263
#if NCNN_RUNTIME_CPU && NCNN_LSX
257264
if (ncnn::cpu_support_loongarch_lsx())
258265
{

src/layer_registry.h.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ static const layer_registry_entry layer_registry_msa[] = {
2828
};
2929
#endif // NCNN_RUNTIME_CPU && NCNN_MSA
3030

31+
#if NCNN_RUNTIME_CPU && NCNN_LASX
32+
static const layer_registry_entry layer_registry_lasx[] = {
33+
@layer_registry_lasx@
34+
};
35+
#endif // NCNN_RUNTIME_CPU && NCNN_LASX
36+
3137
#if NCNN_RUNTIME_CPU && NCNN_LSX
3238
static const layer_registry_entry layer_registry_lsx[] = {
3339
@layer_registry_lsx@

0 commit comments

Comments
 (0)