Fork of mbed-dsp. CMSIS-DSP library of supporting NEON

Dependents:   mbed-os-example-cmsis_dsp_neon

Fork of mbed-dsp by mbed official

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

CMSIS-DSP of supporting NEON

What is this ?

A library for CMSIS-DSP of supporting NEON.
We supported the NEON to CMSIS-DSP Ver1.4.3(CMSIS V4.1) that ARM supplied, has achieved the processing speed improvement.
If you use the mbed-dsp library, you can use to replace this library.
CMSIS-DSP of supporting NEON is provied as a library.

Library Creation environment

CMSIS-DSP library of supporting NEON was created by the following environment.

  • Compiler
    ARMCC Version 5.03
  • Compile option switch[C Compiler]
   -DARM_MATH_MATRIX_CHECK -DARM_MATH_ROUNDING -O3 -Otime --cpu=Cortex-A9 --littleend --arm 
   --apcs=/interwork --no_unaligned_access --fpu=vfpv3_fp16 --fpmode=fast --apcs=/hardfp 
   --vectorize --asm
  • Compile option switch[Assembler]
   --cpreproc --cpu=Cortex-A9 --littleend --arm --apcs=/interwork --no_unaligned_access 
   --fpu=vfpv3_fp16 --fpmode=fast --apcs=/hardfp


Effects of NEON support

In the data which passes to each function, large size will be expected more effective than small size.
Also if the data is a multiple of 16, effect will be expected in every function in the CMSIS-DSP.


NEON対応CMSIS-DSP

概要

NEON対応したCMSIS-DSPのライブラリです。
ARM社提供のCMSIS-DSP Ver1.4.3(CMSIS V4.1)をターゲットにNEON対応を行ない、処理速度向上を実現しております。
mbed-dspライブラリを使用している場合は、本ライブラリに置き換えて使用することができます。
NEON対応したCMSIS-DSPはライブラリで提供します。

ライブラリ作成環境

NEON対応CMSIS-DSPライブラリは、以下の環境で作成しています。

  • コンパイラ
    ARMCC Version 5.03
  • コンパイルオプションスイッチ[C Compiler]
   -DARM_MATH_MATRIX_CHECK -DARM_MATH_ROUNDING -O3 -Otime --cpu=Cortex-A9 --littleend --arm 
   --apcs=/interwork --no_unaligned_access --fpu=vfpv3_fp16 --fpmode=fast --apcs=/hardfp 
   --vectorize --asm
  • コンパイルオプションスイッチ[Assembler]
   --cpreproc --cpu=Cortex-A9 --littleend --arm --apcs=/interwork --no_unaligned_access 
   --fpu=vfpv3_fp16 --fpmode=fast --apcs=/hardfp


NEON対応による効果について

CMSIS-DSP内の各関数へ渡すデータは、小さいサイズよりも大きいサイズの方が効果が見込めます。
また、16の倍数のデータであれば、CMSIS-DSP内のどの関数でも効果が見込めます。


Revision:
2:da51fb522205
Parent:
1:fdd22bb7aa52
Child:
3:7a284390b0ce
--- a/cmsis_dsp/MatrixFunctions/arm_mat_inverse_f32.c	Wed Nov 28 12:30:09 2012 +0000
+++ b/cmsis_dsp/MatrixFunctions/arm_mat_inverse_f32.c	Thu May 30 17:10:11 2013 +0100
@@ -2,12 +2,12 @@
 * Copyright (C) 2010 ARM Limited. All rights reserved.    
 *    
 * $Date:        15. February 2012  
-* $Revision:     V1.1.0  
+* $Revision: 	V1.1.0  
 *    
-* Project:         CMSIS DSP Library    
-* Title:        arm_mat_inverse_f32.c    
+* Project: 	    CMSIS DSP Library    
+* Title:	    arm_mat_inverse_f32.c    
 *    
-* Description:    Floating-point matrix inverse.    
+* Description:	Floating-point matrix inverse.    
 *    
 * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0
 *  
@@ -67,7 +67,7 @@
  * @brief Floating-point matrix inverse.    
  * @param[in]       *pSrc points to input matrix structure    
  * @param[out]      *pDst points to output matrix structure    
- * @return             The function returns    
+ * @return     		The function returns    
  * <code>ARM_MATH_SIZE_MISMATCH</code> if the input matrix is not square or if the size    
  * of the output matrix does not match the size of the input matrix.    
  * If the input matrix is found to be singular (non-invertible), then the function returns    
@@ -110,39 +110,39 @@
   {
 
     /*--------------------------------------------------------------------------------------------------------------    
-     * Matrix Inverse can be solved using elementary row operations.    
-     *    
-     *    Gauss-Jordan Method:    
-     *    
-     *       1. First combine the identity matrix and the input matrix separated by a bar to form an    
-     *        augmented matrix as follows:    
-     *                        _                      _         _           _    
-     *                       |  a11  a12 | 1   0  |       |  X11 X12  |    
-     *                       |           |        |   =   |           |    
-     *                       |_ a21  a22 | 0   1 _|       |_ X21 X21 _|    
-     *    
-     *        2. In our implementation, pDst Matrix is used as identity matrix.    
-     *    
-     *        3. Begin with the first row. Let i = 1.    
-     *    
-     *        4. Check to see if the pivot for row i is zero.    
-     *           The pivot is the element of the main diagonal that is on the current row.    
-     *           For instance, if working with row i, then the pivot element is aii.    
-     *           If the pivot is zero, exchange that row with a row below it that does not    
-     *           contain a zero in column i. If this is not possible, then an inverse    
-     *           to that matrix does not exist.    
-     *    
-     *        5. Divide every element of row i by the pivot.    
-     *    
-     *        6. For every row below and  row i, replace that row with the sum of that row and    
-     *           a multiple of row i so that each new element in column i below row i is zero.    
-     *    
-     *        7. Move to the next row and column and repeat steps 2 through 5 until you have zeros    
-     *           for every element below and above the main diagonal.    
-     *    
-     *        8. Now an identical matrix is formed to the left of the bar(input matrix, pSrc).    
-     *           Therefore, the matrix to the right of the bar is our solution(pDst matrix, pDst).    
-     *----------------------------------------------------------------------------------------------------------------*/
+	 * Matrix Inverse can be solved using elementary row operations.    
+	 *    
+	 *	Gauss-Jordan Method:    
+	 *    
+	 *	   1. First combine the identity matrix and the input matrix separated by a bar to form an    
+	 *        augmented matrix as follows:    
+	 *				        _ 	      	       _         _	       _    
+	 *					   |  a11  a12 | 1   0  |       |  X11 X12  |    
+	 *					   |           |        |   =   |           |    
+	 *					   |_ a21  a22 | 0   1 _|       |_ X21 X21 _|    
+	 *    
+	 *		2. In our implementation, pDst Matrix is used as identity matrix.    
+	 *    
+	 *		3. Begin with the first row. Let i = 1.    
+	 *    
+	 *	    4. Check to see if the pivot for row i is zero.    
+	 *		   The pivot is the element of the main diagonal that is on the current row.    
+	 *		   For instance, if working with row i, then the pivot element is aii.    
+	 *		   If the pivot is zero, exchange that row with a row below it that does not    
+	 *		   contain a zero in column i. If this is not possible, then an inverse    
+	 *		   to that matrix does not exist.    
+	 *    
+	 *	    5. Divide every element of row i by the pivot.    
+	 *    
+	 *	    6. For every row below and  row i, replace that row with the sum of that row and    
+	 *		   a multiple of row i so that each new element in column i below row i is zero.    
+	 *    
+	 *	    7. Move to the next row and column and repeat steps 2 through 5 until you have zeros    
+	 *		   for every element below and above the main diagonal.    
+	 *    
+	 *		8. Now an identical matrix is formed to the left of the bar(input matrix, pSrc).    
+	 *		   Therefore, the matrix to the right of the bar is our solution(pDst matrix, pDst).    
+	 *----------------------------------------------------------------------------------------------------------------*/
 
     /* Working pointer for destination matrix */
     pInT2 = pOut;
@@ -421,39 +421,39 @@
   {
 
     /*--------------------------------------------------------------------------------------------------------------       
-     * Matrix Inverse can be solved using elementary row operations.        
-     *        
-     *    Gauss-Jordan Method:       
-     *                
-     *       1. First combine the identity matrix and the input matrix separated by a bar to form an        
-     *        augmented matrix as follows:        
-     *                        _  _          _        _       _   _         _           _       
-     *                       |  |  a11  a12  | | | 1   0  |   |       |  X11 X12  |         
-     *                       |  |            | | |        |   |   =   |           |        
-     *                       |_ |_ a21  a22 _| | |_0   1 _|  _|       |_ X21 X21 _|       
-     *                              
-     *        2. In our implementation, pDst Matrix is used as identity matrix.    
-     *       
-     *        3. Begin with the first row. Let i = 1.       
-     *       
-     *        4. Check to see if the pivot for row i is zero.       
-     *           The pivot is the element of the main diagonal that is on the current row.       
-     *           For instance, if working with row i, then the pivot element is aii.       
-     *           If the pivot is zero, exchange that row with a row below it that does not        
-     *           contain a zero in column i. If this is not possible, then an inverse        
-     *           to that matrix does not exist.       
-     *           
-     *        5. Divide every element of row i by the pivot.       
-     *           
-     *        6. For every row below and  row i, replace that row with the sum of that row and        
-     *           a multiple of row i so that each new element in column i below row i is zero.       
-     *           
-     *        7. Move to the next row and column and repeat steps 2 through 5 until you have zeros       
-     *           for every element below and above the main diagonal.        
-     *                             
-     *        8. Now an identical matrix is formed to the left of the bar(input matrix, src).       
-     *           Therefore, the matrix to the right of the bar is our solution(dst matrix, dst).         
-     *----------------------------------------------------------------------------------------------------------------*/
+	 * Matrix Inverse can be solved using elementary row operations.        
+	 *        
+	 *	Gauss-Jordan Method:       
+	 *	 	       
+	 *	   1. First combine the identity matrix and the input matrix separated by a bar to form an        
+	 *        augmented matrix as follows:        
+	 *				        _  _	      _	    _	   _   _         _	       _       
+	 *					   |  |  a11  a12  | | | 1   0  |   |       |  X11 X12  |         
+	 *					   |  |            | | |        |   |   =   |           |        
+	 *					   |_ |_ a21  a22 _| | |_0   1 _|  _|       |_ X21 X21 _|       
+	 *					          
+	 *		2. In our implementation, pDst Matrix is used as identity matrix.    
+	 *       
+	 *		3. Begin with the first row. Let i = 1.       
+	 *       
+	 *	    4. Check to see if the pivot for row i is zero.       
+	 *		   The pivot is the element of the main diagonal that is on the current row.       
+	 *		   For instance, if working with row i, then the pivot element is aii.       
+	 *		   If the pivot is zero, exchange that row with a row below it that does not        
+	 *		   contain a zero in column i. If this is not possible, then an inverse        
+	 *		   to that matrix does not exist.       
+	 *	       
+	 *	    5. Divide every element of row i by the pivot.       
+	 *	       
+	 *	    6. For every row below and  row i, replace that row with the sum of that row and        
+	 *		   a multiple of row i so that each new element in column i below row i is zero.       
+	 *	       
+	 *	    7. Move to the next row and column and repeat steps 2 through 5 until you have zeros       
+	 *		   for every element below and above the main diagonal.        
+	 *		   		          
+	 *		8. Now an identical matrix is formed to the left of the bar(input matrix, src).       
+	 *		   Therefore, the matrix to the right of the bar is our solution(dst matrix, dst).         
+	 *----------------------------------------------------------------------------------------------------------------*/
 
     /* Working pointer for destination matrix */
     pInT2 = pOut;