Como sei se meu código está sendo vetorizado pelo compilador?


9

Como exemplificado pela resposta de Jed Brown a Custos de pesquisas versus cálculos , o uso de operações de ponto flutuante vetorizado versus não vetorizado resulta em código muito mais rápido. Muitos compiladores modernos afirmam que podem executar a vetorização automática. Como faço para que partes do meu código estão sendo vetorizadas com êxito?

Respostas:


10

Com o compilador Intel de qualquer vintage moderno -O3 -vec-report3,. O nível de otimização três garante que ele está tentando vetorizar, e o relatório de vetor informará o que está fazendo.

A página GNU sobre vetorização diz que está ativada por padrão no nível de otimização 3, mas não consigo encontrar o equivalente a vec-report.


Obrigado pela resposta rápida. Eu não sabia sobre -vec-report3. Você tem uma preferência do compilador quando se trata desse tipo de coisa (vetorização automática)?
— Matthew Emmett

Os compiladores Intel são realmente bons, mas apenas para chips intel. Você só precisa adicionar todos os pragmas corretos (o #pragma ivdep é mais fácil). O GCC 4.7 ficou muito melhor, mas olhando para algum código com um colega que ainda possui bugs (como nenhuma vetorização dentro dos pragmas do openmp).
— aterrel

11
Eu recomendaria verificar novamente como o compilador Intel se sai com a vetorização nos chips AMD. Não tenho 100% de certeza de que os problemas do passado ainda existam.
— Bill Barth

2
@ BillBarth Sim, ainda é um problema. Consulte o Aviso de otimização (em muitos lugares, por exemplo, software.intel.com/sites/products/collateral/hpc/compilers/… ). A AMD venceu a batalha judicial exigindo que a Intel divulgue que são anticoncorrenciais, e não para fazê-las deixar de ser. en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler#Criticism Agner Fog nas soluções alternativas: agner.org/optimize/blog/read.php?i=49
— Jed Brown

@JedBrown, com certeza o SSE ainda é estranho, mas qual é a história do AVX? Esses links indicam que tudo deve ficar bem (já que as duas empresas implementam o AVX), mas eu não testei em uma máquina Bulldozer.
— Bill Barth

8

Dentro da coleção do compilador GNU, você tem a opção -ftree-vectorizer-verbose=nonde nhá um número entre 0 e 6 que imprimirá informações semelhantes a icc/ ifort.


5

Com os compiladores GNU, adicionar adicionará -Wa,-ahl=asm.so código de montagem gerado a asm.s.

Com os compiladores Intel, adicionar adicionará -fcode-asm -Faasm.so código gerado a asm.s.

Você pode inspecionar o código da montagem e procurar operações de ponto flutuante do vetor.


Concordo plenamente que inspecionar a saída do assembly é a única maneira confiável de determinar se o código é realmente vetorizado. Não há nada que exija que os compiladores sejam honestos sobre suas reivindicações para vetorizar código.
— 11133 Jeff
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.