From c086fbb288c49d314ca09a633e75c288302412aa Mon Sep 17 00:00:00 2001 From: Bill Schmidt Date: Thu, 10 Oct 2019 08:32:53 -0500 Subject: [PATCH] Significant updates to chapters 1-3. Delete old outline file. --- Intrinsics_Reference/ch_biendian.xml | 142 +++++++++++++++++-------- Intrinsics_Reference/ch_intro.xml | 79 +++++++++++++- Intrinsics_Reference/ch_outline.xml | 45 -------- Intrinsics_Reference/ch_techniques.xml | 86 +++++++++++++++ Intrinsics_Reference/fig-fpr-vsr.png | Bin 0 -> 19773 bytes Intrinsics_Reference/fig-vr-vsr.png | Bin 0 -> 27332 bytes 6 files changed, 261 insertions(+), 91 deletions(-) delete mode 100644 Intrinsics_Reference/ch_outline.xml create mode 100644 Intrinsics_Reference/fig-fpr-vsr.png create mode 100644 Intrinsics_Reference/fig-vr-vsr.png diff --git a/Intrinsics_Reference/ch_biendian.xml b/Intrinsics_Reference/ch_biendian.xml index bbefa87..d313167 100644 --- a/Intrinsics_Reference/ch_biendian.xml +++ b/Intrinsics_Reference/ch_biendian.xml @@ -22,11 +22,11 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.biendian"> To ensure portability of applications optimized to exploit the - SIMD functions of POWER ISA processors, the ELF V2 ABI defines a - set of functions and data types for SIMD programming. ELF - V2-compliant compilers will provide suitable support for these - functions, preferably as built-in functions that translate to one - or more POWER ISA instructions. + SIMD functions of POWER ISA processors, this reference defines a + set of functions and data types for SIMD programming. Compliant + compilers will provide suitable support for these functions, + preferably as built-in functions that translate to one or more + POWER ISA instructions. Compilers are encouraged, but not required, to provide built-in @@ -43,27 +43,26 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.biendian"> built-in functions are implemented with different instruction sequences for LE and BE. To achieve this, vector built-in functions provide a set of functions derived from the set of - hardware functions provided by the Power vector SIMD - instructions. Unlike traditional “hardware intrinsic” built-in - functions, no fixed mapping exists between these built-in - functions and the generated hardware instruction sequence. Rather, - the compiler is free to generate optimized instruction sequences - that implement the semantics of the program specified by the - programmer using these built-in functions. + hardware functions provided by the POWER SIMD instructions. Unlike + traditional “hardware intrinsic” built-in functions, no fixed + mapping exists between these built-in functions and the generated + hardware instruction sequence. Rather, the compiler is free to + generate optimized instruction sequences that implement the + semantics of the program specified by the programmer using these + built-in functions. - This is primarily applicable to the POWER SIMD instructions. As - we've seen, this set of instructions operates on groups of 2, 4, - 8, or 16 vector elements at a time in 128-bit registers. On a - big-endian POWER platform, vector elements are loaded from memory - into a register so that the 0th element occupies the high-order - bits of the register, and the (N – 1)th element occupies the - low-order bits of the register. This is referred to as big-endian - element order. On a little-endian POWER platform, vector elements - are loaded from memory such that the 0th element occupies the - low-order bits of the register, and the (N – 1)th element - occupies the high-order bits. This is referred to as little-endian - element order. + As we've seen, the POWER SIMD instructions operate on groups of 1, + 2, 4, 8, or 16 vector elements at a time in 128-bit registers. On + a big-endian POWER platform, vector elements are loaded from + memory into a register so that the 0th element occupies the + high-order bits of the register, and the (N – 1)th element + occupies the low-order bits of the register. This is referred to + as big-endian element order. On a little-endian POWER platform, + vector elements are loaded from memory such that the 0th element + occupies the low-order bits of the register, and the (N – + 1)th element occupies the high-order bits. This is referred to as + little-endian element order. @@ -74,6 +73,46 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.biendian">
+ Language Elements + + The C and C++ languages are extended to use new identifiers + vector, pixel, bool, + __vector, __pixel, and + __bool. These keywords are used to specify vector + data types (). Because + these identifiers may conflict with keywords in more recent C + and C++ language standards, compilers may implement these in one + of two ways. + + + + + __vector, __pixel, + __bool, and bool are defined as + keywords, with vector and pixel as + predefined macros that expand to __vector and + __pixel, respectively. + + + + + __vector, __pixel, and + __bool are defined as keywords in all contexts, + while vector, pixel, and + bool are treated as keywords only within the + context of a type declaration. + + + + + Vector literals may be specified using a type cast and a set of + literal initializers in parentheses or braces. For example, + + vector int x = (vector int) (4, -1, 3, 6); +vector double g = (vector double) { 3.5, -24.6 }; +
+ +
Vector Data Types Languages provide support for the data types in For the C and C++ programming languages (and related/derived languages), these data types may be accessed based on the type names listed in when - Power ISA SIMD language extensions are enabled using either the - vector or __vector keywords. [FIXME: - We haven't talked about these at all. Need to borrow some - description from the AltiVec PIM about the usage of vector, - bool, and pixel, and supplement with the problems this causes - with strict-ANSI C++. Maybe a separate section on "Language - Elements" should precede this one.] + POWER SIMD language extensions are enabled using either the + vector or __vector keywords. For the Fortran language, such as vec_xl and vec_xst are provided for unaligned data access. + + One vector type may be cast to another vector type without + restriction. Such a cast is simply a reinterpretation of the + bits, and does not change the data. + Compilers are expected to recognize and optimize multiple operations that can be optimized into a single hardware @@ -252,6 +291,21 @@ register vector double vd = vec_splats(*double_ptr); 216 – 1. + + + vector pixel + + + 16 + + + Quadword + + + Vector of 8 halfwords, each interpreted as a 1-bit + channel and three 5-bit channels. + + vector unsigned int @@ -424,11 +478,9 @@ register vector double vd = vec_splats(*double_ptr); Vector Operators In addition to the dereference and assignment operators, the - Power SIMD Vector Programming API [FIXME: If we're going to use - a term like this, let's use it consistently; also, SIMD and - Vector are redundant] provides the usual operators that are - valid on pointers; these operators are also valid for pointers - to vector types. + POWER Bi-Endian Vector Programming Model provides the usual + operators that are valid on pointers; these operators are also + valid for pointers to vector types. The traditional C/C++ operators are defined on vector types @@ -580,7 +632,7 @@ register vector double vd = vec_splats(*double_ptr); bits are discarded before performing a memory access. These instructions access load and store data in accordance with the program's current endian mode, and do not need to be adapted - by the compiler to reflect little-endian operating during code + by the compiler to reflect little-endian operation during code generation. @@ -683,7 +735,7 @@ register vector double vd = vec_splats(*double_ptr); Previous versions of the VMX built-in functions defined intrinsics to access the VMX instructions lvsl and lvsr, which could be used in conjunction with - vec_vperm and VMX load and store instructions for + vec_perm and VMX load and store instructions for unaligned access. The vec_lvsl and vec_lvsr interfaces are deprecated in accordance with the interfaces specified here. For compatibility, the @@ -694,12 +746,14 @@ register vector double vd = vec_splats(*double_ptr); discouraged and usually results in worse performance. It is recommended (but not required) that compilers issue a warning when these functions are used in little-endian - environments. It is recommended that programmers use the - vec_xl and vec_xst vector built-in - functions to access unaligned data streams. See the - descriptions of these instructions in for further description and - implementation details. + environments. + + + It is recommended that programmers use the vec_xl + and vec_xst vector built-in functions to access + unaligned data streams. See the descriptions of these + instructions in for further + description and implementation details.
diff --git a/Intrinsics_Reference/ch_intro.xml b/Intrinsics_Reference/ch_intro.xml index 2b8b693..b2bb054 100644 --- a/Intrinsics_Reference/ch_intro.xml +++ b/Intrinsics_Reference/ch_intro.xml @@ -128,12 +128,87 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="section_intro">
The Unified Vector Register Set - filler + + In OpenPOWER-compliant processors, floating-point and vector + operations are implemented using a unified vector-scalar model. + As shown in and , there are 64 vector-scalar registers; each + is 128 bits wide. + + + The vector-scalar registers can be addressed with VSX + instructions, for vector and scalar processing of all 64 + registers, or with the "classic" POWER floating-point + instructions to refer to a 32-register subset of these, having + 64 bits per register. They can also be addressed with VMX + instructions to refer to a 32-register subset of 128-bit registers. + +
+ Floating-Point Registers as Part of VSRs + + + + + +
+
+ Vector Registers as Part of VSRs + + + + + +
Useful Links - filler + + The following documents provide additional reference materials. + + + + + 64-Bit ELF V2 ABI Specification - Power + Architecture. + + https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture + + + + + + + AltiVec Technology Program Interface + Manual. + + https://www.nxp.com/docs/en/reference-manual/ALTIVECPIM.pdf + + + + + + + Intel Architecture Instruction Set Extensions and + Future Features Programming Reference. + + https://software.intel.com/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programming-reference.pdf + + + + + + + Power Vector Library. + + https://github.com/open-power-sdk/pveclib + + + + +
diff --git a/Intrinsics_Reference/ch_outline.xml b/Intrinsics_Reference/ch_outline.xml deleted file mode 100644 index 429fbf9..0000000 --- a/Intrinsics_Reference/ch_outline.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Notes on what to include - - - - Rewrite the material from ABI Chapter 6 - - - Recommendations for different ways to create efficient vector - code - - - Portable: C,C++; tricks to help compiler vectorize code - - - Use intrinsics - - - Assembly code - not recommended, but if you must - - - - - - - diff --git a/Intrinsics_Reference/ch_techniques.xml b/Intrinsics_Reference/ch_techniques.xml index 1f795f3..3f8f4c1 100644 --- a/Intrinsics_Reference/ch_techniques.xml +++ b/Intrinsics_Reference/ch_techniques.xml @@ -51,6 +51,92 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="section_techniques">
Use Assembly Code Sparingly filler +
+ Inline Assembly + filler +
+
+ Assembly Files + filler +
+
+ +
+ Other Vector Programming APIs + In addition to the intrinsic functions provided in this + reference, programmers should be aware of other vector programming + API resources. +
+ x86 Vector Portability Headers + + Recent versions of the gcc and clang + open source compilers provide "drop-in" portability headers + for portions of the Intel Architecture Instruction Set + Extensions (see ). These + headers mirror the APIs of Intel headers having the same + names. Support is provided for the MMX and SSE layers, up + through SSE4. At this time, no support for the AVX layers is + envisioned. + + + The portability headers provide the same semantics as the + corresponding Intel APIs, but using VMX and VSX instructions + to emulate the Intel vector instructions. It should be + emphasized that these headers are provided for portability, + and will not necessarily perform optimally (although in many + cases the performance is very good). Using these headers is + often a good first step in porting a library using Intel + intrinsics to POWER, after which more detailed rewriting of + algorithms is usually desirable for best performance. + + + Access to the portability APIs occurs automatically when + including one of the corresponding Intel header files, such as + <mmintrin.h>. + +
+
+ The POWER Vector Library (pveclib) + The POWER Vector Library, also known as + pveclib, is a separate project available from + github (see ). The + pveclib project builds on top of the intrinsics + described in this manual to provide higher-level vector + interfaces that are highly portable. The goals of the project + include: + + + + + Providing equivalent functions across versions of the + PowerISA. For example, the Vector + Multiply-by-10 Unsigned Quadword operation + introduced in PowerISA 3.0 (POWER9) can be implemented + using a few vector instructions on earlier PowerISA + versions. + + + + + Providing equivalent functions across compiler versions. + For example, intrinsics provided in later versions of the + compiler can be implemented as inline functions with + inline asm in earlier compiler versions. + + + + + Providing higher-order functions not provided directly by + the PowerISA. One example is a vector SIMD implementation + for ASCII __isalpha and similar functions. + Another example is full __int128 + implementations of Count Leading + Zeroes, Population Count, + and Multiply. + + + +
diff --git a/Intrinsics_Reference/fig-fpr-vsr.png b/Intrinsics_Reference/fig-fpr-vsr.png new file mode 100644 index 0000000000000000000000000000000000000000..abf06898d96fcbe30f7488945cac8ef30c7c7cfb GIT binary patch literal 19773 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 aIy$s_hy6|5X!IKR5$)@@ujQy)1pWtZ@S=GD literal 0 HcmV?d00001