首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 IBM z13 SIMD 单元和 IBM z/OS XL C/C++ 编译器为 C/C++ 程序添加并行性(1)

使用 IBM z13 SIMD 单元和 IBM z/OS XL C/C++ 编译器为 C/C++ 程序添加并行性(1)

C 和 C++ 语言中的并行性最新的 C 和 C++ 语言标准提供了线程支持和原子支持(atomics),但即便有这一支持,并行性仍然未得到尽可能深的利用。例如,没有一种规范的单指令多数据 (SIMD)        风格编码方式。
IBM z/OS XL C/C++ V2.1.1 编译器提供适应现有的 C 和 C++ 类型系统的新数据类型,增添了对 SIMD        数据级并行性的支持,使用现有的运算符以自然直观的方式处理新类型,并且提供大量内置函数 (BIF),这些函数可用于充分利用 SIMD 硬件级功能。
编写高效的代码来对大量数据执行一系列类似或相同的转换,是一项常见任务。只要数据在转换期间没有依赖项,它通常就是实现并行性的一个首要候选对象。
封装数据以供高效操作、高效转换和快速执行,需要硬件与软件之间有牢固的联系。没有硬件支持,软件开销通常导致代码的性能低下。没有软件支持,代码通常非常难以维护,且可读性较差。
新的 IBM z13 处理器提供了硬件来提高并行性,而 IBM z/OS XL C/C++ V2.1.1        编译器提供了软件来充分利用硬件,从而允许为各个领域(比如业务分析)执行高效、有效、快速的数据处理。
SIMD 原则需要一系列运算的大数据集(SIMD 的多数据 部分)非常适合于封装数据块且允许运算对数据块生效的数据类型。
IBM z13 SIMD 单元支持处理元素大小各异的 16 字节的数据块。它支持对 16 个单字节数据元素、8 个双字节元素、4 个四字节元素或 2 个八字节元素(同样是 SIMD          的多数据 部分)执行运算的指令(SIMD 的单指令 部分)。还有用于对 1 个十六字节元素执行运算的指令,但由于这不适用于 SIMD        模型,本文不打算讨论这个方面。
新数据类型SIMD 单元支持的元素大小对应于一些基本的 C 和 C++ 数据类型。您可以将数据分为各种大小的常规 C 和 C++        类型组。这种分块以名为矢量数据类型的一个新数据类型系列为代表。此数据类型对于 C 和 C++ 是一样的,支持两种语言之间的互操作性。
矢量系列的数据类型的共同特征是,在语法上,它们均以 vector 或 __vector          关键字开头,后面紧接着实际元素类型。vector 关键字通过 VECTOR 选项引入。为简便起见,本文将使用 vector        关键字,不过每当 vector 关键字存在时,__vector 都有效。
矢量系列类型支持的元素是常规的整数类型(char 到 long long int)和双精度类型,连同每个整数类型的布尔版本,如表        1 所示。
表 1. 矢量数据类型  类型  内容阐释  值域 vector unsigned char 16 位无符号字符型 0..255 vector signed char 16 位有符号字符型 -128..127 vector bool char 16 位无符号字符型 0 (FALSE), 255 (TRUE) vector unsigned short 8 位无符号短整型  0..65535 vector unsigned short intvector signed short 8 位有符号短整型 -32768..32767 vector signed short intvector bool short 8 位无符号短整型 0 (FALSE), 65535 (TRUE) vector bool short intvector unsigned int 4 位无符号整型 0..232-1 vector signed int 4 位有符号整型 -231..231-1 vector bool int 4 位无符号整型  0 (FALSE), 232-1 (TRUE) vector unsigned long long 2 位无符号双长整型  0..264-1 vector signed long long 2 位有符号双长整型 -263..263-1 vector bool long long 2 位无符号双长整型  0 (FALSE), 264-1 (TRUE) vector double 2 位双精度型 IEEE-754 双(64 位)精度浮点值 请注意,long long int 类型是可用的,因为 VECTOR 选项意味着 LANGLVL(LONGLONG) 和          double 类型仅在 IEEE 模式下可用,可通过指定 FLOAT(IEEE) 选项使用它们。
矢量系列中的数据类型均按 8 字节边界对齐。
指定数据类型文字的方式类似于 C99 复合文字机制,以矢量类型为cast        部分,矢量元素值在括号(或圆括号括起的)列表中。括号(或圆括号括起的)元素列表也可用于初始化矢量类型。
矢量运算如不能对数据执行转换或运算,那么矢量数据类型不是很有用。使用大量标准 C 和 C++ 运算符,如同矢量数据类型是正常的基本算术类型,允许通过一种简明可读的机制编写 SIMD        算法。
返回列表