riscv: optimize im2col gemm convolution#6740
Conversation
|
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #6740 +/- ##
==========================================
- Coverage 95.72% 95.43% -0.29%
==========================================
Files 965 944 -21
Lines 404025 406989 +2964
==========================================
+ Hits 386736 388425 +1689
- Misses 17289 18564 +1275 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0ed6426939
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| { | ||
| conv1x1s1_sgemm_packn_rvv(bottom_blob_bordered, top_blob, weight_data_tm, bias_data, opt); | ||
| if ((opt.use_winograd63_convolution && num_input >= packn * 2 && num_output >= packn * 2 && num_input <= packn * 16 && num_output <= packn * 16) || (!opt.use_winograd43_convolution && !opt.use_winograd23_convolution)) | ||
| conv3x3s1_winograd63_rvv(bottom_blob_bordered, top_blob, weight_winograd63_data, bias_data, nT, opt); |
There was a problem hiding this comment.
Propagate winograd execution failures to caller
The winograd kernels now return an error code (int) and can fail (for example, returning -100 on workspace allocation failure in convolution_3x3_winograd.h), but this call site ignores that return value and always continues to activation before returning success. In low-memory or large-tile cases this can silently report success with invalid output instead of propagating the failure.
Useful? React with 👍 / 👎.
| { | ||
| conv1x1s1_sgemm_packn_fp16sa_rvv(bottom_blob_bordered, top_blob, weight_data_tm, bias_data_fp16, opt); | ||
| if ((opt.use_winograd63_convolution && num_input >= packn * 2 && num_output >= packn * 2 && num_input <= packn * 16 && num_output <= packn * 16) || (!opt.use_winograd43_convolution && !opt.use_winograd23_convolution)) | ||
| conv3x3s1_winograd63_fp16sa_rvv(bottom_blob_bordered, top_blob, weight_winograd63_data, bias_data_fp16, nT, opt); |
There was a problem hiding this comment.
Check fp16 winograd return code before returning success
The fp16 winograd path has the same regression: conv3x3s1_winograd*_fp16sa_rvv now returns int and can return allocation errors, but this result is ignored here and the function returns 0 after activation. That masks runtime failures (e.g., workspace allocation failure) and can produce incorrect outputs while signaling success.
Useful? React with 👍 / 👎.
No description provided.