事务内存(Transaction Memory)是最近几年非常火热的研究方向之一.如果成功,IBM将是首个引入该支持的.IBM是在HotChip 2011上宣布这一消息的.支持事务内存的芯片PowerPC A2将用来攒BlueGene/Q,一款将在2012年完工的IBM超级计算机.Sun曾在一款已经流产的芯片(Rock) 中实现了该技术.曾经参与此项发言的工程师表示,对于某些特定的应用,事务内存能带来很大的好处,但对其他应用基本没有什么作用. Continue reading »

 

CES展可谓如火如荼。各大厂商纷纷上台。先是出了Intel的Sandy Bridge, AMD Fusion的一系列终端产品,笔记本电脑、台式机、平板。然后MS坐不住了,说windows支持ARM了。NVIDIA也没闲着,说要进军ARM处理器。b

Sandy Bridge是Intel在此次CES上的重拳。各大评测也接踵而至。什么图形计算给力,什么视频编解码牛逼等等。这篇文章,《编译点滴》就来学习一下Sandy Bridge的新特性。 Continue reading »

 

上篇文章前瞻-主流处理器中的数据并行支持(SIMD)>和《前瞻-拿起SIMD的武器I》分别介绍了当今主流CPU中的SIMD扩展 ,以及前人是如何利用SIMD来做优化的,本文<前瞻-拿起SIMD的武器II>将探讨如何使用CPU的向量指令为程序做优化

如何实现?

编程环境

在现在CPU设计中都加入SIMD扩展并不是解决应用性能问题的好方法。如果没有很好的利用途径,再强大的SIMD扩展指令集都是徒劳。接下来,我们从编译器技术和编程方法论上探讨如何使用SIMD指令来实现应用加速。 Continue reading »

 

上篇文章前瞻-主流处理器中的数据并行支持(SIMD)》 介绍了当今主流CPU中的SIMD扩展,本文将介绍前人是物和利用SIMD来做优化的,下篇<前瞻-拿起SIMD的武器II>将探讨如何使用CPU的向量指令为程序做优化

已有在SIMD上的优化工作:

正如之前提到的,SIMD对具有以下特性的程序性能提升明显:天然数据并行,访存模式重复、在局部数据上重复操作、控制流数据无关。很多应用有这方面的特性,并能通过使用SIMD扩展提高性能,但实际仅有小部分从中获益,接下来将介绍在单核处理器上,利用Intel的SIMD扩展针对某些应用提升性能的研究,如多媒体,数据安全,数据库和一些科学计算应用。

多媒体处理

多媒体处理需要软件和硬件的很多支持。如MPEG-1,MPEG-2,MPEG-4,MPEG-7,H.263,JPEG2000等需要实时做复杂的媒体处理.3D图像和立体视频处理都需要更强劲的实时处理.因为各种媒体都需要不同的处理方式,技术支持、算法和硬件,因此针对他们的SIMD扩展改进也很不同。 Continue reading »

 

先看图

大肠杆菌和Linux系统的控制网络对比

大肠杆菌和Linux系统的控制网络对比

图片来自《科学松鼠会》,很棒的探索新知的网站:)

生物信息学里把DNA序列看成生物体的操作系统,这张图左侧是大肠杆菌的控制网络,右侧是Linux系统的。 Continue reading »

 

引言部分:

多媒体处理算法应用在很多媒体处理环境中,如对文本,手写数据,2D/3D图形和音频对象的捕捉、制造、存储和传输等。过去 都是使用昂贵的多媒体处理硬件协同工作来加速。现在,通用处理器通过在体系结构上增加媒体处理支持来减少使用协同处理器分配和返回带来的开销。在通用处理 器上一个基本的操作能同时作用多个元素的支持成为SIMD并行处理。通过SIMD扩展,通用护理器通过捕捉多媒体算法中潜在的并行特性来加速应用。

自 Intel在Pentium II和Pentium 处理器引入了MMX技术以来,IA-32架构已经引入了许多SIMD扩展,分别是:MMX,流SIMD扩展(SSE), 流SIMD扩展(SSE2)和流SIMD扩展(SSE3),SSSE3,SSE4和高级向量扩展(AVX).这些扩展都提供了一组指令,能够为封装好的整点或浮点数据提供SIMD类型的操作。其他结构也 有自己的SIMD扩展。如AMD的3DNow!,Cell和PowerPC的AltiVec等等。 Continue reading »
 

概览SPEC

Standard Performance Evaluation Corporation:标准性能测试协会,一个致力于发布管理计算机性能标准化测试的组织.建立于1988年,会员包括Apple,Dell,IBM,Intel,Microsoft和Sun。Spec的测试例子被光感应用于计算机系统的性能测试中。

SPEC的测试例子是为了测试实际生活中的场景,如SPEC web2005通过并发HTTP请求测试web服务器的性能.SPEC CPU通过多个例子的运行时间长短衡量CPU的性能。SPEC的测试例子都采用平台无关代码编写,以便能使用各种编译器和平台来测试。现在的工业界更是针对SPEC中的测试例子做优化来证明编译器,CPU,web服务器等等的性能提升。

SPEC发布了以下性能测试集:

  • SPEC CPU2006/2000用来测试CPU,存储和编译器的性能
  • SPEC jms 2007,用于测试JAVA消息服务的性能
  • SPEC web 2005 用于测试PHP或者JSP的性能
  • SPEC Viewperf,用于测试OpenGL 3D图形系统的性能
  • SPEC apc,用于测试给定系统中多个3D交互应用的性能
  • SPEC OMP2001 使用OpenMP测试并行系统的性能
  • SPEC MPI2007 使用MPI测试并行系统的性能
  • SPEC JVM 2008,测试Java Runtime Environment(JAVA运行时环境,JRE)在不同客户和服务器系统上的JAVA性能
  • SPEC jAppServer2004, 测试JAVA 2 Enterprise Edition应用服务器的性能
  • SPEC jbb2005,同样测试JAVA系统的性能,但测试的是a three-tier client/server system (with emphasis on the middle tier)
  • SPEC Mail2001,测试邮件服务器的 Continue reading »
 

大尾端(big endian)和小尾端(little endian)的问题类似于写字时是从右往左写还是从左往右写的问题。说起来不难,但是在计算机世界中,我们必须要规定采用哪种形式,而并无优劣之分,所以演变到现在,就既有大尾又有小尾.X86就是小尾的,龙芯也用的小尾,早期的MIPS使用的是大尾端,这决定了访存的方向问题。

精确的讲,大尾端和小尾端的区别是系统里整数是从右往左表示还是从左往右表示。表示的不同就意味着重要性不同的位位置不同,大尾端从左往右表示,那么权重大的字节在左边即在低地址处,而小尾端相反。不管时处理器,虚拟机还是网路协议都需要规定大小尾端问题。
如图是X86的存储形式,若大小尾端混用,则会一团糟。


Continue reading »

 

本博在实际工作中,经常被MIPS I,MIPS II,MIPS 32之类的名词搞混,特整理如下。

MIPS 最初是Microprocessor without Interlocked Pipeline Stages的简称,最早由MIPS公司开发的精简指令集组成,最早是32位,之后时64位。该指令集有很多版本,包括MIPS I,MIPS II ,MIPS III, MIPS IV, MIPS V ,MIPS32和MIPS64.当前主要有MIPS32和MIPS64,这两个指令集定义了一个控制寄存器和指令集。

大学里多使用MIPS结构教学,Alpha就深受MIPS 精简指令集的影响。目前的MIPS之用用在很多嵌入式系统中如Windows CE设备,路由器,网关和游戏机(PS,PSP).

MIPS结构最早由斯坦福大学的John L. Hennessy(量化研究的作者)领导设计,初衷是充分利用指令流水线。除了采用流水线,以及充分利用流水线外,MIPS还引入了寄存器窗口技术(register windows),通过这种窗口,被调用函数能申请自己的寄存器集,再利用精确的编译器计算,就能找到空闲寄存器,不必依赖硬件实现。这种方式能提升性能。

目前的MIPS 32基于MIPS II并吸收了MIPS III, MIPS IV和MIPS V的特性,MIPS64则是基于MIPS V。MIPS V主要是用来提升3D图形应用的性能。

龙芯2E/F兼容 64位MIPS III指令系统,四发射。龙芯3号则是直接MIPS 64,也就是说增加3D加速。

参考:

http://en.wikipedia.org/wiki/MIPS_architecture

http://www.tektalk.org/2009/06/24/%E9%BE%99%E8%8A%AFcpu%EF%BC%8813%EF%BC%89%E2%80%93%E9%BE%99%E8%8A%AF%E8%8E%B7mips%E6%AD%A3%E5%BC%8F%E6%8E%88%E6%9D%83/

 

这两天在折腾小例子,用来表现对语言做某种扩展后将可更高效的编程。我那蹩脚的coding技术捉襟见肘。一个小例子要言简意赅,写在半页ppt里,要有对比,有突出,又要很直观。尝试了很多次。写小例子很能考察编程能力,指针,静态,数组,寄存器变量,各个类型长度等等。要达到瞄一眼就能印象深刻,被震撼的感觉,难!

眼见为实,看下面的小例子,简单的写个循环:

[code lang="cpp"]
ip (short int* fb, short int* bb,short int* res)
{
int i=0;
for (; i&lt; 8; i++)
res[i] = fb[i] + bb[i]+1;
}[/code]

在龙芯上用simd(单指令多数据,一条指令可以存多个数据)来实现的话,需要这么写,别忘了包含loongson.h头文件,这段代码在gcc4.3之后才支持: Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量