Software Tuning, Performance Optimization & Platform Monitoring
Discussion regarding monitoring and software tuning methodologies, Performance Monitoring Unit (PMU) of Intel microprocessors, and platform updating.
Announcements
FPGA community forums and blogs have moved to the Altera Community. Existing Intel Community members can sign in with their current credentials.
1792 Discussions

Test results for CRT-function 'sqrt' for different Floating Point Models

SergeyKostrov
Valued Contributor II
1,296 Views
Intel C++ compiler supports four Floating Point Models: Fast, Precise, Strict and Fast=2 and test results demonstrate how performance is affected when CRT-function sqrt is called ( results are in ASC order ): [ Fast=2 (/fp:fast=2) [Intel C++] ] 32-bit Windows platform CRT Sqrt - float - Calculating the Square Roots - 203 ticks Last Result: 134217728.000^0.5 = 11585.236 CRT Sqrt - double - Calculating the Square Roots - 750 ticks Last Result: 134217728.000^0.5 = 11585.237 [ Fast (/fp:fast) ] 32-bit Windows platform CRT Sqrt - float - Calculating the Square Roots - 219 ticks Last Result: 134217728.000^0.5 = 11585.236 CRT Sqrt - double - Calculating the Square Roots - 750 ticks Last Result: 134217728.000^0.5 = 11585.237 [ Precise (/fp:precise) ] 32-bit Windows platform CRT Sqrt - float - Calculating the Square Roots - 422 ticks Last Result: 134217728.000^0.5 = 11585.237 CRT Sqrt - double - Calculating the Square Roots - 750 ticks Last Result: 134217728.000^0.5 = 11585.237 [ Strict (/fp:strict) ] 32-bit Windows platform CRT Sqrt - float - Calculating the Square Roots - 875 ticks Last Result: 134217728.000^0.5 = 11585.237 CRT Sqrt - double - Calculating the Square Roots - 2969 ticks Last Result: 134217728.000^0.5 = 11585.237 As you can see Fast=2 is the fastest Floating Point Model, and Strict is the slowest ( slower in 875 / 203 = ~4.3x ).
0 Kudos
1 Reply
SergeyKostrov
Valued Contributor II
1,296 Views
Here are source codes of the test case: #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 #endif #include "stdio.h" #include "tchar.h" #include "float.h" #include "math.h" #include "windows.h" #ifdef _WIN32_PLATFORM #define _WIN_PLATFORM _T("32-bit Windows platform") #endif #ifdef _WIN64_PLATFORM #define _WIN_PLATFORM _T("64-bit Windows platform") #endif #define _USE_CRT_SQRT_FLOAT_ #define _USE_CRT_SQRT_DOUBLE_ int _tmain( void ) { _tprintf( _T("%s\n"), _WIN_PLATFORM ); // Initializations unsigned int uiTicksStart = 0U; unsigned int uiControlWordx87 = 0U; int iV = 0; int iNumberOfIterations = 134217728; // 2^27 int iDummy = -1; float fRes = 0.0f; double dRes = 0.0L; uiControlWordx87 = _control87( _PC_53, _MCW_PC ); // Sub-Test 1 - CRT sqrt - float { #ifdef _USE_CRT_SQRT_FLOAT_ _tprintf( _T("CRT Sqrt - float - Calculating the Square Roots") ); uiTicksStart = ::GetTickCount(); for( iV = 0; iV < iNumberOfIterations; iV++ ) { iDummy = -1; fRes = sqrt( ( float )iV ); } _tprintf( _T(" - %ld ticks\n"), ( int )( ::GetTickCount() - uiTicksStart ) ); _tprintf( _T("\tLast Result: %.3f^0.5 = %.3f\n"), ( float )iV, fRes ); #endif } // Sub-Test 2 - CRT sqrt - double { #ifdef _USE_CRT_SQRT_DOUBLE_ _tprintf( _T("CRT Sqrt - double - Calculating the Square Roots") ); uiTicksStart = ::GetTickCount(); for( iV = 0; iV < iNumberOfIterations; iV++ ) { iDummy = -1; dRes = sqrt( ( double )iV ); } _tprintf( _T(" - %ld ticks\n"), ( int )( ::GetTickCount() - uiTicksStart ) ); _tprintf( _T("\tLast Result: %.3f^0.5 = %.3f\n"), ( double )iV, dRes ); #endif } _tprintf( _T("Press ESC to Exit...\n") ); _gettch(); return ( int )0; }
0 Kudos
Reply