Creating a Compiler Optimized Inlineable Implementation of Intel

Total Page:16

File Type:pdf, Size:1020Kb

Creating a Compiler Optimized Inlineable Implementation of Intel International Journal of Academic Engineering Research (IJAER) ISSN: 2000-001X Vol. 2 Issue 7, July – 2018, Pages: 6-13 Creating a Compiler Optimized Inlineable Implementation of Intel Svml Simd Intrinsics Promyk Zamojski1, Raafat Elfouly2 Mathematics and Computer Science Department/ Rhode Island College, RI Email: [email protected], [email protected] Abstract: Single Input Multiple Data (SIMD) provides data parallelism execution via implemented SIMD instructions and registers. Most mainstream computers architectures have been enhanced to provide data parallelism though SIMD extensions. These advances in parallel hardware have not been accompanied by the necessary software libraries granting programmers a set of functions that could work across all major compilers adding a 4x, 8x or 16x performance increase compared to standard SISD. Intel’s SVML library offers SIMD implementation of Math and Scientific functions that have never been ported to work outside of Intel's own compiler. An Open Source inlineable implementation would increase performance and portability. This paper illustrates the development of an alternative compiler neutral implementation of Intel's SVML library. Keywords: Data Parallelism, SIMD Intrinsics, SVML, C++ Math Library, Computer Simulation, Scientific Math Library. 1. INTRODUCTION Compiler[4]. SVML functions can be broken down into 5 main category, Distribution, Division, Exponentiation, Data parallelism occurs when one or more operations Round, Trigonometry and subcategories of __m128, are applied repeatedly to several values. Generally __m128d, __m128i, __m256, __m256d, __m256i, __m512, programming languages sequential programming of scalar __m512d, __m512i corresponding to vector data types. values. Single Input Multiple Data (SIMD) compiler When implementing SVML functions the functions can be intrinsics allow for operations to be grouped together which approximated using Approximation of Taylor series leads to an improved transistors per Floating Point expansion in combination with bitwise manipulation of Operations reducing power usage and overall modern SIMD IEEE745 floating point representation [10],[11],[12]. capable CPUs. SIMD has some limitation because you Reference implementation of scalar version can be translated cannot vectorize different functions with lots of if else into SIMD version from Cephes library[2]. The output of the statements easily. These limitation define SIMD Intrinsic replacement functions can be tested and compared to output programming to be almost a new programming paradigm form SVML library provided in Intel® C++ Compiler[4]. within languages like C or C++. In most modern compilers the work of optimization can generally outperform many ORGANIZATION programmer tricks to generate optimal output. In the case of This paper is organized into four section, section one is the SIMD the compiler is smart enough to transform introduction. In section two we will talk about bitwise Vector/Arrays into optimized SIMD operations. The idea is selection. In section three we will introduce the idea of simple, instead of computing one value of an array at a time fused multiply accumulator FMA. In section four we will your compute identical operation on all values able to fit into SIMD register. All data must be subject to the same talk about the implementation and its parts including sign processing. With the addition of compiler pragmas such as preservation, exponentiation, trigonometry, and distribution Intel® Cilk™ Plus[1], a programmer is able to force the functions. Conclusion and results are in section five. compiler to work harder on specific parts of code to optimize 2. BITWISE SELECTION data-parallelism. However this is not always the case since the compiler cannot re-order all scalar operation to parallel Due to the nature of SIMD functions operating entirely operations. It is possible to do conditional processing within bitwise, sequential functionality must be considered and SIMD however it requires some tricks the compiler does not reworked for sequential implementation of some non- understand how to implement from traditional scalar code. In sequential/bitwise algorithms. This includes conditions the case where automatic vectorization is not an option there where an algorithm can jump from one point of the stack- needs to be a library of fictions a programmer can target. frame to a point in order to compute one value that would be This library should be portable enough to be able to port common in SISD algorithms. code write for this library to be able to be compiled by the main C/C++ compilers that support Intel Intrinsic such as Figure 1: SIMD vs SISD Branching Problem GCC, CLANG and MSVC. Many Vendors have specified an API for Intrinsic such as Intel® short vector math library Bitwise selection occurs when vector bitmask is use to select (SVML) [3] a software standard provided by Intel® C++ values within vector. Vector bitmask produced when SIMD www.ijeais.org/ijaer 6 International Journal of Academic Engineering Research (IJAER) ISSN: 2000-001X Vol. 2 Issue 7, July – 2018, Pages: 6-13 comparative operation is is used to compare 2 vectors performing the operation of a bitwise OR of the result of a resulting in mask of all 1 for true or mask of all 0 for false. (~mask & first_input_value) and the result of the (mask & Each mask corresponds to value held in vector position second_input_value). This functions is completely bitwise in whose size allocated to each data types byte alignment. nature and depends on binary vector representation of TRUE and FALSE to allow the pass of values within each vector __m128 _mm_radian_asin_ps(__m128 a) position within the SIMD register. { __m128 y, n, p; p = _mm_cmpge_ps(a, __m128_1); __m128i _mm_blendv_si128 (__m128i x, __m128i y, __m128i mask) { // if(a >= 1) Generates Mask 0xffffffff -OR- 0x0 // Replace bit in x with bit in y when matching bit in mask is set: n = _mm_cmple_ps(a, __m128_minus_1); return _mm_or_si128(_mm_andnot_si128(mask, x), _mm_and_si128(mask, y)); // if(a <= -1) Generates Mask 0xffffffff -OR- 0x0 } // 0xffffffff is TRUE // 0x0 is FALSE Figure 6: Bitwise selection example code y = _mm_asin_ps(a); y = _mm_blendv_ps(y, __m128_PIo2F, p); // replace value for >= 1 in var y based on 0xffffffff mask y = _mm_blendv_ps(y, __m128_minus_PIo2F, n); Once a programmer understand that bitwise selection masks // replace value for <= -1 in var y based on 0xffffffff mask return y; are used in place of conditional statements the porting of } existing C/C++ library become easier. The programmer Figure 2: SSE SIMD Branching example would still have to account for inefficiency of computing all possible branches and corner cases which would later merge _mm_radian_asin_ps(__m128): push rsi into the resulting SIMD vector. With this in mind movaps xmm9, xmm0 movups xmm8, XMMWORD PTR __m128_1[rip] unnecessary corner cases and redundancy within an cmpleps xmm8, xmm0 cmpleps xmm9, XMMWORD PTR __m128_minus_1[rip] algorithm should be evaluated as critical or noncritical to call __svml_asinf4 movaps xmm1, xmm0 compute the final resulting value. movaps xmm0, xmm8 blendvps xmm1, XMMWORD PTR __m128_PIo2F[rip], xmm0 movaps xmm0, xmm9 blendvps xmm1, XMMWORD PTR __m128_minus_PIo2F[rip], xmm0 movaps xmm0, xmm1 3. FMA INSTRUCTION SET pop rcx ret The FMA instruction set is an extension to the 128-bit and Figure 3: SSE SIMD Branching assembly language 256-bit Streaming SIMD Extensions instructions in the Intel output (Intel C++ Compiler) Compatible microprocessor instruction set to perform fused multiply–add (FMA) There are two variants: float radian_asin(float a){ if(a >= 1){ return PIo2F; } FMA4 is supported in AMD processors starting with the else if(a <= -1){ return -PIo2F;} else{ return asin(a); } Bulldozer (2011) architecture. FMA4 was realized in } hardware before FMA3[6]. Ultimately FMA4[9] was Figure 4: Standard branching example dropped in favor to the superior Intel FMA3 hardware implementation. FMA3 is supported in AMD processors since processors since 2014. Its goal is to remove CPU radian_asin(float): push rsi cycles by combining multiplication and addition into one comiss xmm0, DWORD PTR .L_2il0floatpacket.3[rip] jae ..B1.6 instruction. This would reduce the total exaction time of an movss xmm1, DWORD PTR .L_2il0floatpacket.1[rip] comiss xmm1, xmm0 algorithm. jb ..B1.4 movss xmm0, DWORD PTR .L_2il0floatpacket.2[rip] pop rcx ret __m128 _mm_fmadd_ps(__m128 a, __m128 b, __m128 c) ..B1.4: // Latency ~6 call asinf pop rcx __m128 _mm_add_ps ( _mm_mul_ps (__m128 a, __m128 b), __m128 c) ret // Latency ~10 ..B1.6: movss xmm0, DWORD PTR .L_2il0floatpacket.0[rip] Figure 7: FMA vs SSE CPU Cycle Latency pop rcx ret Figure 5: Standard Branching example assembly 4. IMPLEMENTATION language output (Intel C++ Compiler) SVML compatible library start with the most commonly called functions falling under the family of libC math It is important to understand bitwise selection in SSE SIMD functions. Most implementations are portable form operations since they will take the pace of of __m128 to __m128d, __m128 to __m256/__m512 and jumping/branching based on condition in most arithmetic operation. These bitwise operations become fundamental in __m128d to __m256d/__m512d with minor changes to the design and analysis of SIMD optimized algorithms. numerical constants and corresponding intrinsic for Since all data operation are identical across SIMD vector specific vector datatype. Libc Math functions are able to code segments must be broken up based
Recommended publications
  • Elementary Functions: Towards Automatically Generated, Efficient
    Elementary functions : towards automatically generated, efficient, and vectorizable implementations Hugues De Lassus Saint-Genies To cite this version: Hugues De Lassus Saint-Genies. Elementary functions : towards automatically generated, efficient, and vectorizable implementations. Other [cs.OH]. Université de Perpignan, 2018. English. NNT : 2018PERP0010. tel-01841424 HAL Id: tel-01841424 https://tel.archives-ouvertes.fr/tel-01841424 Submitted on 17 Jul 2018 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. Délivré par l’Université de Perpignan Via Domitia Préparée au sein de l’école doctorale 305 – Énergie et Environnement Et de l’unité de recherche DALI – LIRMM – CNRS UMR 5506 Spécialité: Informatique Présentée par Hugues de Lassus Saint-Geniès [email protected] Elementary functions: towards automatically generated, efficient, and vectorizable implementations Version soumise aux rapporteurs. Jury composé de : M. Florent de Dinechin Pr. INSA Lyon Rapporteur Mme Fabienne Jézéquel MC, HDR UParis 2 Rapporteur M. Marc Daumas Pr. UPVD Examinateur M. Lionel Lacassagne Pr. UParis 6 Examinateur M. Daniel Menard Pr. INSA Rennes Examinateur M. Éric Petit Ph.D. Intel Examinateur M. David Defour MC, HDR UPVD Directeur M. Guillaume Revy MC UPVD Codirecteur À la mémoire de ma grand-mère Françoise Lapergue et de Jos Perrot, marin-pêcheur bigouden.
    [Show full text]
  • Andre Heidekrueger
    AMD Heterogenous Computing X86 in development AMD new CPU and Accelerator Designs Building blocks for Heterogenous computing with the GPU Accelerators and the Latest x86 Platform Innovations 1 | Hot Chips | August, 2010 Server Industry Trends China has Seismic The performance of the 265m datasets online gamers fastest supercomputer typically exceed a terabyte grew 500x in the last decade The top 8 systems Accelerator-based on the Green 500 list use accelerators 800 servers on the Green 500 images list are 3x as energy are uploaded to Facebook efficient as those without every second 2 | Hot Chips | August,accelerators 2010 2 Top500.org Performance Projections: Can the Current Trajectory Achieve Exascale? 1 EFlops Might get there on current trajectory, but… • Too late for major government programs leading to 2018 • System power in traditional x86 architecture would be unmanageable Source for chart: Top500.org; annotations by AMD 3 | Hot Chips | August, 2010 Three Eras of Processor Performance Multi-Core Heterogeneous Single-Core Systems Era Era Era Enabled by: Enabled by: Enabled by: Moore’s Law Moore’s Law Moore’s Law Voltage Scaling Desire for Throughput Abundant data parallelism Micro-Architecture 20 years of SMP arch Power efficient GPUs Constrained by: Constrained by: Temporarily constrained by: Power Power Programming models Complexity Parallel SW availability Communication overheads Scalability o o ? we are we are here o here we are Performance here thread Performance - Time Time Application Targeted Time Throughput Throughput Performance (# of Processors) (Data-parallel exploitation) Single 4 | Driving HPC Performance Efficiency Fusion Architecture The Benefits of Heterogeneous Computing x86 CPU owns GPU Optimized for the Software World Modern Workloads .
    [Show full text]
  • Operating Systems and Applications for Embedded Systems >>> Toolchains
    >>> Operating Systems And Applications For Embedded Systems >>> Toolchains Name: Mariusz Naumowicz Date: 31 sierpnia 2018 [~]$ _ [1/19] >>> Plan 1. Toolchain Toolchain Main component of GNU toolchain C library Finding a toolchain 2. crosstool-NG crosstool-NG Installing Anatomy of a toolchain Information about cross-compiler Configruation Most interesting features Sysroot Other tools POSIX functions AP [~]$ _ [2/19] >>> Toolchain A toolchain is the set of tools that compiles source code into executables that can run on your target device, and includes a compiler, a linker, and run-time libraries. [1. Toolchain]$ _ [3/19] >>> Main component of GNU toolchain * Binutils: A set of binary utilities including the assembler, and the linker, ld. It is available at http://www.gnu.org/software/binutils/. * GNU Compiler Collection (GCC): These are the compilers for C and other languages which, depending on the version of GCC, include C++, Objective-C, Objective-C++, Java, Fortran, Ada, and Go. They all use a common back-end which produces assembler code which is fed to the GNU assembler. It is available at http://gcc.gnu.org/. * C library: A standardized API based on the POSIX specification which is the principle interface to the operating system kernel from applications. There are several C libraries to consider, see the following section. [1. Toolchain]$ _ [4/19] >>> C library * glibc: Available at http://www.gnu.org/software/libc. It is the standard GNU C library. It is big and, until recently, not very configurable, but it is the most complete implementation of the POSIX API. * eglibc: Available at http://www.eglibc.org/home.
    [Show full text]
  • Hierarchical Roofline Analysis for Gpus: Accelerating Performance
    Hierarchical Roofline Analysis for GPUs: Accelerating Performance Optimization for the NERSC-9 Perlmutter System Charlene Yang, Thorsten Kurth Samuel Williams National Energy Research Scientific Computing Center Computational Research Division Lawrence Berkeley National Laboratory Lawrence Berkeley National Laboratory Berkeley, CA 94720, USA Berkeley, CA 94720, USA fcjyang, [email protected] [email protected] Abstract—The Roofline performance model provides an Performance (GFLOP/s) is bound by: intuitive and insightful approach to identifying performance bottlenecks and guiding performance optimization. In prepa- Peak GFLOP/s GFLOP/s ≤ min (1) ration for the next-generation supercomputer Perlmutter at Peak GB/s × Arithmetic Intensity NERSC, this paper presents a methodology to construct a hi- erarchical Roofline on NVIDIA GPUs and extend it to support which produces the traditional Roofline formulation when reduced precision and Tensor Cores. The hierarchical Roofline incorporates L1, L2, device memory and system memory plotted on a log-log plot. bandwidths into one single figure, and it offers more profound Previously, the Roofline model was expanded to support insights into performance analysis than the traditional DRAM- the full memory hierarchy [2], [3] by adding additional band- only Roofline. We use our Roofline methodology to analyze width “ceilings”. Similarly, additional ceilings beneath the three proxy applications: GPP from BerkeleyGW, HPGMG Roofline can be added to represent performance bottlenecks from AMReX, and conv2d from TensorFlow. In so doing, we demonstrate the ability of our methodology to readily arising from lack of vectorization or the failure to exploit understand various aspects of performance and performance fused multiply-add (FMA) instructions. bottlenecks on NVIDIA GPUs and motivate code optimizations.
    [Show full text]
  • Author Guidelines for 8
    ACCELERATED CODE GENERATOR FOR PROCESSING OCEAN COLOR REMOTE SENSING DATA ON GPU Jae-Moo Heo1, Gangwon Jo2, Hee-Jeong Han1, Hyun Yang 1 1Korea Ocean Satellite Center, Korea Institute of Ocean Science and Technology, Pusan, South Korea 2Seoul National University and ManyCoreSoft Co., Ltd., Seoul, South Korea ABSTRACT GOCI-II ground system in July 2017 and decided to process As the satellite data gradually increases, the processing time algorithms on the Graphics Processing Unit (GPU) in order of the algorithm for remote sensing also increases. It is now to process large amounts of data. essential to make efforts to improve the processing Nowadays, we can take advantage of computation devices performance in various accelerators such as Graphics of various architectures: Many Integrated Core (i.e., Intel Processing Unit (GPU). However, it is very difficult to use Xeon Phi), GPU, and Filed Programmable Gate Array programming models that make programs to run on (FPGA). These accelerators are constantly improving and accelerators. Especially for scientists, easy programming changing. And, parallel programming models that are and performance are often more important than providing compatible with these various accelerators are being many optimization functions and directives. To meet these developed at the same time. However, algorithm source requirements, we developed the accelerated code generator codes have been generally improved for several years or based on Open Computing Language (OpenCL) for several decades and it is not easy to develop a large amount processing ocean color remote sensing data. We easily of these source codes into the existing parallel programming applied our generator to atmospheric correction program for models.
    [Show full text]
  • Theoretical Peak FLOPS Per Instruction Set on Modern Intel Cpus
    Theoretical Peak FLOPS per instruction set on modern Intel CPUs Romain Dolbeau Bull – Center for Excellence in Parallel Programming Email: [email protected] Abstract—It used to be that evaluating the theoretical and potentially multiple threads per core. Vector of peak performance of a CPU in FLOPS (floating point varying sizes. And more sophisticated instructions. operations per seconds) was merely a matter of multiplying Equation2 describes a more realistic view, that we the frequency by the number of floating-point instructions will explain in details in the rest of the paper, first per cycles. Today however, CPUs have features such as vectorization, fused multiply-add, hyper-threading or in general in sectionII and then for the specific “turbo” mode. In this paper, we look into this theoretical cases of Intel CPUs: first a simple one from the peak for recent full-featured Intel CPUs., taking into Nehalem/Westmere era in section III and then the account not only the simple absolute peak, but also the full complexity of the Haswell family in sectionIV. relevant instruction sets and encoding and the frequency A complement to this paper titled “Theoretical Peak scaling behavior of current Intel CPUs. FLOPS per instruction set on less conventional Revision 1.41, 2016/10/04 08:49:16 Index Terms—FLOPS hardware” [1] covers other computing devices. flop 9 I. INTRODUCTION > operation> High performance computing thrives on fast com- > > putations and high memory bandwidth. But before > operations => any code or even benchmark is run, the very first × micro − architecture instruction number to evaluate a system is the theoretical peak > > - how many floating-point operations the system > can theoretically execute in a given time.
    [Show full text]
  • N2429 V 1 Function Failure Annotation
    ISO/IEC JTC 1/SC 22/WG14 N2429 September 23, 2019 v 1 Function failure annotation Niall Douglas Jens Gustedt ned Productions Ltd, Ireland INRIA & ICube, Université de Strasbourg, France We have been seeing an evolution in proposals for the best syntax for describing how to mark how a function fails, such that compilers and linkers can much better optimise function calls than at present. These papers were spurred by [WG21 P0709] Zero-overhead deterministic exceptions, which proposes deterministic exception handling for C++, whose implementation could be very compatible with C code. P0709 resulted in [WG21 P1095] Zero overhead deterministic failure – A unified mecha- nism for C and C++ which proposed a C syntax and exception-like mechanism for supporting C++ deterministic exceptions. That was responded to by [WG14 N2361] Out-of-band bit for exceptional return and errno replacement which proposed an even wider reform, whereby the most popular idioms for function failure in C code would each gain direct calling convention support in the compiler. This paper synthesises all of the proposals above into common proposal, and does not duplicate some of the detail in the above papers for brevity and clarity. It hews closely to what [WG14 N2361] proposes, but with different syntax, and in addition it shows how the corresponding C++ features can be constructed on top of it, without loosing call compatibility with C. Contents 1 Introduction 2 1.1 Differences between WG14 N2361 and WG21 P1095 . .3 2 Proposed Design 4 2.1 errno-related function failure editions . .5 2.2 When to choose which edition .
    [Show full text]
  • Arm C/C++ Compiler Developer and Reference Guide Document ID: 101458 21.1 01 En Version 21.1
    Arm C/C++ Compiler Version 21.1 Developer and Reference Guide Non-Confidential Issue 01 Copyright © 2018–2021 Arm Limited (or its affiliates). 101458_21.1_01_en All rights reserved. Arm C/C++ Compiler Developer and Reference Guide Document ID: 101458_21.1_01_en Version 21.1 Arm C/C++ Compiler Developer and Reference Guide Copyright © 2018–2021 Arm Limited (or its affiliates). All rights reserved. Release information Document history Issue Date Confidentiality Change 1900-00 2 November 2018 Non-Confidential Document release for Arm C/C++ Compiler version 19.0 1910-00 8 March 2019 Non-Confidential Update for Arm C/C++ Compiler version 19.1 1920-00 7 June 2019 Non-Confidential Update for Arm C/C++ Compiler version 19.2 1930-00 30 August 2019 Non-Confidential Update for Arm C/C++ Compiler version 19.3 2000-00 29 November 2019 Non-Confidential Update for Arm C/C++ Compiler version 20.0 2010-00 23 April 2020 Non-Confidential Update for Arm C/C++ Compiler version 20.1 2010-01 23 April 2020 Non-Confidential Documentation update 1 for Arm C/C++ Compiler version 20.1 2020-00 25 June 2020 Non-Confidential Update for Arm C/C++ Compiler version 20.2 2030-00 4 September 2020 Non-Confidential Update for Arm C/C++ Compiler version 20.3 2030-01 16 October 2020 Non-Confidential Documentation update 1 for Arm C/C++ Compiler version 20.3 2100-00 30 March 2021 Non-Confidential Update for Arm C/C++ Compiler version 21.0 2110-00 24 August 2021 Non-Confidential Update for Arm C/C++ Compiler version 21.1 2110-01 26 August 2021 Non-Confidential Documentation update 1 for Arm C/C++ Compiler version 21.1 Proprietary Notice This document is protected by copyright and other related rights and the practice or implementation of the information contained in this document may be protected by one or more patents or pending patent applications.
    [Show full text]
  • Introduction to Intel Scalable Architectures
    Introduction to Intel scalable architectures Fabio Affinito (SCAI - Cineca) Available options... Right here, right now… two kind of solutions are available on the market: ● IBM+ nVIDIA (Coral-like) ● Intel-based (Xeon/Xeon Phi) IBM+NVIDIA Each node will be based on a Power CPU + 4/6/8 nVIDIA TESLA GPUs connected using an nVIDIA NVlink interconnect Intel Xeon and Xeon Phi Intel will keep on with the production of server processors on the Xeon line, together with the introduction of the Xeon Phi many-core chips Intel Xeon Phi will not be a co-processor anymore, but a self-standing CPU with a very high number of cores Such systems are integrated by several vendors in many different configurations (Cray, HP, Lenovo, E4..) MARCONI FERMI, the IBM BlueGene/Q deployed in Cineca ended its lifecycle in 2016 We needed a new HPC machine that could - increase the computational power - respect the agreements with PRACE - satisfy the needs of the italian computing community MARCONI MARCONI NeXtScale architecture nx360M5 nodes: Supporting Intel HSW & BDW Able to host both IB network Mellanox EDR & Intel Omni-Path Twelve nodes are grouped into a Chassis (6 chassis per rack) The compute node is made of: 2 x Intel Broadwell (Xeon processor E5-2697 v4) 18 cores, 2,3 HGz 8 x 16GB DIMM memory (RAM DDR4 2400 MHz), 128 GB total 1 x 129 GB SATA MLC S3500 Enterprise Value SSD Further details 1 x link OPA 100GBs 2*18*2,3*16 = 1.325 GFs peak 24 rack in total: 21 rack compute 1 rack service nodes 2 racks core switch MARCONI - Network MARCONI - Network MARCONI - Storage
    [Show full text]
  • Intel® Architecture Instruction Set Extensions and Future Features
    Intel® Architecture Instruction Set Extensions and Future Features Programming Reference May 2021 319433-044 Intel technologies may require enabled hardware, software or service activation. No product or component can be absolutely secure. Your costs and results may vary. You may not use or facilitate the use of this document in connection with any infringement or other legal analysis concerning Intel products described herein. You agree to grant Intel a non-exclusive, royalty-free license to any patent claim thereafter drafted which includes subject matter disclosed herein. No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document. All product plans and roadmaps are subject to change without notice. The products described may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request. Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade. Code names are used by Intel to identify products, technologies, or services that are in development and not publicly available. These are not “commercial” names and not intended to function as trademarks. Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be ob- tained by calling 1-800-548-4725, or by visiting http://www.intel.com/design/literature.htm. Copyright © 2021, Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries.
    [Show full text]
  • Cab Programming Manual
    Product Marking 1 1 A+ series Mach 4 PX Print Module XD4 Programming Manual J-Script and abc for cab printers Edition 7.0 cab Produkttechnik GmbH & Co KG 1 2 2 JScript - the programming language for cab printers. The usage of all described functions in this manual requires firmware version 3.17 or higher. This is a generic manual which describes the commands for different printer models,which means that it may contain descriptions or explanations of features which are not available on every printer model. cab Produkttechnik GmbH & Co KG 2 3 3 cab Programming Manual valid for following printer types: A+ -Series TM XD4 -Series TM Mach 4 TM PX -Print Module TM and all printing systems based on the cab „X2“ board copyright © cab Produkttechnik GmbH & Co KG all rights reserved No parts of this manual may be copied, rewritten or used for anything else than for original cab printers. This interdicts the usage of the manual for OEM products unless you have a written permission. The cab printers command language is owned and copyrighted by cab Produkttechnik GmbH & Co KG cab Produkttechnik GmbH & Co KG Wilhelm Schickard Str. 14 76131 Karlsruhe / Germany Tel: +49 - 721-6626-0 Fax:+49 - 721-6626-239 Email: [email protected] http://www.cabgmbh.com All registered trademarks or product names are trademarks of their respectives companies SwissTM is registered Trademark of Bitstream Inc. cab Produkttechnik GmbH & Co KG 3 4 4 Table of contents copyright © cab Produkttechnik GmbH & Co KG..................................................................................
    [Show full text]
  • Intel(R) Advanced Vector Extensions Programming Reference
    Intel® Advanced Vector Extensions Programming Reference 319433-011 JUNE 2011 INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANT- ED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL’S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. INTEL PRODUCTS ARE NOT INTENDED FOR USE IN MEDICAL, LIFE SAVING, OR LIFE SUSTAINING APPLICATIONS. Intel may make changes to specifications and product descriptions at any time, without notice. Developers must not rely on the absence or characteristics of any features or instructions marked “re- served” or “undefined.” Improper use of reserved or undefined features or instructions may cause unpre- dictable behavior or failure in developer's software code when running on an Intel processor. Intel reserves these features or instructions for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from their unauthorized use. The Intel® 64 architecture processors may contain design defects or errors known as errata. Current char- acterized errata are available on request. Hyper-Threading Technology requires a computer system with an Intel® processor supporting Hyper- Threading Technology and an HT Technology enabled chipset, BIOS and operating system. Performance will vary depending on the specific hardware and software you use. For more information, see http://www.in- tel.com/technology/hyperthread/index.htm; including details on which processors support HT Technology.
    [Show full text]