Open xuwenlong02 opened 1 year ago
检查一下是否有输入参数?是否添加正确
检查一下是否有输入参数?是否添加正确 有没有可能是多线程问题, 因为他报的是释放不存在的内存。
像是workspace 越界访问了
template <typename Dtype>
void gemm_prepack_sdot_int8(const int8_t* A_packed,
const int8_t* B,
const float* bias,
Dtype* C,
int M,
int N,
int K,
bool is_bias,
int is_relu,
bool is_transB,
const float* scale,
const float* alpha,
ARMContext* ctx) {
size_t llc_size = ctx->llc_size() / 4;
auto workspace = ctx->workspace_data<int8_t>();
//! MBLOCK_INT8_DOT * x (result) + MBLOCK_INT8_DOT * k (A) + x * k (B) = l2
int x_block = (llc_size - (MBLOCK_INT8_DOT * K)) /
(sizeof(int8_t) * (K + MBLOCK_INT8_DOT));
x_block /= NBLOCK_INT8_DOT;
检查一下是否有输入参数?是否添加正确 有没有可能是多线程问题, 因为他报的是释放不存在的内存。
像是workspace 越界访问了
template <typename Dtype> void gemm_prepack_sdot_int8(const int8_t* A_packed, const int8_t* B, const float* bias, Dtype* C, int M, int N, int K, bool is_bias, int is_relu, bool is_transB, const float* scale, const float* alpha, ARMContext* ctx) { size_t llc_size = ctx->llc_size() / 4; auto workspace = ctx->workspace_data<int8_t>(); //! MBLOCK_INT8_DOT * x (result) + MBLOCK_INT8_DOT * k (A) + x * k (B) = l2 int x_block = (llc_size - (MBLOCK_INT8_DOT * K)) / (sizeof(int8_t) * (K + MBLOCK_INT8_DOT)); x_block /= NBLOCK_INT8_DOT;
auto b_pannel = static_cast<int8_t*>(workspace);
if (!is_transB) {
// K * N
packb_sdot_int8_n12_n8_n4(b_pannel, B, N, 0, K, x0, xmax); // 每次都是这个函数挂掉了
} else {
// N X K
packb_sdot_int8_n12_n8_n4_trans(b_pannel, B, K, 0, K, x0, xmax);
}
为使您的问题得到快速解决,在建立 Issue 前,请您先通过如下方式搜索是否有相似问题:历史 issue, FAQ 文档, 官方文档
如果您没有查询到相似问题,为快速解决您的提问,建立 issue 时请提供如下细节信息:
标题:简洁、精准描述您的问题,例如“最新预测库的 API 文档在哪儿 ”
版本、预测库信息: 1)Paddle Lite 版本:v2.13-rc 2)Host 环境:aarch64-v8a, 3)运行设备环境:rk3568 开发板 4)预测后端信息:CPU
预测信息 1)预测 API:C++API 2)预测选项信息:armv8、多线程 3)预测库来源:自己编译关闭OpenMP, LITE_WITH_ARM=ON
复现信息:
问题描述:执行gemm_int8_compute_test 报错,内存错误