龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

SSE指令介绍及其C、C++应用(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
static __int64 nCurCount; QueryPerformanceCounter( (PLARGE_INTEGER)nCurCount ); return double( nCurCount * ( *(__int64*)m_StartCount ) ) / double( *(__int64*)m_Frequency ); } private: LARGE_INTEGER m_

              static __int64 nCurCount;

              QueryPerformanceCounter( (PLARGE_INTEGER)&nCurCount );

              return double( nCurCount * ( *(__int64*)&m_StartCount ) ) / double( *(__int64*)&m_Frequency );

       }

private:

       LARGE_INTEGER m_Frequency;

       LARGE_INTEGER m_StartCount;

};

void ScaleValue1( float *pArray, DWORD dwCount, float fScale )

{

       DWORD dwGroupCount = dwCount / 4;

       __m128 e_Scale = _mm_set_ps1( fScale );

       for ( DWORD i = 0; i < dwGroupCount; i++ )

       {

              *(__m128*)( pArray + i * 4 ) = _mm_mul_ps( *(__m128*)( pArray + i * 4 ), e_Scale );

       }

}

void ScaleValue2( float *pArray, DWORD dwCount, float fScale )

{

       for ( DWORD i = 0; i < dwCount; i++ )

       {

              pArray[i] *= fScale;

       }

}

#define ARRAYCOUNT 10000

int __cdecl main()

{

       float __declspec(align(16)) Array[ARRAYCOUNT];

       memset( Array, 0, sizeof(float) * ARRAYCOUNT );

       CTimer t;

       double dTime;

       t.Reset();

精彩图集

赞助商链接