因为某个测试需要,在STM32F407平台上验证矩阵乘法,使用ARM官方库“CMSIS_5-5.5.1\CMSIS\DSP\Source\MatrixFunctions\arm_mat_mult_q31.c”中函数arm_mat_mult_q31。

测试实例,参照《安富莱_STM32-V5开发板_数字信号处理教程(V1.0).pdf》-20.2 矩阵乘法 MatMult
-20.2.6 实例讲解中所列(参考并便于对比)。

实例代码整理如下:

uint8_t i;
    arm_status status;

arm_matrix_instance_q31 pMatrixSrcA1_q31; /* 10 * 10 */
    arm_matrix_instance_q31 pMatrixSrcB1_q31; /* 10 * 10 */
    arm_matrix_instance_q31 pMatrixDst1_q31; /* 10 * 10 */

for (i = 0; i < DEF_matrix_src_size; i++)
    {
        pDataSrcA1_q31[i] = i;
        pDataSrcB1_q31[i] = i + 100; 
        pDataDst1_q31[i] = 1;
            pDataDst1_q31[i + 10] = 1;
    }

arm_mat_init_q31(&pMatrixSrcA1_q31, DEF_matrix_square_size, DEF_matrix_square_size, pDataSrcA1_q31);
    arm_mat_init_q31(&pMatrixSrcB1_q31, DEF_matrix_square_size, DEF_matrix_square_size, pDataSrcB1_q31);
    arm_mat_init_q31(&pMatrixDst1_q31, DEF_matrix_square_size, DEF_matrix_square_size, pDataDst1_q31);

status = arm_mat_mult_q31(&pMatrixSrcA1_q31, &pMatrixSrcB1_q31, &pMatrixDst1_q31);
    //arm_mat_add_q31(&pMatrixSrcA1_q31, &pMatrixSrcB1_q31, &pMatrixDst1_q31);
    printf("\r\n----status = %d\r\n", status);
    
    /* ====for debugging==== */
    printf("\r\n----pDataSrcA1_q31 = ");
    for (i = 0; i < DEF_matrix_src_size; i++)
    {
        if ((i % 10) == 0)
            printf("\r\n");
        printf("%2d ", pDataSrcA1_q31[i]);

}
    printf("\r\n\r\n----pDataSrcB1_q31 = ");
    for (i = 0; i < DEF_matrix_src_size; i++)
    {
        if ((i % 10) == 0)
            printf("\r\n");
        printf("%2d ", pDataSrcB1_q31[i]);
    }

printf("\r\n\r\n----After matrix mult--------------- \r\n");
    printf("--pMatrixDst1_q31: Rows=%2d, Cols=%2d\r\n", pMatrixDst1_q31.numRows, pMatrixDst1_q31.numCols);
    printf("--pMatrixDst1_q31.pData=");
    for (i = 0; i < DEF_matrix_src_size; i++)
    {
        if ((i % 10) == 0)
            printf("\r\n");
        printf("%d ", pMatrixDst1_q31.pData[i]);
        //printf("%d ", pDataDst1_q31[i]);
    }
    printf("%d \r\n", pMatrixDst1_q31.pData[10]);
    printf("%d \r\n", pMatrixDst1_q31.pData[11]);

但实际输出结果发现全为0,如下:

后来注意到,实际上安富莱文档中的输出结果其实也是全0,如下:

大概跟了下原函数arm_mat_mult_q31的代码,发现如下地方有些存疑:

源代码考虑两个32位大数相乘后长度加倍的

情况,这块考虑肯定没问题,因为暂时没有太多时间去细细品味,对于我目前测试所需和问题情况,尝试将2处的右移

注掉,改为使用3的代码,结果ok,如下:

目前结果ok,暂时没有太多时间去推敲,暂时记录一下。

如果有高人清楚其中原因,也请直接指点一二,多谢!

ARM官方矩阵乘法库函数arm_mat_mult_q31结果不太对路的问题相关推荐

  1. 高性能计算实验——矩阵乘法基于MPI的并行实现及优化

    高性能计算实验--矩阵乘法基于MPI的并行实现及优化 1.实验目的 1.1.通过MPI实现通用矩阵乘法 1.2.基于MPI的通用矩阵乘法优化 1.3.改造实验1成矩阵乘法库函数 2.实验过程和核心代码 ...

  2. cache 在X86和ARM的性能比较 - 矩阵累加和分块矩阵乘法

    有一段时间在x86和arm服务器下面做开发,需要平台之间的移植,然后经常发现同一段代码在不同平台下面的表现不一样,有一大部分原因是不同平台对cache处理方法不一样. 大部分参考资料上说,cache有 ...

  3. 【Scala-spark.mlib】本地矩阵乘法计算效率比较(稠密稀疏哪家强?)

    矩阵乘法效率比较 1. 矩阵乘法 2. 效率比较  2.1. DenseMatrix(50% zeros) X DenseMatrix  2.2. SparseMatrix X DenseMatrix ...

  4. pytorch 内积 矩阵乘法

    1维张量内积-torch.dot() 内积返回的是一个值,如果都归一化了,可以看做相似度. torch.dot(input, tensor) → Tensor #计算两个张量的点积(内积) #官方提示 ...

  5. C++、python、CUDA性能分析--矩阵乘法

    网上看到一个分析python.Numpy.C++.cuda.cuBLAS做矩阵运算性能的帖子,我觉得非常好.所以,就自己动手实测了一下.这才有了这篇文章.就算是给需要的朋友做个参考吧. ******* ...

  6. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  7. 线性代数【15】复合线性变换-矩阵乘法 和 三维变换

    前言:本节将上节的线性变换的概念综合起来. 上节我们知道,矩阵可以认为是一组基础列向量的集,也就定义了一个线性变换的形式.而将这个矩阵和另外一个向量相乘,就得到了这个被相乘向量的,基于这个线性变换形式 ...

  8. 性能比拼!超详细的Tengine GEMM矩阵乘法汇编教程

    点击我爱计算机视觉标星,更快获取CVML新技术 Tengine 是OPEN AI LAB 针对前端智能设备开发的软件开发包,核心部分是一个轻量级,模块化,高性能的AI 推断引擎,并支持用DLA.GPU ...

  9. 详解Python中的算术乘法、数组乘法与矩阵乘法

    推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年3月第6 ...

最新文章

  1. UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners
  2. 设计模式C++实现(16)——状态模式
  3. SAP Basis如何显示SAP中所有用户列表
  4. 38行代码AC——UVA-167The Sultan‘s Successors(八皇后问题,附视频讲解)
  5. 日历记事本java代码_急需日历记事本JAVA源代码
  6. 基于GaussDB(DWS)的全文检索特性,了解一下?
  7. PayPal网站付款标准版(for PHP)
  8. eclipse+mysql+tomcat配置JNDI
  9. 访问webservice,导入xml至本地数据集
  10. VMware Perl SDK error “Server Version Unavailable .. line 545”
  11. ModBus RTU和ModBus ASC
  12. mysql健康档案管理系统_益康居民健康档案管理系统(网络版)
  13. ABP默认表结构解析
  14. Win10正式版历代记
  15. 使用Kubeadm来搭建k8s-v1.18.2(包含所有错误集锦分析)
  16. Redis集群和应用——02
  17. C++的特点,及对C语言的发展
  18. 如何使用 mocha 和 sinon 集成单元测试--单元测试示例及分析(上)
  19. python把四个图画在一个窗口_python plt多个图在同一窗口显示方法
  20. intel realsense获取8位深度图

热门文章

  1. Oracle RAC清理crfclust.bdb文件
  2. 搞清品牌策划第一性原理
  3. 好友趣玩——窗口抖动(python)
  4. 你不厉害, 是因为还不够努力
  5. 大学生ppt汇报中出现的一些问题及解决
  6. 数据加密 三种密钥交换算法详解(RSA DHE ECDHE)
  7. 蓝桥杯单片机之超声波测距
  8. SpringMVC的运行流程(一)
  9. 宫村优子 -- It's only the fairy tale
  10. 旧版疯狂的松鼠nuts android版,疯狂的松鼠 -疯狂的松鼠 攻略-疯狂的松鼠 安卓_苹果_iOS下载_礼包_开服_新闻-07073手机游戏...