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.