这是一个开源的库,地址为https://code.google.com/p/math-neon/,根据项目介绍应该是利用neon指令实现的数学库:包括三角、对数、指数等基于浮点的运算实现,以及矩阵运算,因为是基于neon指令它必须在arm cortex-a架构(有neon指令支持)上才能运行。从项目介绍说因为gcc对于neon的支持不是很好(估计是指neon内在函数效率不如汇编),所以核心的运算代码都是使用内联汇编写成的。如果想编译并测试,可以下载作者写的Makefile(地址为http://gitorious.org/vjaquez-misc/math-neon/commit/14ba470caad37c33cf7245be69efc9a1366d8f99?format=patch)。

本人是想在WINCE下使用(平台为cortex-a8架构),因为代码使用了大量的内联汇编,如果想移植到WINCE平台需要重写汇编文件或利用WEC7编译器的内在函数功能(参见http://blog.csdn.net/alien75/article/details/8740641),两者均有很大的工作量,此时想到了久未使用的mingw32ce这个toolchain工具(参见http://blog.csdn.net/alien75/article/details/6998223),因为仅仅是编译出PE架构的静态库,此工具完全能满足需要,只是要修改一下Makefile才能进行正常编译。

原Makefile内容如下

[cpp] view plaincopy
  1. CFLAGS := -O2 -ggdb -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=neon -ansi -std=gnu99 -pedantic
  2. WARNINGS := -Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes
  3. ASSEMBLER := -Wa,-mimplicit-it=thumb
  4. override CFLAGS += $(WARNINGS) $(ASSEMBLER)
  5. LIBS := -lm
  6. all: math_debug
  7. libmathneon.a: math_acosf.o math_ldexpf.o math_powf.o math_sqrtfv.o \
  8. math_asinf.o math_expf.o math_log10f.o math_runfast.o math_tanf.o \
  9. math_atan2f.o  math_fabsf.o math_logf.o math_sincosf.o math_tanhf.o \
  10. math_atanf.o math_floorf.o math_mat2.o math_sinf.o math_vec2.o \
  11. math_ceilf.o math_fmodf.o math_mat3.o math_sinfv.o math_vec3.o \
  12. math_cosf.o math_frexpf.o math_mat4.o math_sinhf.o math_vec4.o \
  13. math_coshf.o math_invsqrtf.o math_modf.o math_sqrtf.o
  14. math_debug: math_debug.o libmathneon.a
  15. $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
  16. %.o:: %.c
  17. $(CC) $(CFLAGS) -o $@ -c $<
  18. %.a::
  19. $(AR) rcs $@ $^
  20. clean:
  21. $(RM) -v math_debug *.o *.a

修改后的内容

[cpp] view plaincopy
  1. CC=arm-mingw32ce-gcc
  2. AR=arm-mingw32ce-ar rc
  3. CFLAGS := -O2 -ggdb -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon -ansi -std=gnu99 -pedantic -DNO_ERRNO_H -D_WIN32_WCE
  4. LDFLAGS := -L.
  5. WARNINGS := -Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes
  6. ASSEMBLER := -Wa,-mimplicit-it=thumb
  7. override CFLAGS += $(WARNINGS) $(ASSEMBLER)
  8. #LIBS := -lm
  9. all: math_debug
  10. libmathneon.a: math_acosf.o math_ldexpf.o math_powf.o math_sqrtfv.o \
  11. math_asinf.o math_expf.o math_log10f.o math_runfast.o math_tanf.o \
  12. math_atan2f.o  math_fabsf.o math_logf.o math_sincosf.o math_tanhf.o \
  13. math_atanf.o math_floorf.o math_mat2.o math_sinf.o math_vec2.o \
  14. math_ceilf.o math_fmodf.o math_mat3.o math_sinfv.o math_vec3.o \
  15. math_cosf.o math_frexpf.o math_mat4.o math_sinhf.o math_vec4.o \
  16. math_coshf.o math_invsqrtf.o math_modf.o math_sqrtf.o
  17. math_debug: math_debug.o libmathneon.a
  18. $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
  19. %.o:: %.c
  20. $(CC) $(CFLAGS) -o $@ -c $<
  21. %.a::
  22. $(AR) $@ $^
  23. clean:
  24. $(RM) -v math_debug *.o *.a

测试结果(系统函数、C语言优化函数和neon汇编函数比较结果见Rate后数字)

[plain] view plaincopy
  1. RUNFAST: Enabled
  2. ------------------------------------------------------------------------------------------------------
  3. MATRIX FUNCTION TESTS
  4. ------------------------------------------------------------------------------------------------------
  5. matmul2_c =
  6. |2.66, -2.73|
  7. |-5.74, -15.83|
  8. matmul2_neon =
  9. |2.66, -2.73|
  10. |-5.74, -15.83|
  11. matmul2: c=112000    neon=65000      rate=1.72
  12. matvec2_c = |2.66, -5.74|
  13. matvec2_neon = |2.66, -5.74|
  14. matvec2: c=66000     neon=53000      rate=1.25
  15. matmul3_c =
  16. |-17.73, -8.39, -1.10|
  17. |8.30, -5.32, 23.03|
  18. |-5.67, -7.81, 9.07|
  19. matmul3_neon =
  20. |-17.73, -8.39, -1.10|
  21. |8.30, -5.32, 23.03|
  22. |-5.67, -7.81, 9.07|
  23. matmul3: c=394000    neon=120000     rate=3.28
  24. matvec3_c = |-17.73, 8.30, -5.67|
  25. matvec3_neon = |-17.73, 8.30, -5.67|
  26. matvec3: c=66000     neon=53000      rate=1.25
  27. matmul4_c =
  28. |-8.86, 8.70, -17.78, -7.64|
  29. |-13.15, 20.92, -10.97, -14.02|
  30. |17.37, -14.46, -13.16, 33.82|
  31. |15.42, -27.32, -5.66, -6.37|
  32. matmul4_neon =
  33. |-8.86, 8.70, -17.78, -7.64|
  34. |-13.15, 20.92, -10.97, -14.02|
  35. |17.37, -14.46, -13.16, 33.82|
  36. |15.42, -27.32, -5.66, -6.37|
  37. matmul4: c=991000    neon=141000     rate=7.03
  38. matvec4_c = |-8.86, -13.15, 17.37, 15.418112|
  39. matvec4_neon = |-8.86, -13.15, 17.37, 15.418112|
  40. matvec4: c=66000     neon=53000      rate=1.25
  41. dot2_c = 3.756326
  42. dot2_neon = 3.756326
  43. dot2: c=532000   neon=497000     rate=1.07
  44. normalize2_c = [-0.74, -0.68]
  45. normalize2_neon = [-0.74, -0.68]
  46. normalize2: c=691000     neon=313000     rate=2.21
  47. dot3_c = 3.698457
  48. dot3_neon = 3.698457
  49. dot3: c=572000   neon=514000     rate=1.11
  50. normalize3_c = [-0.74, -0.68, -0.01]
  51. normalize3_neon = [-0.74, -0.68, -0.01]
  52. normalize3: c=806000     neon=353000     rate=2.28
  53. cross3_c = [-4.69, 5.12, -1.46]
  54. cross3_neon = [-4.69, 5.12, -1.46]
  55. cross3: c=586000     neon=373000     rate=1.57
  56. dot4_c = -4.564567
  57. dot4_neon = -4.564566
  58. dot4: c=625000   neon=487000     rate=1.28
  59. normalize4_c = [-0.24, -0.22, -0.00, 0.95]
  60. normalize4_neon = [-0.24, -0.22, -0.00, 0.95]
  61. normalize4: c=924000     neon=343000     rate=2.69
  62. ------------------------------------------------------------------------------------------------------
  63. CMATH FUNCTION TESTS
  64. ------------------------------------------------------------------------------------------------------
  65. Function    Range       Number  ABS Max Error   REL Max Error   RMS Error   Time    Rate
  66. ------------------------------------------------------------------------------------------------------
  67. sinf        [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   880000  x1.00
  68. sinf_c      [-3.14, 3.14]   500000  8.34e-007   1.00e+002%  4.09e-007   162000  x5.43
  69. sinf_neon   [-3.14, 3.14]   500000  8.34e-007   1.00e+002%  4.09e-007   96000   x9.17
  70. cosf        [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   906000  x1.00
  71. cosf_c      [-3.14, 3.14]   500000  8.34e-007   6.74e-001%  4.16e-007   192000  x4.72
  72. cosf_neon   [-3.14, 3.14]   500000  1.41e+000   6.64e+007%  1.00e+000   142000  x6.38
  73. tanf        [-0.79, 0.79]   500000  0.00e+000   0.00e+000%  0.00e+000   1140000 x1.00
  74. tanf_c      [-0.79, 0.79]   500000  2.98e-006   7.97e-004%  1.31e-006   200000  x5.70
  75. tanf_neon   [-0.79, 0.79]   500000  1.91e-006   3.62e-004%  6.66e-007   126000  x9.05
  76. asinf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   2732000 x1.00
  77. asinf_c     [-1.00, 1.00]   500000  5.53e-005   1.06e-002%  1.69e-005   277000  x9.86
  78. asinf_neon  [-1.00, 1.00]   500000  4.65e-005   8.87e-003%  1.#Re+000   151000  x18.09
  79. acosf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   2670000 x1.00
  80. acosf_c     [-1.00, 1.00]   500000  5.56e-005   6.46e-003%  1.69e-005   312000  x8.56
  81. acosf_neon  [-1.00, 1.00]   500000  4.67e-005   6.35e-003%  1.#Re+000   171000  x15.61
  82. atanf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   1021000 x1.00
  83. atanf_c     [-1.00, 1.00]   500000  1.67e-004   2.12e-002%  7.40e-005   198000  x5.16
  84. atanf_neon  [-1.00, 1.00]   500000  1.67e-004   2.12e-002%  7.40e-005   121000  x8.44
  85. sinhf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1509000 x1.00
  86. sinhf_c         [-3.14, 3.14]   500000  1.91e-006   1.52e-001%  2.37e-007   280000  x5.39
  87. sinhf_neon      [-3.14, 3.14]   500000  1.91e-006   1.52e-001%  1.90e-007   108000  x13.97
  88. coshf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1163000 x1.00
  89. coshf_c         [-3.14, 3.14]   500000  1.91e-006   2.37e-005%  2.28e-007   283000  x4.11
  90. coshf_neon      [-3.14, 3.14]   500000  1.91e-006   2.22e-005%  1.68e-007   108000  x10.77
  91. tanhf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1555000 x1.00
  92. tanhf_c         [-3.14, 3.14]   500000  1.21e-005   2.48e-001%  5.48e-006   235000  x6.62
  93. tanhf_neon      [-3.14, 3.14]   500000  2.38e-007   2.47e-001%  5.40e-008   119000  x13.07
  94. expf        [0.00, 10.00]   500000  0.00e+000   0.00e+000%  0.00e+000   960000  x1.00
  95. expf_c      [0.00, 10.00]   500000  9.77e-003   6.58e-005%  1.64e-003   132000  x7.27
  96. expf_neon   [0.00, 10.00]   500000  9.77e-003   6.58e-005%  1.64e-003   88000   x10.91
  97. logf        [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   1027000 x1.00
  98. logf_c      [1.00, 1000.00] 500000  7.63e-006   1.03e-002%  1.07e-006   116000  x8.85
  99. logf_neon   [1.00, 1000.00] 500000  7.63e-006   1.03e-002%  1.07e-006   82000   x12.52
  100. log10f          [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   1202000 x1.00
  101. log10f_c        [1.00, 1000.00] 500000  3.34e-006   6.68e-003%  4.84e-007   116000  x10.36
  102. log10f_neon     [1.00, 1000.00] 500000  3.34e-006   6.68e-003%  4.84e-007   81000   x14.84
  103. floorf      [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   4705000 x1.00
  104. floorf_c    [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   819000  x5.74
  105. floorf_neon [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   671000  x7.01
  106. ceilf       [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   5734000 x1.00
  107. ceilf_c     [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   814000  x7.04
  108. ceilf_neon  [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   696000  x8.24
  109. fabsf       [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   2005000 x1.00
  110. fabsf_c     [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   455000  x4.41
  111. fabsf_neon  [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   446000  x4.50
  112. sqrtf       [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   3222000 x1.00
  113. sqrtf_c     [1.00, 1000.00] 500000  2.33e-004   1.06e-003%  8.69e-005   139000  x23.18
  114. sqrtf_neon  [1.00, 1000.00] 500000  7.63e-006   2.91e-005%  1.60e-006   85000   x37.91
  115. invsqrtf        [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   106000  x1.00
  116. invsqrtf_c      [1.00, 1000.00] 500000  4.35e-006   4.78e-004%  2.00e-007   94000   x1.13
  117. invsqrtf_neon   [1.00, 1000.00] 500000  1.19e-007   2.12e-005%  4.81e-009   70000   x1.51
  118. atan2f          [0.10, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   2388000 x1.00
  119. atan2f_c        [0.10, 10.00]   10000   1.73e-004   2.23e-002%  0.00e+000   657000  x3.63
  120. atan2f_neon     [0.10, 10.00]   10000   1.67e-004   2.12e-002%  0.00e+000   278000  x8.59
  121. powf        [1.00, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   8316000 x1.00
  122. powf_c      [1.00, 10.00]   10000   1.36e+005   5.88e-003%  0.00e+000   493000  x16.87
  123. powf_neon   [1.00, 10.00]   10000   1.36e+005   5.88e-003%  0.00e+000   292000  x28.48
  124. fmodf           [1.00, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   1394000 x1.00
  125. fmodf_c         [1.00, 10.00]   10000   9.99e+000   8.06e-002%  0.00e+000   341000  x4.09
  126. fmodf_neon      [1.00, 10.00]   10000   9.97e+000   8.06e-002%  0.00e+000   238000  x5.86

math-neon基于NEON指令的数学库相关推荐

  1. math.js:灵活强大的JavaScript数学库

    最近为期权开发一些基本技术指标,用到一些C++的数学库,刚好看到JavaScript的math.js库,这里对math.js做一下简单介绍. 一.什么是math.js math.js是一个广泛应用于J ...

  2. 密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码)

    密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码) 3.    AES实验 3)    (思考题)利用Sage构建AES的S盒和逆S盒 ...

  3. python怎么导入math库_Python math数学库的用法

    对于基本的加.减.乘.除等运算,不用引入任何库就可以完成.但是如果要进行求正弦值.求平方根等运算,便需要使用数学库 math. math 库通过下面语句引入: import math 该库包含常用的常 ...

  4. 基于TIA博途利用SCL语言开发沿指令FC全局库来减少工作存储区的使用

    基于TIA博途利用SCL语言开发沿指令FC全局库来减少工作存储区的使用 在程序中调用R_TRIG或F_TRIG时,系统会自动生成1个背景DB块,用于存放检测信号的边沿存储位,当程序中有较多信号需要检测 ...

  5. 开源项目推荐:我个人中意的Python/C++/.Net数学库(★精品收藏★)

    Numpy和SciPy 大名鼎鼎的 NumPy python版本 https://github.com/numpy/numpy https://github.com/dpilger26/NumCpp  ...

  6. python调用数学库_python 数学库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在寻找一个3d数学库在python或python绑定. 它需要处理旋转,平移 ...

  7. 基于Vue结合Vant组件库的仿电影APP

    Vue综合案例 Vue综合案例 一.项目概要 1.效果前瞻 2.开发流程 3.开发环境 二.初始化及必要知识点 1.初始化远程仓库 2.创建项目 3.路由规划 4.反向代理配置 5.网络请求封装 6. ...

  8. 《安富莱嵌入式周报》第306期:开源独轮车,Cortex-M85修订版r1发布,Terathon图形数学库,不断变革的IDE开发环境,各个厂家总动员

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  9. STM32 进阶教程 19 - IQmath数学库的使用

    前言 STM32 M3 系列是不带浮点运算单元的,小数运算都是采用定点转浮点试式实现的,本节给大家介绍一个很好用的定点转浮点数学运算库,IQmath是德州仪器 (TI) 的一个高度优化的高精度数学函数 ...

最新文章

  1. CycliBarriar和CountdownLatch(计数器)
  2. VR直播云服务解决方案
  3. JAVA 连接MYSQL数据库操作
  4. 【Matlab】判断是否为空?是否为NaN?
  5. 联想服务器开机显示系统恢复选项,联想电脑win10系统开机时按哪个键进入一键还原模式...
  6. .NET应用迁移到.NET Core--调查案例
  7. Java 多线程 —— 深入理解 volatile 的原理以及应用
  8. python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析
  9. 挂载(mount)深入理解
  10. 基于visual Studio2013解决面试题之0707最小元素
  11. tomcat乱码的几种解决
  12. JAVA代码生成器源码-基于SSM架构
  13. 前方高能!公司来了一个low逼程序员
  14. Java培训要多久以后才能工作?
  15. 最详细G1垃圾回收器日志解读
  16. 人机智能交互技术(ROS)实践作业模版与说明
  17. 多核CPU 跟 进程/线程
  18. 笔记本电脑网络图标丢失解决流程
  19. 昔日金屋中的女人,谁都难免面对帝王决然的背影
  20. 和我一起读英文书吧-beyond feelings【1】

热门文章

  1. php.ini 配快捷方式,求高手解答!界面保存的网页快捷方式图标默认恢复.
  2. java项目集成mybatis_JAVA应用程序单独集成Mybatis使用Demo
  3. 皮一皮:如何将紫薯变成绿薯?
  4. 开源数据库表结构文档生成器
  5. LOL手游上线!同步专属限量游戏红包封面,还不快来拿?
  6. 每日一皮:终于明白女朋友挂在嘴边的“鸽子蛋”为什么那么贵了...
  7. MySQL中有哪些锁?
  8. Java 14 可能带来什么新特性?
  9. 电脑版java运行条件,Java Runtime Environment电脑版-Java Runtime Environment(Java运行环境)8.0.221 x64正式版-蜻蜓手游网...
  10. linux下运行js挖矿,利用 JavaScript 代码挖矿