math-neon基于NEON指令的数学库

这是一个开源的库,地址为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内容如下

 

  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.   
  5. override CFLAGS += $(WARNINGS) $(ASSEMBLER)  
  6. LIBS := -lm  
  7.   
  8. all: math_debug  
  9.   
  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.   
  18. math_debug: math_debug.o libmathneon.a  
  19.     $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)  
  20.   
  21. %.o:: %.c  
  22.     $(CC) $(CFLAGS) -o $@ -c $<  
  23.   
  24. %.a::  
  25.     $(AR) rcs $@ $^  
  26.   
  27. clean:  
  28.     $(RM) -v math_debug *.o *.a  


修改后的内容

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


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

  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.   
  13. matvec2_c = |2.66, -5.74|  
  14. matvec2_neon = |2.66, -5.74|  
  15. matvec2: c=66000     neon=53000      rate=1.25  
  16.    
  17. matmul3_c =  
  18.             |-17.73, -8.39, -1.10|  
  19.             |8.30, -5.32, 23.03|  
  20.             |-5.67, -7.81, 9.07|  
  21. matmul3_neon =  
  22.             |-17.73, -8.39, -1.10|  
  23.             |8.30, -5.32, 23.03|  
  24.             |-5.67, -7.81, 9.07|  
  25. matmul3: c=394000    neon=120000     rate=3.28   
  26.   
  27. matvec3_c = |-17.73, 8.30, -5.67|  
  28. matvec3_neon = |-17.73, 8.30, -5.67|  
  29. matvec3: c=66000     neon=53000      rate=1.25   
  30.   
  31. matmul4_c =  
  32.             |-8.86, 8.70, -17.78, -7.64|  
  33.             |-13.15, 20.92, -10.97, -14.02|  
  34.             |17.37, -14.46, -13.16, 33.82|  
  35.             |15.42, -27.32, -5.66, -6.37|  
  36. matmul4_neon =  
  37.             |-8.86, 8.70, -17.78, -7.64|  
  38.             |-13.15, 20.92, -10.97, -14.02|  
  39.             |17.37, -14.46, -13.16, 33.82|  
  40.             |15.42, -27.32, -5.66, -6.37|  
  41. matmul4: c=991000    neon=141000     rate=7.03   
  42.   
  43. matvec4_c = |-8.86, -13.15, 17.37, 15.418112|  
  44. matvec4_neon = |-8.86, -13.15, 17.37, 15.418112|  
  45. matvec4: c=66000     neon=53000      rate=1.25   
  46.   
  47. dot2_c = 3.756326  
  48. dot2_neon = 3.756326  
  49. dot2: c=532000   neon=497000     rate=1.07   
  50.   
  51. normalize2_c = [-0.74, -0.68]  
  52. normalize2_neon = [-0.74, -0.68]  
  53. normalize2: c=691000     neon=313000     rate=2.21   
  54.   
  55. dot3_c = 3.698457  
  56. dot3_neon = 3.698457  
  57. dot3: c=572000   neon=514000     rate=1.11   
  58.   
  59. normalize3_c = [-0.74, -0.68, -0.01]  
  60. normalize3_neon = [-0.74, -0.68, -0.01]  
  61. normalize3: c=806000     neon=353000     rate=2.28   
  62.   
  63. cross3_c = [-4.69, 5.12, -1.46]  
  64. cross3_neon = [-4.69, 5.12, -1.46]  
  65. cross3: c=586000     neon=373000     rate=1.57   
  66.   
  67. dot4_c = -4.564567  
  68. dot4_neon = -4.564566  
  69. dot4: c=625000   neon=487000     rate=1.28   
  70.   
  71. normalize4_c = [-0.24, -0.22, -0.00, 0.95]  
  72. normalize4_neon = [-0.24, -0.22, -0.00, 0.95]  
  73. normalize4: c=924000     neon=343000     rate=2.69   
  74.   
  75. ------------------------------------------------------------------------------------------------------  
  76. CMATH FUNCTION TESTS   
  77. ------------------------------------------------------------------------------------------------------  
  78. Function    Range       Number  ABS Max Error   REL Max Error   RMS Error   Time    Rate  
  79. ------------------------------------------------------------------------------------------------------  
  80. sinf        [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   880000  x1.00     
  81. sinf_c      [-3.14, 3.14]   500000  8.34e-007   1.00e+002%  4.09e-007   162000  x5.43     
  82. sinf_neon   [-3.14, 3.14]   500000  8.34e-007   1.00e+002%  4.09e-007   96000   x9.17     
  83. cosf        [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   906000  x1.00     
  84. cosf_c      [-3.14, 3.14]   500000  8.34e-007   6.74e-001%  4.16e-007   192000  x4.72     
  85. cosf_neon   [-3.14, 3.14]   500000  1.41e+000   6.64e+007%  1.00e+000   142000  x6.38     
  86. tanf        [-0.79, 0.79]   500000  0.00e+000   0.00e+000%  0.00e+000   1140000 x1.00     
  87. tanf_c      [-0.79, 0.79]   500000  2.98e-006   7.97e-004%  1.31e-006   200000  x5.70     
  88. tanf_neon   [-0.79, 0.79]   500000  1.91e-006   3.62e-004%  6.66e-007   126000  x9.05     
  89. asinf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   2732000 x1.00     
  90. asinf_c     [-1.00, 1.00]   500000  5.53e-005   1.06e-002%  1.69e-005   277000  x9.86     
  91. asinf_neon  [-1.00, 1.00]   500000  4.65e-005   8.87e-003%  1.#Re+000   151000  x18.09    
  92. acosf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   2670000 x1.00     
  93. acosf_c     [-1.00, 1.00]   500000  5.56e-005   6.46e-003%  1.69e-005   312000  x8.56     
  94. acosf_neon  [-1.00, 1.00]   500000  4.67e-005   6.35e-003%  1.#Re+000   171000  x15.61    
  95. atanf       [-1.00, 1.00]   500000  0.00e+000   0.00e+000%  0.00e+000   1021000 x1.00     
  96. atanf_c     [-1.00, 1.00]   500000  1.67e-004   2.12e-002%  7.40e-005   198000  x5.16     
  97. atanf_neon  [-1.00, 1.00]   500000  1.67e-004   2.12e-002%  7.40e-005   121000  x8.44     
  98. sinhf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1509000 x1.00     
  99. sinhf_c         [-3.14, 3.14]   500000  1.91e-006   1.52e-001%  2.37e-007   280000  x5.39     
  100. sinhf_neon      [-3.14, 3.14]   500000  1.91e-006   1.52e-001%  1.90e-007   108000  x13.97    
  101. coshf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1163000 x1.00     
  102. coshf_c         [-3.14, 3.14]   500000  1.91e-006   2.37e-005%  2.28e-007   283000  x4.11     
  103. coshf_neon      [-3.14, 3.14]   500000  1.91e-006   2.22e-005%  1.68e-007   108000  x10.77    
  104. tanhf           [-3.14, 3.14]   500000  0.00e+000   0.00e+000%  0.00e+000   1555000 x1.00     
  105. tanhf_c         [-3.14, 3.14]   500000  1.21e-005   2.48e-001%  5.48e-006   235000  x6.62     
  106. tanhf_neon      [-3.14, 3.14]   500000  2.38e-007   2.47e-001%  5.40e-008   119000  x13.07    
  107. expf        [0.00, 10.00]   500000  0.00e+000   0.00e+000%  0.00e+000   960000  x1.00     
  108. expf_c      [0.00, 10.00]   500000  9.77e-003   6.58e-005%  1.64e-003   132000  x7.27     
  109. expf_neon   [0.00, 10.00]   500000  9.77e-003   6.58e-005%  1.64e-003   88000   x10.91    
  110. logf        [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   1027000 x1.00     
  111. logf_c      [1.00, 1000.00] 500000  7.63e-006   1.03e-002%  1.07e-006   116000  x8.85     
  112. logf_neon   [1.00, 1000.00] 500000  7.63e-006   1.03e-002%  1.07e-006   82000   x12.52    
  113. log10f          [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   1202000 x1.00     
  114. log10f_c        [1.00, 1000.00] 500000  3.34e-006   6.68e-003%  4.84e-007   116000  x10.36    
  115. log10f_neon     [1.00, 1000.00] 500000  3.34e-006   6.68e-003%  4.84e-007   81000   x14.84    
  116. floorf      [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   4705000 x1.00     
  117. floorf_c    [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   819000  x5.74     
  118. floorf_neon [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   671000  x7.01     
  119. ceilf       [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   5734000 x1.00     
  120. ceilf_c     [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   814000  x7.04     
  121. ceilf_neon  [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   696000  x8.24     
  122. fabsf       [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   2005000 x1.00     
  123. fabsf_c     [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   455000  x4.41     
  124. fabsf_neon  [1.00, 1000.00] 5000000 0.00e+000   0.00e+000%  0.00e+000   446000  x4.50     
  125. sqrtf       [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   3222000 x1.00     
  126. sqrtf_c     [1.00, 1000.00] 500000  2.33e-004   1.06e-003%  8.69e-005   139000  x23.18    
  127. sqrtf_neon  [1.00, 1000.00] 500000  7.63e-006   2.91e-005%  1.60e-006   85000   x37.91    
  128. invsqrtf        [1.00, 1000.00] 500000  0.00e+000   0.00e+000%  0.00e+000   106000  x1.00     
  129. invsqrtf_c      [1.00, 1000.00] 500000  4.35e-006   4.78e-004%  2.00e-007   94000   x1.13     
  130. invsqrtf_neon   [1.00, 1000.00] 500000  1.19e-007   2.12e-005%  4.81e-009   70000   x1.51     
  131. atan2f          [0.10, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   2388000 x1.00     
  132. atan2f_c        [0.10, 10.00]   10000   1.73e-004   2.23e-002%  0.00e+000   657000  x3.63     
  133. atan2f_neon     [0.10, 10.00]   10000   1.67e-004   2.12e-002%  0.00e+000   278000  x8.59     
  134. powf        [1.00, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   8316000 x1.00     
  135. powf_c      [1.00, 10.00]   10000   1.36e+005   5.88e-003%  0.00e+000   493000  x16.87    
  136. powf_neon   [1.00, 10.00]   10000   1.36e+005   5.88e-003%  0.00e+000   292000  x28.48    
  137. fmodf           [1.00, 10.00]   10000   0.00e+000   0.00e+000%  0.00e+000   1394000 x1.00     
  138. fmodf_c         [1.00, 10.00]   10000   9.99e+000   8.06e-002%  0.00e+000   341000  x4.09     
  139. fmodf_neon      [1.00, 10.00]   10000   9.97e+000   8.06e-002%  0.00e+000   238000  x5.86  
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: eclipse-jee-neon-3是一款基于Java的集成开发环境(IDE),它是Eclipse IDE的一个版本。Eclipse IDE是一个广泛使用的开发工具,可以用于开发各种类型的应用程序。 "Eclipse-jee"表示这个版本主要针对Java Enterprise Edition(Java EE)的开发,该平台提供了一组技术和API,用于开发企业级Java应用程序。与传统的Java SE(Java Standard Edition)相比,Java EE提供了更多的功能和工具,以满足企业级应用程序的需求。 "Neon"是Eclipse IDE的开发代号,代表这个版本的发布时间。Neon是Eclipse IDE的第四个主要版本,它于2016年发布。 "Eclipse-jee-neon-3"是基于Neon版本的Java EE开发工具的第三个修订版。这意味着该版本修复了之前版本中存在的一些错误和问题,并且还可能提供了一些新的功能和改进。 使用eclipse-jee-neon-3,开发者可以创建、编辑和调试Java EE应用程序。它提供了许多有用的功能,如自动代码补全、语法高亮显示、调试器、版本控制集成等。此外,它还支持许多其他技术和框架,如Servlet、JSP、EJB、JPA等。 总之,eclipse-jee-neon-3是一个功能强大的Java EE开发工具,可以帮助开发者轻松地构建和调试企业级Java应用程序。 ### 回答2: eclipse-jee-neon-3是一个流行的集成开发环境(IDE),用于开发JavaEE(Java企业版)应用程序。它是Eclipse Foundation开发的,并通过开放源代码方式进行发布。 这个版本的Eclipse-JEE-Neon-3是Eclipse Neon系列的第三个服务版本。Neon是Eclipse的第四个同时发布的版本,专注于提供Java开发工具的最新和最先进的功能和性能。 Eclipse-JEE-Neon-3提供了广泛的功能,以帮助开发者更轻松地构建和调试企业级应用程序。它支持许多JavaEE技术,如Servlets、JavaServer Pages(JSP)、JavaBeans、Enterprise JavaBeans(EJB)、Java Persistence API(JPA)等。它还集成了许多其他的开发工具,如Git、Maven、JUnit等,使开发者能够更加高效地进行版本控制和测试。 Eclipse-JEE-Neon-3还具有插件式的架构,允许开发者根据自己的需求进行定制和扩展。开发者可以安装各种插件来增加不同的功能和工具,以满足他们特定的开发需求。 此外,Eclipse-JEE-Neon-3还具有友好的用户界面,提供了易于使用和导航的功能。开发者可以通过简单的拖放操作来创建和管理项目,轻松地导航代码和资源,方便地查找和修复错误。 总而言之,Eclipse-JEE-Neon-3是一个强大而全面的开发工具,专门用于构建Java企业级应用程序。它提供了丰富的功能和工具,使开发者能够高效地进行开发和调试,并能够满足不同的需求和要求。 ### 回答3: Eclipse-jee-neon-3是一个用于开发Java Enterprise Edition(JEE)应用程序的集成开发环境(IDE)。它是Eclipse IDE的一个版本,专门针对JEE开发进行优化和扩展。 对于Java开发人员来说,Eclipse-jee-neon-3是一个非常有用的工具,它提供了一系列强大的功能和特性。其中包括代码编辑器、调试器、编译器、版本控制、自动完成、语法高亮等等。它还支持各种JEE相关的技术和框架,如Servlet、JSP、EJB、JSF等。 通过Eclipse-jee-neon-3,开发人员可以方便地创建JEE项目,并且能够自动为项目生成基本的代码结构。它还提供了一系列工具和插件,用于简化开发过程,如界面设计器、数据连接器、Web服务器集成等。 除了常规的代码开发功能外,Eclipse-jee-neon-3还提供了一些用于优化代码质量和性能的工具。例如,它可以帮助检测和修复代码中的错误,提供代码建议和重构提示。此外,它还可以进行代码分析和性能测试,并提供相应的报告和建议。 Eclipse-jee-neon-3还支持与其他开发工具和框架的集成。例如,它可以与Maven、Ant、Git等工具进行无缝协作,方便进行项目构建和版本管理。同时,它还可以与常见的应用服务器集成,如Tomcat、WebSphere、JBoss等,方便部署和调试应用程序。 总之,Eclipse-jee-neon-3是一个强大而且功能丰富的开发工具,非常适合开发Java Enterprise Edition应用程序的开发人员使用。通过它,开发人员可以更快速、高效地开发和调试应用程序,提高开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值