diff --git a/texto/resumo/resumo-erad.tex b/texto/resumo/resumo-erad.tex index 91c9d27a008699aee5717bd5e445e72ac268c7e4..8d6d061215fa93417ae477b5593404b98e3daf4d 100644 --- a/texto/resumo/resumo-erad.tex +++ b/texto/resumo/resumo-erad.tex @@ -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.