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

Mais ajustes no resumo

parent 8fea4788
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,17 @@
\author{Cristopher Carcereri \inst{1} \and Daniel Oliveira \inst{1}}
\address{Departamento de Informática -- Universidade Federal do Paraná (UFPR)}
\address{Departamento de Informática -- Universidade Federal do Paraná (UFPR) --
Curitiba -- PR}
%Caixa Postal 15.064 -- 91.501-970 -- Porto Alegre -- RS -- Brazil
%Blumenau, SC -- Brazil
%Department of Computer Science -- University of Durham\\
%Durham, U.K.
%Departamento de Sistemas e Computação\\
%Universidade Regional de Blumenal (FURB) -- Blumenau, SC -- Brazil
\begin{document}
......@@ -30,8 +40,8 @@
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
significativa que se deve principalmente a sua capacidade de vetorizar o
código automaticamente.
significativa, devida principalmente à sua capacidade de vetorizar o código
automaticamente.
\end{resumo}
\section{Introdução}
......@@ -39,7 +49,7 @@
Com aplicações de alta performance escritas em linguagens de alto nível, a
eficiência do código produzido pelo compilador é um fator importante para o uso
de recursos e velocidade de processamento atingida.
%
%Embora compiladores compartilhem muitas estratégias de otimização básicas, há
%distinção em melhorias específicas, focadas na arquitetura ou implementação, que
%podem resultar em variações significativas de desempenho.
......@@ -47,53 +57,53 @@ de recursos e velocidade de processamento atingida.
%profusão de instruções de arquiteturas x86-64 modernas, com extensões como SSE e
%AVX2.
Entender as diferenças de performance entre os códigos gerados é importante
Entender as diferenças de desempenho entre os códigos gerados é importante
tanto para programadores e pesquisadores maximizarem a performance de uma
aplicação em uma plataforma de hardware particular, quanto para desenvolvedores
de compiladores identificarem oportunidades de melhorar seu produto.
Este estudo busca explorar o impacto de quatro compiladores C/C++
amplamente usados --- GCC (GNU Compiler Collection), Clang, AOCC (AMD Optimizing
C/C++ Compiler) e ICC (Intel oneAPI DPC++/C++ Compiler) --- no desempenho
de aplicações científicas, usando um conjunto abrangente de benchmarks.
Além de quantificar diferenças no tempo de execução, buscamos investigar as
causas das disparidades observadas.
Este estudo explora o impacto de quatro compiladores C/C++ amplamente usados ---
GCC (GNU Compiler Collection), Clang, AOCC (AMD Optimizing C/C++ Compiler) e ICC
(Intel oneAPI DPC++/C++ Compiler) --- no desempenho de aplicações científicas
usando um conjunto abrangente de benchmarks.
Além de quantificar o tempo de execução, nos propomos a investigar as causas das
disparidades observadas.
%\cite{kasliwal2017} compara a performance de seis compiladores
%C/C++ para Intel Xeon Platinum baseado na arquitetura Skylake usando três
%kernels pararelizados com OpenMP.
\cite{davis2021} testou seis compiladores usando cinco aplicações
em sistemas heterogêneos com GPUs Nvidia V100.
\cite{davis2021} testou seis compiladores usando cinco aplicações em sistemas
heterogêneos com GPUs Nvidia V100.
Com a maior parte dos compiladores foi empregado OpenMP para o GPU offload, mas
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.
\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
substancialmente.
\section{Os testes}
Para comparar a performance, foi adotado o conjunto de benchmarks Rodinia
(versão 3.1), que pode ser facilmente obtido e testado e que implementa uma
variedade de programas paralelos úteis para aplicações científicas
\cite{che2009rodinia}.
(versão 3.1), que é fácil de obter e implementa uma variedade de programas
paralelos úteis para aplicações científicas \cite{che2009rodinia}.
Para os testes, foram selecionados 17 (de um total de 19) implementações usando
a API OpenMP.\footnote
{O programa MUMmerGPU foi excluído porque emprega, também, CUDA, não suportado
pelas versões mais recentes dos compiladores.
O programa lud mostrou uma imensa sensibilidade ao compilador e as flags, então
teria um impacto desproporcional na performance média.
A razão entre o maior e menor tempo de execução para lud é cerca de \(17.5\).
Dentre os demais programas, a maior razão é \(3.3\), e a média (aritmética)
das razões é \(1.7\).
Já LU Decomposition mostrou uma imensa sensibilidade ao compilador e as flags,
então teria um impacto desproporcional na performance média.
%A razão entre o maior e menor tempo de execução obtidos para ele é cerca de
%\(17.5\).
%Dentre os demais programas, a maior razão é \(3.3\), e a média (aritmética)
%das razões é \(1.7\).
}
Foram feitas algumas modificações à versão original do Rodinia.
Em especial, os makefiles foram alterados para simplificar a compilação com
diferentes parâmetros e, para reduzir o impacto de I/O na aferição, a saída dos
programas foi direcionada para \texttt{/dev/null}.
Os benchmarks modificados e os scripts usados para teste estão disponíveis
em \url{foo.bar}.
Os benchmarks modificados e os scripts usados para teste, assim como os
resultados completos, estão disponíveis em \url{foo.bar}.
%\subsection{Compiladores testados}
......@@ -131,20 +141,19 @@ em C e as flags que habilitam OpenMP (\texttt{-qopenmp} com ICC,
As diferenças nas flags selecionadas visam compensar variações entre as flags
definidas para compiladores.
Com AOCC, Clang e ICC \texttt{O3} implica loop unrolling, mas não com GCC.
Com AOCC, Clang e ICC \texttt{-O3} implica loop unrolling, mas não com GCC.
E, por default, ICC usa um modelo de ponto flutuante (\texttt{-fp-model=fast=1})
que habilita otimizações que sacrificam a acurácia da aritmética, ao contrário
dos demais.
O comportamento default destes compiladores foi equiparado com a flag
\texttt{-fp-model=precise} do ICC.\footnote
{A flag \texttt{-fp-model=precise} desabilita otimizações que usam instruções
fma.
FMA.
Enquanto isso é uma desvantagem para o ICC, reduzindo o ganho com
\texttt{-march=native}, a diferença provavelmente é pouco significativa:
com os demais compiladores, o impacto de instruções fma é inferior a 1\%.
com os demais compiladores, o impacto de instruções FMA é inferior a 1\%.
}
\begin{table}[h]
\scriptsize
\centering
......@@ -157,10 +166,9 @@ com os demais compiladores, o impacto de instruções fma é inferior a 1\%.
\caption{Tempos de execução médios para diferentes parâmetros de compilação}
\label{tab:resultados-medios}
\end{table}
%Reordenar linhas da tabela?
O compilador da Intel obteve o maior desempenho.
Comporando o melhor caso da tabela para cada compilador, ICC superou o GCC em
Comparando o melhor caso na tabela para cada compilador, ICC superou o GCC em
cerca de 5\%, e GCC superou o Clang em cerca de 4\%.
Para todos os conjuntos de flags testados, a performance média do Clang supera a
do AOCC entre 1\% e 3\%.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment