`

SSE的优势简介

阅读更多
为了方便对比速度,我会用常归方法和SSE优化两种写法写出,并会用一个测试速度的类CTimer来进行计时。  这个算法是对一组float值进行放大,函数ScaleValue1是使用SSE指令优化的,函数ScaleValue2则没有。我们用10000个元素的float数组数据来测试这两个算法,每个算法运算10000遍,下面是测试程序和结果:

Use SSE:2.07543e+012秒
Not Use SSE:-2.5293e+012秒
请按任意键继续. . .


测试代码如下:
/******test.cpp*******/
#include <xmmintrin.h>
#include<iostream>
#include <windows.h>
using namespace std;

class CTimer

{
public:
__forceinline CTimer( void )
{
QueryPerformanceFrequency( &m_Frequency );
QueryPerformanceCounter( &m_StartCount );
}
__forceinline void Reset( void )
{
QueryPerformanceCounter( &m_StartCount );
}
__forceinline double End( void )
{
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();
for ( int i = 0; i < 100000; i++ )
{
ScaleValue1( Array, ARRAYCOUNT, 1000.0f );
}
dTime = t.End();
cout << "Use SSE:" << dTime << "秒" << endl;
t.Reset();
for ( int i = 0; i < 100000; i++ )
{
ScaleValue2( Array, ARRAYCOUNT, 1000.0f );
}
dTime = t.End();
cout << "Not Use SSE:" << dTime << "秒" << endl;
system( "pause" );
return 0;
}
分享到:
评论

相关推荐

    SIMD 编程的优势

    SSE 是一套专门为 SIMD(单指令多数据)架构设计的指令集。通过它,用户可以同时在多个数据片段上执行运算,实现数据并行(有时又称矢量处理)。例如,我们可以利用这套指令集使两个数组各自相乘

    论文研究 - 使用Multimodel Superensemble方法改善非洲各个地区的季节性气候预测

    该技术在全球许多中心(包括WMO全球生产中心(GPC))运行的大气-海洋总循环模型的气候预测数据集中利用了该技术的更多优势。 在这项工作中使用的模块从FSU耦合模型系统的四个版本,DEMETER项目的七个模型(当前的...

    server-sent-events-and-websockets:带有服务器发送事件和WebSocket的示例Node.js应用

    服务器发送的事件,带有加密价格波动 ... (SSE)是一种规范,用于通过普通的HTTP对Web前端应用程序实施服务器端推送事件。 ... 设置 克隆项目并执行以下命令 npm install node server.js ...上证所的优势: 通过

    第三章作业答案1

    第三章 信息安全工程能力成熟度模型1.SSE-CMM是什么?它的优势和用途是什么?2.SSE-CMM中的过程域有哪几类,每类过程域的特点是什么?3.域维中的基本

    libjpeg-turbo

    JPEG图像编解码器使用SIMD指令(MMX、SSE2、AVX2、Neon、AltiVec)来加速X86、X86—64、ARM和PowerPC系统的基线JPEG压缩和解压缩,以及X86和X86—64系统上的渐进JPEG压缩

    TodoMVC::clipboard:TodoMVC 基于原生 HTML+JS+CSS | 同济大学SSE网络编程课程项目

    TodoMVC:globe_with_meridians::package:手机端模拟long touch便利贴Todo浮动...实用,大量框架和语言实现了 TodoMVC,这带来了一个额外的优势: 一旦熟悉了 TodoMVC,今后熟悉一门新框架(或语言、工具)的成本就更低了

    airPLS:使用自适应迭代加权加权最小二乘进行基线校正

    1.简介自适应迭代加权加权最小二乘(airPLS)算法不需要任何用户干预和先验信息,例如检测到的峰。 它在拟合的基线和原始信号之间迭代地更改和平方误差(SSE)的权重,并使用先前拟合的基线和原始信号之间自适应地...

    Ticker tape 基于空气动力学的粒子系统

    Ticker Tape 是一个技术演示,展示使用诸如复杂粒子运动的升力和阻力进行空气动力学计算。...演示中包括了线程数动态改变以及 SSE (Streaming SIMD Extensions) 利用的能力,以便可以很容易地看到两者的优势。

    x86平台h.264 main profile全规格高性能解码库

    5)产品标杆:在性能指标上一直参照业界性能最佳coreAVC解码库进行对比开发,目前纯解码性能稳定在其120%以上,而且对协议规格的遵守方面则具有明显优势。本解码库吸收了JM 10.2在调测ALLEGRO等专业测试码流时发现的...

    恩洪矿区古构造应力场特征及演化

    恩洪矿区古构造应力场特征及演化,帅伟,王继尧,在区域构造研究的基础上,通过对研究区节理发育特征的分析,表明恩洪矿区节理优势方位为NE向,其发育NNW-SSE两组。通过对相关共轭节

    Gartner发布中国零信任网络访问市场指南

    Gartner发布中国零信任网络访问市场指南:七大...与全球客户相比,中国客户更关注ZTNA,而非统一的安全访问服务边缘(SASE)或安全服务边缘(SSE)产品,这是因为中国客户并没有紧迫的整合需求,而且大量使用本地部署。

    neo_f3kdb:从SAPikachuflash3kyuu_deband分叉

    Neo f3kdb(从flash3kyuu... AVX例程并没有显示太多的性能优势,因此未包含在内。 用法 # AviSynth+ LoadPlugin ( "neo-f3kdb.dll" ) neo_f3kdb ( clip , y = 64 , cb = 64 , cr = 64 , grainy = 0 , grainc = 0 , ...)

    SIMDx86-开源

    该库旨在使用x86处理器的SIMD指令对科学或3D游戏/光栅化器进行高性能计算,以实现无与伦比的优化水平。 这利用了MMX,3DNow!,3DNow!+ / MMX +和SSE / SSE2 / SSE3 / SSSE3的优势

    x86mph-开源

    x86mph是一个优化的库,具有矢量,矩阵和顶点帮助程序(包括自己的TnL),还包含内存帮助程序,以及利用x86的3DNow!,MMX和SSE等优势进行的其他处理,例如图像处理(颜色反转,bpp更改)。

    farmhash:Google的高性能哈希函数系列FarmHash的Node.js实现

    农场杂货 Google的系列快速哈希函数的Node.js... 使用npm install --build-from-source标志可在更现代的CPU(例如具有AVX内在函数的CPU)上获得性能优势。 安装 npm install farmhash yarn add farmhash 用法 const f

    kafka-rest-atmosphere

    相比之下,此特定网关使用不同的方法,即使用kafka-rest的现有REST服务,并透明地使那些服务能够通过大气使用Websocket和其他协议(例如服务器端事件(SSE))进行调用。 另外,添加了新的消费者服务以支持套接字上...

    红蜘蛛教师系统

    采用全新视频驱动核心、MMX/SSE/SSE2指令和多级缓存技术,极大地提高屏幕广播速度和性能,对3D/游戏/电影/多媒体课件/动画/DVD视频/FLASH/POWERPOINT等都能非常流畅地没有任何延迟地进行广播,达到每秒30帧的速度;...

Global site tag (gtag.js) - Google Analytics