@@ -1503,7 +1503,11 @@ static int gemm_riscv(const Mat& A, const Mat& B, const Mat& C, Mat& top_blob, i
15031503 int nn_K = (K + TILE_K - 1 ) / TILE_K;
15041504
15051505 Mat ATX (TILE_K * TILE_M, (K + TILE_K - 1 ) / TILE_K, nT, 4u , opt.workspace_allocator );
1506+ if (ATX.empty ())
1507+ return -100 ;
15061508 Mat BT (TILE_K * TILE_N, (K + TILE_K - 1 ) / TILE_K, (N + TILE_N - 1 ) / TILE_N, 4u , opt.workspace_allocator );
1509+ if (BT.empty ())
1510+ return -100 ;
15071511
15081512 const int nn_NK = nn_N * nn_K;
15091513
@@ -1537,7 +1541,11 @@ static int gemm_riscv(const Mat& A, const Mat& B, const Mat& C, Mat& top_blob, i
15371541
15381542 Mat topT;
15391543 if (K > TILE_K || broadcast_type_C == 3 || output_transpose)
1544+ {
15401545 topT.create (TILE_N * TILE_M, 1 , nT, 4u , opt.workspace_allocator );
1546+ if (topT.empty ())
1547+ return -100 ;
1548+ }
15411549
15421550 #pragma omp parallel for num_threads(nT)
15431551 for (int ppi = 0 ; ppi < nn_M; ppi++)
@@ -1617,6 +1625,8 @@ static int gemm_AT_riscv(const Mat& AT, const Mat& B, const Mat& C, Mat& top_blo
16171625 int nn_K = (K + TILE_K - 1 ) / TILE_K;
16181626
16191627 Mat BT (TILE_K * TILE_N, (K + TILE_K - 1 ) / TILE_K, (N + TILE_N - 1 ) / TILE_N, 4u , opt.workspace_allocator );
1628+ if (BT.empty ())
1629+ return -100 ;
16201630
16211631 const int nn_NK = nn_N * nn_K;
16221632
@@ -1647,7 +1657,11 @@ static int gemm_AT_riscv(const Mat& AT, const Mat& B, const Mat& C, Mat& top_blo
16471657
16481658 Mat topT;
16491659 if (K > TILE_K || broadcast_type_C == 3 || output_transpose)
1660+ {
16501661 topT.create (TILE_N * TILE_M, 1 , nT, 4u , opt.workspace_allocator );
1662+ if (topT.empty ())
1663+ return -100 ;
1664+ }
16511665
16521666 #pragma omp parallel for num_threads(nT)
16531667 for (int ppi = 0 ; ppi < nn_M; ppi++)
@@ -1708,10 +1722,16 @@ static int gemm_BT_riscv(const Mat& A, const Mat& BT, const Mat& C, Mat& top_blo
17081722 // int nn_N = (N + TILE_N - 1) / TILE_N;
17091723
17101724 Mat ATX (TILE_K * TILE_M, (K + TILE_K - 1 ) / TILE_K, nT, 4u , opt.workspace_allocator );
1725+ if (ATX.empty ())
1726+ return -100 ;
17111727
17121728 Mat topT;
17131729 if (K > TILE_K || broadcast_type_C == 3 || output_transpose)
1730+ {
17141731 topT.create (TILE_N * TILE_M, 1 , nT, 4u , opt.workspace_allocator );
1732+ if (topT.empty ())
1733+ return -100 ;
1734+ }
17151735
17161736 #pragma omp parallel for num_threads(nT)
17171737 for (int ppi = 0 ; ppi < nn_M; ppi++)
@@ -1790,7 +1810,11 @@ static int gemm_AT_BT_riscv(const Mat& AT, const Mat& BT, const Mat& C, Mat& top
17901810
17911811 Mat topT;
17921812 if (K > TILE_K || broadcast_type_C == 3 || output_transpose)
1813+ {
17931814 topT.create (TILE_N * TILE_M, 1 , nT, 4u , opt.workspace_allocator );
1815+ if (topT.empty ())
1816+ return -100 ;
1817+ }
17941818
17951819 #pragma omp parallel for num_threads(nT)
17961820 for (int ppi = 0 ; ppi < nn_M; ppi++)
@@ -1951,6 +1975,8 @@ int Gemm_riscv::create_pipeline(const Option& opt)
19511975 {
19521976 int C_elempack = constantM % packn == 0 ? packn : 1 ;
19531977 convert_packing (C_data, CT_data, C_elempack, opt);
1978+ if (CT_data.empty ())
1979+ return -100 ;
19541980 }
19551981#endif // __riscv_vector
19561982
@@ -1959,6 +1985,8 @@ int Gemm_riscv::create_pipeline(const Option& opt)
19591985 {
19601986 Mat C2;
19611987 C2.create_like (CT_data);
1988+ if (C2.empty ())
1989+ return -100 ;
19621990
19631991 const int size = CT_data.total () * CT_data.elempack ;
19641992 for (int i = 0 ; i < size; i++)
@@ -2082,6 +2110,8 @@ int Gemm_riscv::forward(const std::vector<Mat>& bottom_blobs, std::vector<Mat>&
20822110 {
20832111 Mat CT_data;
20842112 CT_data.create_like (C, opt.workspace_allocator );
2113+ if (CT_data.empty ())
2114+ return -100 ;
20852115
20862116 const int size = C.total () * C.elempack ;
20872117 for (int i = 0 ; i < size; i++)
0 commit comments