在大型机上使用SIMD指令集

日期: 2015-07-02 作者:Robert Crawford翻译:陈德文 来源:TechTarget中国 英文

使用Z13矢量扩展工具中的SIMD指令集加速社交媒体和大数据工作负载处理。 IBM的z13处理器通过更大容量的缓存,同时多线程,大页面帧,指令流水线管理和单指令多数据,增加高性能大型机服务器的计算能力。  Z13被设计成为大型机提供移动计算能力。并且处理器通过z13矢量扩展设备,回归单指令多数据(SIMD)。

SIMD适量指令能够加速如C和Java语言的处理。矢量指令对过个数据元素进行并行操作,从而使主机能够快速处理大量数据。这对于社交媒体和大数据工作负载来说是个福音,但对面临普通负载的系统程序员来说似乎没有太大的帮助。 SIMD指令通过多种方式增加吞吐量。

大多数机器指令会的结果会覆……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

使用Z13矢量扩展工具中的SIMD指令集加速社交媒体和大数据工作负载处理。

IBM的z13处理器通过更大容量的缓存,同时多线程,大页面帧,指令流水线管理和单指令多数据,增加高性能大型机服务器的计算能力。 

Z13被设计成为大型机提供移动计算能力。并且处理器通过z13矢量扩展设备,回归单指令多数据(SIMD)。

SIMD适量指令能够加速如C和Java语言的处理。矢量指令对过个数据元素进行并行操作,从而使主机能够快速处理大量数据。这对于社交媒体和大数据工作负载来说是个福音,但对面临普通负载的系统程序员来说似乎没有太大的帮助。

SIMD指令通过多种方式增加吞吐量。大多数机器指令会的结果会覆盖输入操作数其中之一不同,大部分SIMD指令集会使用两个输入寄存器,并将结果存储在第三个寄存器。这意味着程序员可以节省与寄存器纠结的时间。

矢量寄存器为128字节长度。前16个寄存器实际上与64位浮点寄存器(FPRs)共存。改变一个FPR同样会破坏对应矢量寄存器的所有字节。存在一些关于通过程序调用保护矢量寄存器的特殊规则,IBM的Assembler Services Guide有详细说明。

SIMD向量指令包括所有数学函数和浮点模式。同样也有字符串操作以及用于获取和存储数据的方法。

矢量寄存器内容由1、2、4、8或16字节元素组成。矢量指令掩膜指定需要被操纵原件的尺寸。所有矢量指令助记符从V开始,虽然IBM同样还为特定的元素大小提供了额外的记忆空间,具体可以查阅z13 Principles of Operation手册低21章24节。

SIMD指令如何工作


手册还指出了一些额外的细微差别,但这些简单的向量指令可以揭示SIMD指令集如何适用于Z13。

加载矢量寄存器的命令看起来很熟悉:

VL  V1, D2(X2,B2)

其中V1是矢量寄存器,D2是位移,X2和B2为索引与基地址寄存器。

但是,由于矢量寄存器的内容有元素组成,还有指令可以与他们单独打交道。例子之一就是Vector Load Element指令,可以更新一个元素:

VLEx V1,D2(X2,B2)M3

其中x指定元素的大小,B为字节,H为半字(16位),F为全字以及G为双字。V1、D2、 X2 与 B2操作数扮演熟悉的角色,但M3的掩膜指定字段的索引并更新。因此VLEH V1,HALFWORD,3会更新矢量寄存器1的第四个半字,并保持其他元素不变。

在常规负载下,SIMD向量负载指令集有多种方法来产生掩膜,从通用寄存器插入元素并从一种矢量包装元素到寄存器。这与十进制不大一样——这种能力能减半元素并将其压缩到另一个寄存器。

Vector register examples


假设我们已经加载了两个矢量寄存器,每个寄存器有8个半字整数,我们可以将所有元素合在一起,用一条矢量添加指令:

VA  V1,V2,V3,M4

本例中,处理器把V2和V3中的半字元素相加并保存在V1中,这样体现了SIMD指令的非破坏自然属性。掩膜值应该与半字相同。处理器会将溢出移动到整数符号位,这样可以使计算有点棘手。

矢量指令同样也支持字符串函数。只要掌握几个复杂选项,SIMD字符串功能就能变得更简单一些,你可以把他们作为硬件实现C语言字符串处理函数。让我们以Vector Find Element Equal为例:

VFEE V1,V2,V3,M4[,M5]

在高级别上,该指令会比较V2与V3中的元素,并在V1设置相应的标识。掩膜M4表示元素的大小,M5指定两件事:设置位2告诉处理器比较V2、V3和0。当位4等于1,处理器将会设置条件码。在任何速率下,指令会从左往右比较第二个和第三个操作数元素。当它发现相等的元素,就会在第一个操作数的第七字节设置元素字节索引。如果没有元素相等,第一个操作数的第七字节将包含一个与寄存器元素数量相等的字节索引。如果指令发现所有元素都为零,也会进行同样的操作。

作者

Robert Crawford
Robert Crawford

数据中心专家

翻译

陈德文
陈德文

TechTarget中国特约编辑

相关推荐