Skip to content

Commit b4ba207

Browse files
authored
more strict compiler rvv checks, drop rvv-071 support (#4094)
1 parent 0666143 commit b4ba207

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+45
-1981
lines changed

CMakeLists.txt

+9-2
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips)")
272272
set(NCNN_TARGET_ARCH mips)
273273

274274
include(CheckCXXCompilerFlag)
275+
275276
check_cxx_compiler_flag("-mmsa" NCNN_COMPILER_SUPPORT_MIPS_MSA)
276277

277278
set(CMAKE_REQUIRED_FLAGS "-mloongson-mmi -I${CMAKE_CURRENT_SOURCE_DIR}/src/layer/mips")
@@ -293,8 +294,14 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(riscv)")
293294
set(NCNN_TARGET_ARCH riscv)
294295

295296
include(CheckCXXCompilerFlag)
296-
check_cxx_compiler_flag("-march=rv64gcv" NCNN_COMPILER_SUPPORT_RVV)
297-
check_cxx_compiler_flag("-march=rv64gcv_zfh" NCNN_COMPILER_SUPPORT_RVV_FP16)
297+
298+
set(CMAKE_REQUIRED_FLAGS "-march=rv64gcv")
299+
check_cxx_source_compiles("#include <riscv_vector.h>\nint main() { vfloat32m1_t _s, _w; float _v; word_type vl; _s = vfmacc_vf_f32m1(_s, _v, _w, vl); return 0; }" NCNN_COMPILER_SUPPORT_RVV)
300+
301+
set(CMAKE_REQUIRED_FLAGS "-march=rv64gcv_zfh")
302+
check_cxx_source_compiles("#include <riscv_vector.h>\nint main() { vfloat16m1_t _s, _w; __fp16 _v; word_type vl; _s = vfmacc_vf_f16m1(_s, _v, _w, vl); return 0; }" NCNN_COMPILER_SUPPORT_RVV_FP16)
303+
304+
unset(CMAKE_REQUIRED_FLAGS)
298305

299306
if(NCNN_COMPILER_SUPPORT_RVV)
300307
option(NCNN_RVV "optimize risc-v platform with v extension" ON)

cmake/ncnn_check_rvv_vfredusum.cmake

+36-43
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,45 @@
11
include(CheckCXXSourceCompiles)
2-
include(CheckIncludeFile)
32

43
set(TEMP_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
54
set(CMAKE_REQUIRED_FLAGS "-march=rv64gcv")
65

7-
if(NOT C906)
8-
check_include_file(riscv_vector.h NCNN_RVV_COMPILER_SUPPORT_INTRINSIC)
9-
endif()
10-
11-
if(NCNN_RVV_COMPILER_SUPPORT_INTRINSIC)
12-
check_cxx_source_compiles("
13-
#include <riscv_vector.h>
14-
int main(void)
15-
{
16-
float in1[4] = {-1.f,0.f,+1.f,2.f};
17-
float out1=0;
18-
word_type vl = vsetvl_e32m8(4);
19-
vfloat32m8_t _add = vle32_v_f32m8(in1,vl);
20-
vfloat32m1_t _sum = vfmv_s_f_f32m1(vundefined_f32m1(),out1,vl);
21-
_sum = vfredsum_vs_f32m8_f32m1(_sum, _add, _sum, vl);
22-
out1 = vfmv_f_s_f32m1_f32(_sum);
23-
return 0;
24-
}
25-
" NCNN_COMPILER_USE_VFREDSUM)
26-
check_cxx_source_compiles("
27-
#include <riscv_vector.h>
28-
int main(void)
29-
{
30-
float in1[4] = {-1.f,0.f,+1.f,2.f};
31-
float out1=0;
32-
word_type vl = vsetvl_e32m8(4);
33-
vfloat32m8_t _add = vle32_v_f32m8(in1,vl);
34-
vfloat32m1_t _sum = vfmv_s_f_f32m1(vundefined_f32m1(),out1,vl);
35-
_sum = vfredusum_vs_f32m8_f32m1(_sum, _add, _sum, vl);
36-
out1 = vfmv_f_s_f32m1_f32(_sum);
37-
return 0;
38-
};
39-
" NCNN_COMPILER_USE_VFREDUSUM)
6+
check_cxx_source_compiles("
7+
#include <riscv_vector.h>
8+
int main(void)
9+
{
10+
float in1[4] = {-1.f,0.f,+1.f,2.f};
11+
float out1=0;
12+
word_type vl = vsetvl_e32m8(4);
13+
vfloat32m8_t _add = vle32_v_f32m8(in1,vl);
14+
vfloat32m1_t _sum = vfmv_s_f_f32m1(vundefined_f32m1(),out1,vl);
15+
_sum = vfredsum_vs_f32m8_f32m1(_sum, _add, _sum, vl);
16+
out1 = vfmv_f_s_f32m1_f32(_sum);
17+
return 0;
18+
}
19+
" NCNN_COMPILER_USE_VFREDSUM)
20+
check_cxx_source_compiles("
21+
#include <riscv_vector.h>
22+
int main(void)
23+
{
24+
float in1[4] = {-1.f,0.f,+1.f,2.f};
25+
float out1=0;
26+
word_type vl = vsetvl_e32m8(4);
27+
vfloat32m8_t _add = vle32_v_f32m8(in1,vl);
28+
vfloat32m1_t _sum = vfmv_s_f_f32m1(vundefined_f32m1(),out1,vl);
29+
_sum = vfredusum_vs_f32m8_f32m1(_sum, _add, _sum, vl);
30+
out1 = vfmv_f_s_f32m1_f32(_sum);
31+
return 0;
32+
};
33+
" NCNN_COMPILER_USE_VFREDUSUM)
4034

41-
if(NCNN_COMPILER_USE_VFREDSUM AND NOT NCNN_COMPILER_USE_VFREDUSUM)
42-
message(WARNING "The compiler uses vfredsum. Upgrading your toolchain is strongly recommended.")
43-
foreach(LMUL 1 2 4 8)
44-
add_definitions(-Dvfredusum_vs_f32m${LMUL}_f32m1=vfredsum_vs_f32m${LMUL}_f32m1)
45-
if(NCNN_COMPILER_SUPPORT_RVV_FP16)
46-
add_definitions(-Dvfredusum_vs_f16m${LMUL}_f16m1=vfredsum_vs_f16m${LMUL}_f16m1)
47-
endif()
48-
endforeach()
49-
endif()
35+
if(NCNN_COMPILER_USE_VFREDSUM AND NOT NCNN_COMPILER_USE_VFREDUSUM)
36+
message(WARNING "The compiler uses vfredsum. Upgrading your toolchain is strongly recommended.")
37+
foreach(LMUL 1 2 4 8)
38+
add_definitions(-Dvfredusum_vs_f32m${LMUL}_f32m1=vfredsum_vs_f32m${LMUL}_f32m1)
39+
if(NCNN_COMPILER_SUPPORT_RVV_FP16)
40+
add_definitions(-Dvfredusum_vs_f16m${LMUL}_f16m1=vfredsum_vs_f16m${LMUL}_f16m1)
41+
endif()
42+
endforeach()
5043
endif()
5144

5245
set(CMAKE_REQUIRED_FLAGS ${TEMP_CMAKE_REQUIRED_FLAGS})

src/layer/riscv/absval_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "absval_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319

2420
static inline vfloat32m8_t vfabs_v_f32m8_absval(vfloat32m8_t op1, size_t vl)
2521
{

src/layer/riscv/binaryop_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@
2020
#include <math.h>
2121

2222
#if __riscv_vector
23-
#ifdef RVV_SPEC_0_7
24-
#include "riscv_v_071_fix.h"
25-
#else
2623
#include <riscv_vector.h>
27-
#endif
2824
#include "rvv_mathfun.h"
2925
#include "rvv_mathfun_fp16s.h"
3026
#endif // __riscv_vector

src/layer/riscv/cast_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "cast_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
namespace ncnn {

src/layer/riscv/clip_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "clip_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#include "rvv_mathfun.h"
2420
#include "rvv_mathfun_fp16s.h"
2521
#endif // __riscv_vector

src/layer/riscv/concat_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "concat_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
#include "riscv_usability.h"

src/layer/riscv/convolution1d_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "convolution1d_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
#include "riscv_activation.h"

src/layer/riscv/convolution_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@
1919
#include "layer_type.h"
2020

2121
#if __riscv_vector
22-
#ifdef RVV_SPEC_0_7
23-
#include "riscv_v_071_fix.h"
24-
#else
2522
#include <riscv_vector.h>
26-
#endif
2723
#endif // __riscv_vector
2824

2925
#include "riscv_activation.h"

src/layer/riscv/convolutiondepthwise_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818
#include "layer_type.h"
1919

2020
#if __riscv_vector
21-
#ifdef RVV_SPEC_0_7
22-
#include "riscv_v_071_fix.h"
23-
#else
2421
#include <riscv_vector.h>
25-
#endif
2622
#endif // __riscv_vector
2723

2824
#include "riscv_activation.h"

src/layer/riscv/crop_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "crop_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
#include "riscv_usability.h"

src/layer/riscv/deconvolution_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@
1717
#include "layer_type.h"
1818

1919
#if __riscv_vector
20-
#ifdef RVV_SPEC_0_7
21-
#include "riscv_v_071_fix.h"
22-
#else
2320
#include <riscv_vector.h>
24-
#endif
2521
#endif // __riscv_vector
2622

2723
#include "riscv_activation.h"

src/layer/riscv/deconvolutiondepthwise_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@
1717
#include "layer_type.h"
1818

1919
#if __riscv_vector
20-
#ifdef RVV_SPEC_0_7
21-
#include "riscv_v_071_fix.h"
22-
#else
2320
#include <riscv_vector.h>
24-
#endif
2521
#endif // __riscv_vector
2622

2723
#include "riscv_activation.h"

src/layer/riscv/dropout_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818
#include "dropout_riscv.h"
1919

2020
#if __riscv_vector
21-
#ifdef RVV_SPEC_0_7
22-
#include "riscv_v_071_fix.h"
23-
#else
2421
#include <riscv_vector.h>
25-
#endif
2622
#endif // __riscv_vector
2723

2824
namespace ncnn {

src/layer/riscv/flatten_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "flatten_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
#include "riscv_usability.h"

src/layer/riscv/gelu_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "gelu_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#include "rvv_mathfun.h"
2420
#endif // __riscv_vector
2521

src/layer/riscv/gru_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "gru_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
namespace ncnn {

src/layer/riscv/hardsigmoid_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818
#include "hardsigmoid_riscv.h"
1919

2020
#if __riscv_vector
21-
#ifdef RVV_SPEC_0_7
22-
#include "riscv_v_071_fix.h"
23-
#else
2421
#include <riscv_vector.h>
25-
#endif
2622
#endif // __riscv_vector
2723

2824
namespace ncnn {

src/layer/riscv/hardswish_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818
#include "hardswish_riscv.h"
1919

2020
#if __riscv_vector
21-
#ifdef RVV_SPEC_0_7
22-
#include "riscv_v_071_fix.h"
23-
#else
2421
#include <riscv_vector.h>
25-
#endif
2622
#endif // __riscv_vector
2723

2824
namespace ncnn {

src/layer/riscv/innerproduct_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@
1717
#include "layer_type.h"
1818

1919
#if __riscv_vector
20-
#ifdef RVV_SPEC_0_7
21-
#include "riscv_v_071_fix.h"
22-
#else
2320
#include <riscv_vector.h>
24-
#endif
2521
#endif // __riscv_vector
2622

2723
#include "riscv_activation.h"

src/layer/riscv/interp_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@
1717
#include <math.h>
1818

1919
#if __riscv_vector
20-
#ifdef RVV_SPEC_0_7
21-
#include "riscv_v_071_fix.h"
22-
#else
2320
#include <riscv_vector.h>
24-
#endif
2521
#include "riscv_usability.h"
2622
#endif // __riscv_vector
2723

src/layer/riscv/mish_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "mish_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#include "rvv_mathfun.h"
2420
#include "rvv_mathfun_fp16s.h"
2521
#endif // __riscv_vector

src/layer/riscv/packing_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "packing_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
namespace ncnn {

src/layer/riscv/padding_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include "padding_riscv.h"
1616

1717
#if __riscv_vector
18-
#ifdef RVV_SPEC_0_7
19-
#include "riscv_v_071_fix.h"
20-
#else
2118
#include <riscv_vector.h>
22-
#endif
2319
#endif // __riscv_vector
2420

2521
#include "riscv_usability.h"

src/layer/riscv/pooling_riscv.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@
1717
#include <float.h>
1818

1919
#if __riscv_vector
20-
#ifdef RVV_SPEC_0_7
21-
#include "riscv_v_071_fix.h"
22-
#else
2320
#include <riscv_vector.h>
24-
#endif
2521
#endif // __riscv_vector
2622

2723
#include "riscv_usability.h"

0 commit comments

Comments
 (0)