Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
IC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Harbor Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
clac16
IC
Commits
b93ba80b
Commit
b93ba80b
authored
3 months ago
by
clac16
Browse files
Options
Downloads
Patches
Plain Diff
Mais ajustes no resumo
parent
8fea4788
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
texto/resumo/resumo-erad.tex
+41
-33
41 additions, 33 deletions
texto/resumo/resumo-erad.tex
with
41 additions
and
33 deletions
texto/resumo/resumo-erad.tex
+
41
−
33
View file @
b93ba80b
...
...
@@ -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
dev
e
principalmente
a
sua capacidade de vetorizar o
código
automaticamente.
significativa
,
dev
ida
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
explora
r
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 n
o tempo de execução,
busca
mos 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 propo
mos
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ívei
s
em
\url
{
foo.bar
}
.
Os benchmarks modificados e os scripts usados para teste
, assim como o
s
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.
Comp
o
rando o melhor caso
d
a tabela para cada compilador, ICC superou o GCC em
Comp
a
rando o melhor caso
n
a 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
\%
.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment