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 @@ ...@@ -16,7 +16,17 @@
\author{Cristopher Carcereri \inst{1} \and Daniel Oliveira \inst{1}} \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} \begin{document}
...@@ -30,8 +40,8 @@ ...@@ -30,8 +40,8 @@
investigar suas causas. investigar suas causas.
São testados os compiladores AOCC, Clang, GCC e ICC. São testados os compiladores AOCC, Clang, GCC e ICC.
A comparação mostra que o compilador da Intel apresenta uma vantagem A comparação mostra que o compilador da Intel apresenta uma vantagem
significativa que se deve principalmente a sua capacidade de vetorizar o significativa, devida principalmente à sua capacidade de vetorizar o código
código automaticamente. automaticamente.
\end{resumo} \end{resumo}
\section{Introdução} \section{Introdução}
...@@ -39,7 +49,7 @@ ...@@ -39,7 +49,7 @@
Com aplicações de alta performance escritas em linguagens de alto nível, a 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 eficiência do código produzido pelo compilador é um fator importante para o uso
de recursos e velocidade de processamento atingida. de recursos e velocidade de processamento atingida.
%
%Embora compiladores compartilhem muitas estratégias de otimização básicas, há %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 %distinção em melhorias específicas, focadas na arquitetura ou implementação, que
%podem resultar em variações significativas de desempenho. %podem resultar em variações significativas de desempenho.
...@@ -47,53 +57,53 @@ de recursos e velocidade de processamento atingida. ...@@ -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 %profusão de instruções de arquiteturas x86-64 modernas, com extensões como SSE e
%AVX2. %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 tanto para programadores e pesquisadores maximizarem a performance de uma
aplicação em uma plataforma de hardware particular, quanto para desenvolvedores aplicação em uma plataforma de hardware particular, quanto para desenvolvedores
de compiladores identificarem oportunidades de melhorar seu produto. de compiladores identificarem oportunidades de melhorar seu produto.
Este estudo busca explorar o impacto de quatro compiladores C/C++ Este estudo explora o impacto de quatro compiladores C/C++ amplamente usados ---
amplamente usados --- GCC (GNU Compiler Collection), Clang, AOCC (AMD Optimizing GCC (GNU Compiler Collection), Clang, AOCC (AMD Optimizing C/C++ Compiler) e ICC
C/C++ Compiler) e ICC (Intel oneAPI DPC++/C++ Compiler) --- no desempenho (Intel oneAPI DPC++/C++ Compiler) --- no desempenho de aplicações científicas
de aplicações científicas, usando um conjunto abrangente de benchmarks. usando um conjunto abrangente de benchmarks.
Além de quantificar diferenças no tempo de execução, buscamos investigar as Além de quantificar o tempo de execução, nos propomos a investigar as causas das
causas das disparidades observadas. disparidades observadas.
%\cite{kasliwal2017} compara a performance de seis compiladores %\cite{kasliwal2017} compara a performance de seis compiladores
%C/C++ para Intel Xeon Platinum baseado na arquitetura Skylake usando três %C/C++ para Intel Xeon Platinum baseado na arquitetura Skylake usando três
%kernels pararelizados com OpenMP. %kernels pararelizados com OpenMP.
\cite{davis2021} testou seis compiladores usando cinco aplicações \cite{davis2021} testou seis compiladores usando cinco aplicações em sistemas
em sistemas heterogêneos com GPUs Nvidia V100. heterogêneos com GPUs Nvidia V100.
Com a maior parte dos compiladores foi empregado OpenMP para o GPU offload, mas Com a maior parte dos compiladores foi empregado OpenMP para o GPU offload, mas
OpenACC e CUDA também foram utilizados. OpenACC e CUDA também foram utilizados.
\cite{halbiniak2022} examina cinco compiladores para \cite{halbiniak2022} examina cinco compiladores para processadores AMD EPYC Rome
processadores AMD EPYC Rome usando duas implementações, paralelizadas com OpenMP, usando duas implementações, paralelizadas com OpenMP, de modelagem numérica da
de modelagem numérica da solidificação de ligas. solidificação de ligas.
Nos dois casos, a avaliação mostrou que o desempenho dos compiladores varia Nos dois casos, a avaliação mostrou que o desempenho dos compiladores varia
substancialmente. substancialmente.
\section{Os testes} \section{Os testes}
Para comparar a performance, foi adotado o conjunto de benchmarks Rodinia 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 (versão 3.1), que é fácil de obter e implementa uma variedade de programas
variedade de programas paralelos úteis para aplicações científicas paralelos úteis para aplicações científicas \cite{che2009rodinia}.
\cite{che2009rodinia}.
Para os testes, foram selecionados 17 (de um total de 19) implementações usando Para os testes, foram selecionados 17 (de um total de 19) implementações usando
a API OpenMP.\footnote a API OpenMP.\footnote
{O programa MUMmerGPU foi excluído porque emprega, também, CUDA, não suportado {O programa MUMmerGPU foi excluído porque emprega, também, CUDA, não suportado
pelas versões mais recentes dos compiladores. pelas versões mais recentes dos compiladores.
O programa lud mostrou uma imensa sensibilidade ao compilador e as flags, então Já LU Decomposition mostrou uma imensa sensibilidade ao compilador e as flags,
teria um impacto desproporcional na performance média. 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\). %A razão entre o maior e menor tempo de execução obtidos para ele é cerca de
Dentre os demais programas, a maior razão é \(3.3\), e a média (aritmética) %\(17.5\).
das razões é \(1.7\). %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. Foram feitas algumas modificações à versão original do Rodinia.
Em especial, os makefiles foram alterados para simplificar a compilação com 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 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}. programas foi direcionada para \texttt{/dev/null}.
Os benchmarks modificados e os scripts usados para teste estão disponíveis Os benchmarks modificados e os scripts usados para teste, assim como os
em \url{foo.bar}. resultados completos, estão disponíveis em \url{foo.bar}.
%\subsection{Compiladores testados} %\subsection{Compiladores testados}
...@@ -131,20 +141,19 @@ em C e as flags que habilitam OpenMP (\texttt{-qopenmp} com ICC, ...@@ -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 As diferenças nas flags selecionadas visam compensar variações entre as flags
definidas para compiladores. 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}) 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 que habilita otimizações que sacrificam a acurácia da aritmética, ao contrário
dos demais. dos demais.
O comportamento default destes compiladores foi equiparado com a flag O comportamento default destes compiladores foi equiparado com a flag
\texttt{-fp-model=precise} do ICC.\footnote \texttt{-fp-model=precise} do ICC.\footnote
{A flag \texttt{-fp-model=precise} desabilita otimizações que usam instruções {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 Enquanto isso é uma desvantagem para o ICC, reduzindo o ganho com
\texttt{-march=native}, a diferença provavelmente é pouco significativa: \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] \begin{table}[h]
\scriptsize \scriptsize
\centering \centering
...@@ -157,10 +166,9 @@ com os demais compiladores, o impacto de instruções fma é inferior a 1\%. ...@@ -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} \caption{Tempos de execução médios para diferentes parâmetros de compilação}
\label{tab:resultados-medios} \label{tab:resultados-medios}
\end{table} \end{table}
%Reordenar linhas da tabela?
O compilador da Intel obteve o maior desempenho. 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\%. 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 Para todos os conjuntos de flags testados, a performance média do Clang supera a
do AOCC entre 1\% e 3\%. 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