Compilador Intel C ++ - Intel C++ Compiler

Intel C ++ Compiler Classic
Desenvolvedor (s) Intel
Versão estável
2021.1.2 / 16 de dezembro de 2020 ; 8 meses atrás ( 2020-12-16 )
Sistema operacional Windows , macOS , Linux
Modelo Compilador
Licença Freeware , proprietário
Local na rede Internet software .intel .com / conteúdo / www / US / en / Develop / ferramentas / OneAPI / componentes / DPC-compilador .html
Compilador Intel oneAPI DPC ++ / C ++
Desenvolvedor (s) Intel
Versão estável
2021.1.2 / 16 de dezembro de 2020 ; 8 meses atrás ( 2020-12-16 )
Sistema operacional Windows , Linux
Modelo Compilador
Licença Freeware , proprietário
Local na rede Internet software .intel .com / conteúdo / www / US / en / Develop / ferramentas / OneAPI / componentes / DPC-compilador .html

Intel C ++ Compiler clássico e Intel OneAPI DPC ++ / C ++ Compiler são Intel ‘s C , C ++ , SYCL e Parallel Data C ++ (DPC ++) compiladores para sistemas baseados no processador Intel, disponíveis para Microsoft Windows , Linux e MacOS sistemas operacionais.

Visão geral

O Intel C ++ Compiler Classic está disponível para Windows, Linux e macOS e oferece suporte à compilação de fontes C e C ++ , direcionadas aos processadores Intel IA-32 , Intel 64 (também conhecido como x86-64 ), Core , Xeon e Xeon escaláveis . Ele suporta os ambientes de desenvolvimento Microsoft Visual Studio e Eclipse IDE . O Intel C ++ Compiler Classic suporta threading via Intel oneAPI Threading Building Blocks, OpenMP e threads nativos.

O compilador Intel oneAPI DPC ++ / C ++ está disponível para Windows e Linux e suporta a compilação de fontes C, C ++, SYCL e Data Parallel C ++ (DPC ++), visando Intel IA-32, Intel 64 (x86-64), Core, Xeon e Xeon Processadores escaláveis, bem como GPUs incluindo Intel Processor Graphics Gen9 e superior, arquitetura Intel X e e Placa de aceleração programável Intel com Intel Arria 10 GX FPGA. Como o Intel C ++ Compiler Classic, ele também suporta os ambientes de desenvolvimento Microsoft Visual Studio e Eclipse IDE, e suporta threading via Intel oneAPI Threading Building Blocks, OpenMP e threads nativos.

DPC ++ baseia-se na especificação SYCL do Grupo Khronos. Ele é projetado para permitir que os desenvolvedores reutilizem o código em alvos de hardware (CPUs e aceleradores como GPUs e FPGAs) e executem o ajuste personalizado para um acelerador específico. DPC ++ compreende C ++ 17 e recursos de linguagem SYCL e incorpora extensões de comunidade de código aberto que tornam o SYCL mais fácil de usar. Muitas dessas extensões foram adotadas pela especificação provisória SYCL 2020, incluindo memória compartilhada unificada, algoritmos de grupo e subgrupos.

A Intel anunciou em agosto de 2021 a adoção completa do LLVM para tempos de construção mais rápidos e os benefícios do suporte aos padrões C ++ mais recentes.

Arquiteturas

Intel C ++ Compiler Classic visa CPUs de arquitetura Intel x86-64 de uso geral, incluindo:

  • Processadores legados Intel IA-32 e Intel 64 (x86-64)
  • Processadores Intel Core
  • Família de processadores Intel Xeon
  • Processadores escaláveis ​​Intel Xeon

O compilador Intel oneAPI DPC ++ / C ++ gera código para CPUs e GPUs x86-64 de uso geral da Intel :

  • Processadores:
    • Processadores legados Intel IA-32 e Intel 64 (x86-64)
    • Processadores Intel Core
    • Família de processadores Intel Xeon
    • Processadores escaláveis ​​Intel Xeon
  • GPUs:
    • Intel Processor Graphics Gen9 e superior
    • Arquitetura Intel X e
    • Placa de aceleração programável Intel com Intel 10 GX FPGA

Kits de ferramentas

O compilador Intel oneAPI DPC ++ / C ++ está disponível como um componente independente ou como parte do Intel oneAPI Base Toolkit, Intel oneAPI HPC Toolkit e Intel oneAPI IoT Toolkit.

O Intel C ++ Compiler Classic está disponível como um componente autônomo ou como parte do Intel oneAPI Base Toolkit.

Documentação

A documentação pode ser encontrada no site de documentação técnica do software Intel .

janelas Linux e macOS Comente
/ Od -O0 Sem otimização
/ O1 -O1 “Ativa otimizações para velocidade e desativa algumas otimizações que aumentam o tamanho do código e afetam a velocidade”
/ O2 -O2 “Permite otimizações para velocidade. Este é o nível de otimização geralmente recomendado ”
/ O3 -O3 “Executa otimizações de O2 e permite transformações de loop mais agressivas”
/ Ofast -Rápido “Esta opção melhora a velocidade de sua aplicação. Ele define as opções do compilador -O3 , -no-prec-div e -fp-model fast = 2
/ arch: SSE3 -msse3 Ativa otimizações de conjunto de instruções SSE, SSE2 e SSE3 para CPUs não Intel
/ Qprof-gen -prof_gen Compilar o programa e instrumentá-lo para uma execução de geração de perfil
/ Qprof-use -prof_use Só pode ser usado após a execução de um programa que foi compilado anteriormente com o prof_gen . Usa informações de perfil durante cada etapa do processo de compilação

Depurando

O compilador Intel fornece informações de depuração que são padrão para os depuradores comuns ( DWARF 2 no Linux, semelhante ao gdb , e COFF para Windows). Os sinalizadores para compilar com informações de depuração são / Zi no Windows e -g no Linux. A depuração é feita no Windows usando o depurador do Visual Studio e, no Linux, usando gdb.

Enquanto o compilador Intel pode gerar uma saída de perfil compatível com gprof , a Intel também fornece um gerador de perfil estatístico de nível de kernel para todo o sistema, denominado Intel VTune Profiler . O VTune pode ser usado a partir de uma linha de comando ou por meio de uma GUI incluída no Linux ou Windows. Ele também pode ser integrado ao Visual Studio no Windows ou Eclipse no Linux). Além do criador de perfil VTune, existe o Intel Advisor especializado em otimização de vetorização, modelagem de descarregamento, design de gráfico de fluxo e ferramentas para design de threading e prototipagem.

A Intel também oferece uma ferramenta para detecção de erros de memória e threading chamada Intel Inspector XE. Com relação aos erros de memória, ele ajuda a detectar vazamentos de memória , corrupção de memória, alocação / desalocação de incompatibilidades de API e uso inconsistente de API de memória. Com relação aos erros de threading, ele ajuda a detectar corridas de dados (heap e pilha), deadlocks e erros de API de thread e sincronização.

Suporte para processadores não Intel

Versões anteriores dos compiladores C / C ++ da Intel foram criticadas por otimizarem de forma menos agressiva para processadores não Intel; por exemplo, Steve Westfield escreveu em um artigo de 2005 no site da AMD:

O compilador Intel 8.1 C / C ++ usa o sinalizador -xN (para Linux) ou -QxN (para Windows) para aproveitar as extensões SSE2. Para SSE3, a opção do compilador é -xP (para Linux) e -QxP (para Windows). ... Com os sinalizadores -xN / -QxN e -xP / -QxP definidos, ele verifica a string do fornecedor do processador - e se não for "GenuineIntel", ele interrompe a execução sem nem mesmo verificar os sinalizadores de recurso. Ai!

O desenvolvedor e estudioso dinamarquês Agner Fog escreveu em 2009:

O compilador Intel e várias bibliotecas de funções Intel diferentes têm desempenho abaixo do ideal nos processadores AMD e VIA . O motivo é que o compilador ou biblioteca pode fazer várias versões de um trecho de código, cada uma otimizada para um determinado processador e conjunto de instruções , por exemplo SSE2 , SSE3 , etc. O sistema inclui uma função que detecta qual tipo de CPU está executando e escolhe o caminho de código ideal para essa CPU. Isso é chamado de despachante de CPU. No entanto, o despachante da CPU Intel não só verifica qual conjunto de instruções é suportado pela CPU, como também verifica a string de ID do fornecedor. Se a string do fornecedor for "GenuineIntel", ele usará o caminho de código ideal. Se a CPU não for da Intel, na maioria dos casos, ele executará a versão mais lenta possível do código, mesmo se a CPU for totalmente compatível com uma versão melhor.

Esse despacho de CPU específico do fornecedor pode impactar potencialmente o desempenho do software desenvolvido com um compilador Intel ou uma biblioteca de funções Intel em processadores não Intel, possivelmente sem o conhecimento do programador. Isso supostamente levou a benchmarks enganosos , incluindo um incidente ao alterar a CPUID de um VIA Nano melhorou significativamente os resultados. Em novembro de 2009, a AMD e a Intel chegaram a um acordo legal sobre essa e outras questões relacionadas e, no final de 2010, a AMD encerrou uma investigação antitruste da Comissão Federal de Comércio dos Estados Unidos contra a Intel.

O acordo FTC incluiu uma cláusula de divulgação onde a Intel deve:

publique claramente que seu compilador discrimina processadores não-Intel (como os designs da AMD), não utilizando totalmente seus recursos e produzindo código inferior.

Em conformidade com esta decisão, a Intel adicionou isenções de responsabilidade à documentação do compilador:

Os compiladores da Intel podem ou não otimizar no mesmo grau para microprocessadores não Intel para otimizações que não são exclusivas dos microprocessadores Intel. Essas otimizações incluem conjuntos de instruções SSE2, SSE3 e SSSE3 e outras otimizações. A Intel não garante a disponibilidade, funcionalidade ou eficácia de qualquer otimização em microprocessadores não fabricados pela Intel. As otimizações dependentes de microprocessador neste produto devem ser usadas com microprocessadores Intel. Certas otimizações não específicas da microarquitetura Intel são reservadas para microprocessadores Intel. Consulte os guias de referência e do usuário do produto aplicável para obter mais informações sobre os conjuntos de instruções específicas cobertos por este aviso.

Ainda em 2013, um artigo no The Register alegou que o código-objeto produzido pelo compilador Intel para o AnTuTu Mobile Benchmark omitia partes do benchmark que mostrava desempenho aumentado em comparação com as plataformas ARM.

Histórico de lançamento

A seguir estão listadas as versões do Compilador Intel C ++ desde 2003:

Versão do compilador Data de lançamento Principais novos recursos
Intel C ++ Compiler 8.0 15 de dezembro de 2003 Cabeçalhos pré-compilados, ferramentas de cobertura de código.
Compilador Intel C ++ 8.1 Setembro de 2004 Arquitetura AMD64 (para Linux).
Intel C ++ Compiler 9.0 14 de junho de 2005 Arquitetura AMD64 (para Windows), otimização de pré-computação especulativa (SSP) baseada em software, relatórios de otimização de loop aprimorados.
Compilador Intel C ++ 10.0 5 de junho de 2007 Paralelizador e vetorizador aprimorados, Streaming SIMD Extensions 4 ( SSE4 ), relatórios de otimização novos e aprimorados para transformações de loop avançadas, nova implementação otimizada de tratamento de exceções.
Compilador Intel C ++ 10.1 7 de novembro de 2007 Nova biblioteca de tempo de execução de compatibilidade OpenMP *: se você usar o novo OpenMP RTL, poderá misturar e combinar com bibliotecas e objetos construídos pelo Visual C ++. Para usar as novas bibliotecas, você precisa usar a nova opção "-Qopenmp / Qopenmp-lib: compat" no Windows e "-openmp -openmp-lib: compat" no Linux. Esta versão do compilador Intel oferece suporte a mais intrínsecos do Visual Studio 2005.

Suporte VS2008 - linha de comando apenas nesta versão. A integração IDE ainda não era suportada.

Intel C ++ Compiler 11.0 Novembro de 2008 Suporte inicial a C ++ 11 . Integração IDE VS2008 no Windows. OpenMP 3.0. Source Checker para memória estática / diagnóstico paralelo.
Compilador Intel C ++ 11.1 23 de junho de 2009 Suporte para as instruções mais recentes do Intel SSE SSE4.2 , AVX e AES . Extensão do depurador paralelo. Integração aprimorada com Microsoft Visual Studio, Eclipse CDT 5.0 e Mac Xcode IDE.
Intel C ++ Composer XE 2011 até a atualização 5 (compilador 12.0) 7 de novembro de 2010 Extensões de linguagem Cilk Plus , Auto-paralelismo guiado, suporte C ++ 11 aprimorado .
Intel C ++ Composer XE 2011, atualização 6 e superior (compilador 12.1) 8 de setembro de 2011 Extensões de linguagem Cilk Plus atualizadas para suportar a especificação da versão 1.1 e disponível no Mac OS X além do Windows e Linux, Threading Building Blocks atualizados para suportar a versão 4.0, blocos da Apple com suporte no Mac OS X, suporte C ++ 11 aprimorado incluindo suporte para Variadic modelos, suporte OpenMP 3.1.
Intel C ++ Composer XE 2013 (compilador 13.0) 5 de setembro de 2012 Suporte baseado em Linux para coprocessadores Intel Xeon Phi, suporte para Microsoft Visual Studio 12 (Desktop), suporte para gcc 4.7, suporte para instruções Intel AVX 2, atualizações para funcionalidades existentes com foco no desempenho aprimorado do aplicativo.
Intel C ++ Composer XE 2013 SP1 (compilador 14.0) 4 de setembro de 2013 Instalador online; suporte para coprocessadores Intel Xeon Phi; visualizar Win32 apenas com suporte para gráficos Intel; suporte C ++ 11 aprimorado
Intel C ++ Composer XE 2013 SP1 Atualização 1 (compilador 14.0.1) 18 de outubro de 2013 Localização japonesa de 14.0; Suporte para Windows 8.1 e Xcode 5.0
Compilador Intel C ++ para Android (compilador 14.0.1) 12 de novembro de 2013 Hospedado em Windows, Linux ou OS X, compatível com ferramentas Android NDK, incluindo o compilador gcc e Eclipse
Intel C ++ Composer XE 2015 (compilador 15.0) 25 de julho de 2014 Suporte completo à linguagem C ++ 11; Aprimoramentos adicionais de OpenMP 4.0 e Cilk Plus
Intel C ++ Composer XE 2015, atualização 1 (compilador 15.0.1) 30 de outubro de 2014 Suporte para AVX-512 ; Localização japonesa
Intel C ++ 16.0 25 de agosto de 2015 Disponibilidade baseada em suite (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 17.0 15 de setembro de 2016 Disponibilidade baseada em suite (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 18.0 26 de janeiro de 2017 Disponibilidade baseada em suite (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 19.0 3 de abril de 2018 Disponibilidade baseada em suite (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ Compiler Classic 19.1 22 de outubro de 2020 CPU Open MP 5.1 inicial apenas
Compilador Intel oneAPI DPC ++ / C ++ 2021 8 de dezembro de 2020 SYCL, DPC ++, Open MP 5.1 inicial
Intel Intel C ++ Compiler Classic 2021.1.2
Intel oneAPI DPC ++ / C ++ Compiler 2021.1.2
16 de dezembro de 2020 oneAPI DPC ++ / C ++ apresenta suporte para descarregamento de GPU

Veja também

Referências

links externos