Misplaced Pages

Intel C++ Compiler

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

Intel oneAPI DPC++/C++ Compiler and Intel C++ Compiler Classic (deprecated icc and icl is in Intel OneAPI HPC toolkit) are Intel ’s C , C++ , SYCL , and Data Parallel C++ (DPC++) compilers for Intel processor-based systems, available for Windows , Linux , and macOS operating systems.

#686313

37-452: Intel oneAPI DPC++/C++ Compiler is available for Windows and Linux and supports compiling C, C++, SYCL, and Data Parallel C++ (DPC++) source , targeting Intel IA-32 , Intel 64 (aka x86-64 ), Core , Xeon , and Xeon Scalable processors, as well as GPUs including Intel Processor Graphics Gen9 and above, Intel X architecture, and Intel Programmable Acceleration Card with Intel Arria 10 GX FPGA. Like Intel C++ Compiler Classic, it also supports

74-462: A source-code editor that can alert the programmer to common errors. Modification often includes code refactoring (improving the structure without changing functionality) and restructuring (improving structure and functionality at the same time). Nearly every change to code will introduce new bugs or unexpected ripple effects , which require another round of fixes. Code reviews by other developers are often used to scrutinize new code added to

111-430: A trade secret . Proprietary, secret source code and algorithms are widely used for sensitive government applications such as criminal justice , which results in black box behavior with a lack of transparency into the algorithm's methodology. The result is avoidance of public scrutiny of issues such as bias. Access to the source code (not just the object code) is essential to modifying it. Understanding existing code

148-714: A 2005 article at the AMD website: Intel 8.1 C/C++ compiler uses the flag -xN (for Linux) or -QxN (for Windows) to take advantage of the SSE2 extensions. For SSE3, the compiler switch is -xP (for Linux) and -QxP (for Windows). ... With the -xN/-QxN and -xP/-QxP flags set, it checks the processor vendor string—and if it's not "GenuineIntel", it stops execution without even checking the feature flags. Ouch! The Danish developer and scholar Agner Fog wrote in 2009: The Intel compiler and several different Intel function libraries have suboptimal performance on AMD and VIA processors. The reason

185-529: A bottleneck. This led to the introduction of high-level programming languages such as Fortran in the mid-1950s. These languages abstracted away the details of the hardware, instead being designed to express algorithms that could be understood more easily by humans. As instructions distinct from the underlying computer hardware , software is therefore relatively recent, dating to these early high-level programming languages such as Fortran , Lisp , and Cobol . The invention of high-level programming languages

222-480: A computer can execute it. The translation process can be implemented three ways. Source code can be converted into machine code by a compiler or an assembler . The resulting executable is machine code ready for the computer. Alternatively, source code can be executed without conversion via an interpreter . An interpreter loads the source code into memory. It simultaneously translates and executes each statement . A method that combines compilation and interpretation

259-444: A project. The purpose of this phase is often to verify that the code meets style and maintainability standards and that it is a correct implementation of the software design . According to some estimates, code review dramatically reduce the number of bugs persisting after software testing is complete. Along with software testing that works by executing the code, static program analysis uses automated tools to detect problems with

296-406: A specific platform, source code can be ported to a different machine and recompiled there. For the same source code, object code can vary significantly—not only based on the machine for which it is compiled, but also based on performance optimization from the compiler. Most programs do not contain all the resources needed to run them and rely on external libraries . Part of the compiler's function

333-442: Is an overarching term that can refer to a code's correct and efficient behavior, its reusability and portability , or the ease of modification. It is usually more cost-effective to build quality into the product from the beginning rather than try to add it later in the development process. Higher quality code will reduce lifetime cost to both suppliers and customers as it is more reliable and easier to maintain . Maintainability

370-582: Is available either as a standalone component or as part of the Intel oneAPI Base Toolkit, Intel oneAPI HPC Toolkit, and Intel oneAPI IoT Toolkit. The Intel C++ Compiler Classic is available either as a standalone component or as part of the Intel oneAPI Base Toolkit. The Intel compiler provides debugging information that is standard for the common debuggers ( DWARF 2 on Linux, similar to gdb , and COFF for Windows). The flags to compile with debugging information are /Zi on Windows and -g on Linux. Debugging

407-466: Is best known for coining the term " Regality Theory " and for writing extensive optimization manuals for machines running the x86 architecture . Agner Fog is the main investigator of Regality Theory , the proposition that the environment a group is in selects for certain psychological traits. As a result, a harsher environment selects for more regal (warlike) social structures while a safer environment selects for more kungic (peaceful) ones. Agner Fog

SECTION 10

#1732776050687

444-503: Is done on Windows using the Visual Studio debugger and, on Linux, using gdb. While the Intel compiler can generate a gprof compatible profiling output, Intel also provides a kernel level, system-wide statistical profiler called Intel VTune Profiler . VTune can be used from a command line or through an included GUI on Linux or Windows. It can also be integrated into Visual Studio on Windows, or Eclipse on Linux). In addition to

481-452: Is frequently cited as a contributing factor to the maturation of their programming skills. Some people consider source code an expressive artistic medium . Source code often contains comments —blocks of text marked for the compiler to ignore. This content is not part of the program logic, but is instead intended to help readers understand the program. Companies often keep the source code confidential in order to hide algorithms considered

518-408: Is known as a "CPU analyst" to tech websites covering x86 CPUs. He maintains a five-volume manual for optimizing code for x86 CPUs, with details on the instruction timing and other features of individual microarchitectures . He also maintains a Vector Class Library for SIMD math, an assembly subroutine library ("asmlib"), as well as many other utilities. Agner Fog has also written extensively on

555-496: Is necessary to understand how it works and before modifying it. The rate of understanding depends both on the code base as well as the skill of the programmer. Experienced programmers have an easier time understanding what the code does at a high level. Software visualization is sometimes used to speed up this process. Many software programmers use an integrated development environment (IDE) to improve their productivity. IDEs typically have several features built in, including

592-537: Is supported by the CPU, it also checks the vendor ID string. If the vendor string is "GenuineIntel" then it uses the optimal code path. If the CPU is not from Intel then, in most cases, it will run the slowest possible version of the code, even if the CPU is fully compatible with a better version. This vendor-specific CPU dispatching may potentially impact the performance of software built with an Intel compiler or an Intel function library on non-Intel processors, possibly without

629-631: Is that many software engineering courses do not emphasize it. Development engineers who know that they will not be responsible for maintaining the software do not have an incentive to build in maintainability. The situation varies worldwide, but in the United States before 1974, software and its source code was not copyrightable and therefore always public domain software . In 1974, the US Commission on New Technological Uses of Copyrighted Works (CONTU) decided that "computer programs, to

666-466: Is that the compiler or library can make multiple versions of a piece of code, each optimized for a certain processor and instruction set , for example SSE2 , SSE3 , etc. The system includes a function that detects which type of CPU it is running on and chooses the optimal code path for that CPU. This is called a CPU dispatcher. However, the Intel CPU dispatcher does not only check which instruction set

703-477: Is the quality of software enabling it to be easily modified without breaking existing functionality. Following coding conventions such as using clear function and variable names that correspond to their purpose makes maintenance easier. Use of conditional loop statements only if the code could execute more than once, and eliminating code that will never execute can also increase understandability. Many software development organizations neglect maintainability during

740-565: Is to first produce bytecode . Bytecode is an intermediate representation of source code that is quickly interpreted. The first programmable computers, which appeared at the end of the 1940s, were programmed in machine language (simple instructions that could be directly executed by the processor). Machine language was difficult to debug and was not portable between different computer systems. Initially, hardware resources were scarce and expensive, while human resources were cheaper. As programs grew more complex, programmer productivity became

777-418: Is to link these files in such a way that the program can be executed by the hardware. Software developers often use configuration management to track changes to source code files ( version control ). The configuration management system also keeps track of which object code file corresponds to which version of the source code file. The number of lines of source code is often used as a metric when evaluating

SECTION 20

#1732776050687

814-717: The Microsoft Visual Studio and Eclipse IDE development environments, and supports threading via Intel oneAPI Threading Building Blocks , OpenMP , and native threads. DPC++ builds on the SYCL specification from The Khronos Group. It is designed to allow developers to reuse code across hardware targets (CPUs and accelerators such as GPUs and FPGAs) and perform custom tuning for a specific accelerator. DPC++ comprises C++17 and SYCL language features and incorporates open-source community extensions that make SYCL easier to use. Many of these extensions were adopted by

851-556: The Intel C++ Compiler since 1999: VS2008 support: command line only in this release. The IDE integration was not supported yet. Source code In computing , source code , or simply code or source , is a plain text computer program written in a programming language . A programmer writes the human readable source code to control the behavior of a computer . Since a computer, at base, only understands machine code , source code must be translated before

888-565: The Microsoft Visual Studio and Eclipse IDE development environments. Intel C++ Compiler Classic supports threading via Intel oneAPI Threading Building Blocks, OpenMP, and native threads. According to Intel, starting with the 2023.0 release, Intel oneAPI DPC++/C++ Compiler supports all current Intel general-purpose x86-64 CPUs and GPUs including: Intel C++ Compiler Classic targets general-purpose Intel x86-64 architecture CPUs including: The Intel oneAPI DPC++/C++ Compiler

925-562: The SYCL 2020 provisional specification including unified shared memory, group algorithms, and sub-groups. Intel announced in August 2021 the complete adoption of LLVM for faster build times and benefits from supporting the latest C++ standards. Intel C++ Compiler Classic is available for Windows, Linux, and macOS and supports compiling C and C++ source, targeting Intel IA-32, Intel 64 (x86-64), Core, Xeon, and Xeon Scalable processors. It supports

962-765: The VTune profiler, there is Intel Advisor that specializes in vectorization optimization, offload modeling, flow graph design and tools for threading design and prototyping. Intel also offers a tool for memory and threading error detection called Intel Inspector XE. Regarding memory errors, it helps detect memory leaks , memory corruption, allocation/de-allocation of API mismatches and inconsistent memory API usage. Regarding threading errors, it helps detect data races (both heap and stack), deadlocks and thread and synch API errors. Previous versions of Intel’s C/C++ compilers have been criticized for optimizing less aggressively for non-Intel processors; for example, Steve Westfield wrote in

999-540: The applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice. As late as 2013, an article in The Register alleged that the object code produced by the Intel compiler for the AnTuTu Mobile Benchmark omitted portions of the benchmark which showed increased performance compared to ARM platforms. The following lists versions of

1036-597: The behavior of Intel C++ Compiler and Intel MKL on non-Intel CPUs, coining the term "cripple AMD" to describe the bias. Agner Fog is the main author of the C++ Vector Class Library. This is an open source C++ class library for optimizing SIMD code. Agner Fog has designed the ForwardCom instruction set. This is a high performance open source CPU Instruction set architecture with variable-length vector registers . The instruction set

1073-426: The development phase, even though it will increase long-term costs. Technical debt is incurred when programmers, often out of laziness or urgency to meet a deadline, choose quick and dirty solutions rather than build maintainability into their code. A common cause is underestimates in software development effort estimation , leading to insufficient resources allocated to development. A challenge with maintainability

1110-406: The extent that they embody an author's original creation, are proper subject matter of copyright". Proprietary software is rarely distributed as source code. Although the term open-source software literally refers to public access to the source code , open-source software has additional requirements: free redistribution, permission to modify the source code and release derivative works under

1147-475: The instructions can be carried out. After being compiled, the program can be saved as an object file and the loader (part of the operating system) can take this saved file and execute it as a process on the computer hardware. Some programming languages use an interpreter instead of a compiler. An interpreter converts the program into machine code at run time , which makes them 10 to 100 times slower than compiled programming languages. Software quality

Intel C++ Compiler - Misplaced Pages Continue

1184-465: The productivity of computer programmers, the economic value of a code base, effort estimation for projects in development, and the ongoing cost of software maintenance after release. Source code is also used to communicate algorithms between people – e.g., code snippets online or in books. Computer programmers may find it helpful to review existing source code to learn about programming techniques. The sharing of source code between developers

1221-792: The programmer’s knowledge. This has allegedly led to misleading benchmarks , including one incident when changing the CPUID of a VIA Nano significantly improved results. In November 2009, AMD and Intel reached a legal settlement over this and related issues, and in late 2010, AMD settled a US Federal Trade Commission antitrust investigation against Intel. The FTC settlement included a disclosure provision where Intel must: publish clearly that its compiler discriminates against non-Intel processors (such as AMD's designs), not fully utilizing their features and producing inferior code. In compliance with this ruling, Intel added disclaimers to its compiler documentation: Intel's compilers may or may not optimize to

1258-564: The same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to

1295-486: The same license, and nondiscrimination between different uses—including commercial use. The free reusability of open-source software can speed up development. Agner Fog Agner Fog is a Danish evolutionary anthropologist and computer scientist . He is currently an associate professor of computer science at the Technical University of Denmark (DTU), and has been present at DTU since 1995. He

1332-414: The source code. Many IDEs support code analysis tools, which might provide metrics on the clarity and maintainability of the code. Debuggers are tools that often enable programmers to step through execution while keeping track of which source code corresponds to each change of state. Source code files in a high-level programming language must go through a stage of preprocessing into machine code before

1369-480: Was simultaneous with the compilers needed to translate the source code automatically into machine code that can be directly executed on the computer hardware . Source code is the form of code that is modified directly by humans, typically in a high-level programming language. Object code can be directly executed by the machine and is generated automatically from the source code, often via an intermediate step, assembly language . While object code will only work on

#686313