Skip to content
Snippets Groups Projects
Commit 80eaf7ed authored by clac16's avatar clac16
Browse files

Mais ajustes no resumo

parent 7cae160a
Branches
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@
\usepackage{array}
\usepackage{makecell}
\usepackage{listings}
\renewcommand{\lstlistingname}{Listagem}
\sloppy
......@@ -36,7 +37,7 @@ Curitiba -- PR}
A escolha de compilador pode afetar significativamente a performance de
aplicações.
Este artigo busca avaliar o impacto de diferentes compiladores C/C++ em
aplicações científicas com base no conjunto de benchmarks rodinia e
aplicações científicas com base no conjunto de benchmarks Rodinia e
investigar suas causas.
São testados os compiladores AOCC, Clang, GCC e ICC.
A comparação mostra que o compilador da Intel apresenta uma vantagem
......@@ -78,7 +79,7 @@ OpenACC e CUDA também foram utilizados.
\cite{halbiniak2022} examina cinco compiladores para processadores AMD EPYC Rome
usando duas implementações, paralelizadas com OpenMP, de modelagem numérica da
solidificação de ligas.
Nos dois casos, a avaliação mostrou que o desempenho dos compiladores varia
Ambos os artigos mostraram que o desempenho dos compiladores varia
substancialmente.
\section{Os testes}
......@@ -108,7 +109,7 @@ resultados completos, estão disponíveis em
%\subsection{Compiladores testados}
Os compiladores testados foram GCC (14.2.1), clang (19.1.0), ICC (2025.0.1) e
Os compiladores testados foram GCC (14.2.1), Clang (19.1.0), ICC (2025.0.1) e
AOCC (5.0).
GCC, parte do projeto GNU, inclui front ends para várias linguagens, assim
como back ends para diversas arquiteturas.
......@@ -130,12 +131,12 @@ testados, mas apenas os mais relevantes serão reportados.\footnote
{Os dados completos estão disponíveis em
\url{https://gitlab.c3sl.ufpr.br/clac16/ic-comparacao-compiladores-x86}.}
Para cada combinação de benchmark, compilador e flags avaliada mediu-se o
tempo de oito execuções individuais e calculou-se uma média aritmética.
tempo de oito execuções individuais e calculou-se a média aritmética.
\section{Resultados}
A Tabela~\ref{tab:resultados-medios} mostra a média geométrica dos tempos médios
calculados para os benchmarks com algumas combinações de compilador e flags.
Em todos os casos o desvio padrão geométrico é igual ou inferior a 1.01.
calculados para os 17 benchmarks com algumas combinações de compilador e flags.
Em todos os casos, o desvio padrão geométrico é igual ou inferior a 1.01.
São omitidas a flag de dialeto (\texttt{-std=gnu89}) usada com alguns programas
em C e as flags que habilitam OpenMP (\texttt{-qopenmp} com ICC,
\texttt{-fopenmp} com os demais compiladores).
......@@ -199,12 +200,11 @@ As observações feitas para a Listagem~\ref{list:pfilter.c.1} se aplicam a
quase todo segmento de Particle Filter analisado.
GCC é o mais agressivo no loop unrolling e, ao vetorizar, sempre se limita ao
uso de registradores XMM, de 128 bits.
De acordo com o tamanho do laço, tipicamente é usado um fator de 4, 8 ou 16,
com o caso típico sendo 8 elementos ou, em código vetorizado, 8 vetores
(16 elementos).
De acordo com o tamanho do laço, é usado um fator de 4, 8 ou 16, com o caso
típico sendo 8 elementos ou, em código vetorizado, 8 vetores (16 elementos).
Ao vetorizar o código, ICC geralmente opera sobre 1 vetor (4 elementos) por
iteração.
Mas em código não vetorizado, opera sobre 4 ou 8 elementos por iteração.
Em código não vetorizado, opera sobre 4 ou 8 elementos por iteração.
Clang e AOCC geram códigos bastante parecidos entre si e geralmente operam
sobre um único elemento ou vetor por iteração.
......@@ -249,11 +249,11 @@ O programa para o qual ICC apresenta a segunda maior vantagem, SRAD, revela uma
situação similar.
Tomando-se as mesmas flags que a análise anterior, o desempenho do ICC é cerca
de 36\% melhor que o do Clang e do AOCC, e a diferença se deve a dois laços que
apenas o compilador da Intel vetoriza (resultando em execuções 1.6 e 2.3 vezes
mais rápidas).
apenas o compilador da Intel vetoriza (resultando em execuções 1.6 vezes mais
rápidas para um laço e 2.3 vezes mais rápidas para o outro).
Naturalmente, outros fatores impactam o desempenho.
Apesar de GCC, Clang e AOCC nem vetorizarem nem realizarem unroll em um desses
laços, a versão do GCC o executa em um tempo 2,7 vezes maior que a dos
laços, a versão do GCC o executa em um tempo 2.7 vezes maior que a dos
outros dois, contribuindo para uma performance 49\% pior que a desses
compiladores.
......@@ -269,12 +269,12 @@ mais afetado ao se desabilitar a vetorização automática, com sua performance
média piorando em cerca de 4\%.
A vantagem frente ao GCC é reduzida para cerca de 1\%.
Mas a análise do código revela que, mesmo com a flag \texttt{-no-vec}, ICC ainda
mantém vetorizações mais simples, incluindo a correspondentes ao segmento na
mantém vetorizações mais simples, incluindo a correspondente ao segmento na
Listagem~\ref{list:pfilter.c.1}, em que não apenas a vetorização é mantida, mas
o compilador passa a realizar loop unrolling para operar sobre dois vetores
(oito elementos) por iteração.
Portanto, a variação de desempenho observada não reflete totalmente o efeito
da vetorização na performance do ICC.
Portanto, a redução de desempenho observada não reflete totalmente o efeito
da vetorização para o ICC.
Isto sugere que, enquanto várias diferenças nas estratégias de otimização afetam
o resultado, a principal vantagem do ICC é sua capacidade de vetorização.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment