timesoftfloat.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 2,091 行 · 第 1/5 页
C
2,091 行
count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_a_float32_z_float64( float64 function( float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#ifdef FLOATX80static void time_a_float32_z_floatx80( floatx80 function( float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#endif#ifdef FLOAT128static void time_a_float32_z_float128( float128 function( float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#endifstatic void time_az_float32( float32 function( float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_ab_float32_z_flag( flag function( float32, float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNumA, inputNumB; count = 0; inputNumA = 0; inputNumB = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNumA = 0; inputNumB = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_abz_float32( float32 function( float32, float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNumA, inputNumB; count = 0; inputNumA = 0; inputNumB = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNumA = 0; inputNumB = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32[ inputNumA ], inputs_float32[ inputNumB ] ); inputNumA = ( inputNumA + 1 ) & ( numInputs_float32 - 1 ); if ( inputNumA == 0 ) ++inputNumB; inputNumB = ( inputNumB + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static const float32 inputs_float32_pos[ numInputs_float32 ] = { 0x4EFA0000, 0x41D0B328, 0x00000000, 0x3E69A31E, 0x2F803EFF, 0x3F800000, 0x17BF8000, 0x674A301A, 0x4E010003, 0x7EE3C75D, 0x3D803FE0, 0x3FFEFF00, 0x7981F800, 0x431FFFFC, 0x4100C000, 0x3D87EFFF, 0x4103FEFE, 0x3C000007, 0x3F01F7FF, 0x4E6C6B5C, 0x4187FFFE, 0x458B9F13, 0x4F88007F, 0x5F004007, 0x37FFD7FE, 0x7E8001FB, 0x46EFFBFF, 0x31C10000, 0x5B428661, 0x33F89B1F, 0x23BFEFFF, 0x537BFFBE};static void time_az_float32_pos( float32 function( float32 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float32_pos[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float32_pos[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float32 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}enum { numInputs_float64 = 32};static const float64 inputs_float64[ numInputs_float64 ] = { LIT64( 0x422FFFC008000000 ), LIT64( 0xB7E0000480000000 ), LIT64( 0xF3FD2546120B7935 ), LIT64( 0x3FF0000000000000 ), LIT64( 0xCE07F766F09588D6 ), LIT64( 0x8000000000000000 ), LIT64( 0x3FCE000400000000 ), LIT64( 0x8313B60F0032BED8 ), LIT64( 0xC1EFFFFFC0002000 ), LIT64( 0x3FB3C75D224F2B0F ), LIT64( 0x7FD00000004000FF ), LIT64( 0xA12FFF8000001FFF ), LIT64( 0x3EE0000000FE0000 ), LIT64( 0x0010000080000004 ), LIT64( 0x41CFFFFE00000020 ), LIT64( 0x40303FFFFFFFFFFD ), LIT64( 0x3FD000003FEFFFFF ), LIT64( 0xBFD0000010000000 ), LIT64( 0xB7FC6B5C16CA55CF ), LIT64( 0x413EEB940B9D1301 ), LIT64( 0xC7E00200001FFFFF ), LIT64( 0x47F00021FFFFFFFE ), LIT64( 0xBFFFFFFFF80000FF ), LIT64( 0xC07FFFFFE00FFFFF ), LIT64( 0x001497A63740C5E8 ), LIT64( 0xC4BFFFE0001FFFFF ), LIT64( 0x96FFDFFEFFFFFFFF ), LIT64( 0x403FC000000001FE ), LIT64( 0xFFD00000000001F6 ), LIT64( 0x0640400002000000 ), LIT64( 0x479CEE1E4F789FE0 ), LIT64( 0xC237FFFFFFFFFDFE )};static void time_a_float64_z_int32( int32 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_a_float64_z_int64( int64 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}static void time_a_float64_z_float32( float32 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#ifdef FLOATX80static void time_a_float64_z_floatx80( floatx80 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#endif#ifdef FLOAT128static void time_a_float64_z_float128( float128 function( float64 ) ){ clock_t startClock, endClock; int32 count, i; int8 inputNum; count = 0; inputNum = 0; startClock = clock(); do { for ( i = minIterations; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } count += minIterations; } while ( clock() - startClock < CLOCKS_PER_SEC ); inputNum = 0; startClock = clock(); for ( i = count; i; --i ) { function( inputs_float64[ inputNum ] ); inputNum = ( inputNum + 1 ) & ( numInputs_float64 - 1 ); } endClock = clock(); reportTime( count, endClock - startClock );}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?