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

apresentacao erad

parent 80eaf7ed
No related branches found
No related tags found
No related merge requests found
texto/resumo/apresentacao/images/erad-logo.png

18.7 KiB

# This makefile uses latexmk
# http://www.ctan.org/pkg/latexmk
#
# latexmk is available as a Debian package of the same name
# http://packages.debian.org/search?keywords=latexmk
#------------------------------------------------------------------------------
LATEXMK = latexmk -pdf \
-use-make \
-recorder \
-e '$$latex="latex -src-specials -interaction=nonstopmode %O %S"' \
-e '$$pdflatex="pdflatex -src-specials -interaction=nonstopmode %O %S"'
TEXs = $(wildcard *.tex)
PDFs = $(subst .tex,.pdf,$(TEXs))
#------------------------------------------------------------------------------
.PHONY : default clean
#------------------------------------------------------------------------------
default : slides-erad.pdf
$(PDFs) : %.pdf : %.tex
$(LATEXMK) $<
#------------------------------------------------------------------------------
clean ::
latexmk -e '$$clean_ext = "bbl pdfsync nav snm vrb synctex.gz run.xml bib"' -c
File added
% ----------------------------------------------------------------------
% Date: 6 June 2022
% Author: Roberto Metere
% Project: Beamer template for University of York
%
% Copyright (C) 2022 Roberto Metere
% ----------------------------------------------------------------------
%
\documentclass[t,compress,aspectratio=169,xcolor=table]{beamer}
\usepackage[brazilian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[uoybglogo]{uoy-beamer}
\usepackage{listings}
\usepackage[style=authoryear,autocite=footnote,backend=bibtex,citetracker=true]{biblatex}
%\usepackage[noend]{algorithm2e} % https://mlg.ulb.ac.be/files/algorithm2e.pdf
\usepackage{amsthm}
\usepackage{hyperref}
\usepackage{xcolor,colortbl}
%\usepackage{enumitem,xcolor}
%\usepackage{pifont}
%\usepackage{amssymb}
% Set to 1 or comment to disable transparency and enable full opacity.
%% \setblockbodyopacity{0.8}
% Listings
%\definecolor{cident}{rgb}{1,0.33,0.42}
%\definecolor{ckeyw}{rgb}{0,0.1,1}
%\definecolor{ccomm}{rgb}{0,0.8,0}
%\definecolor{cstr}{rgb}{0.8,0,0}
\def\HiLi{\leavevmode\rlap{\hbox to
\hsize{\color{yellow!50}\leaders\hrule height .8\baselineskip
depth .5ex\hfill}}}
\lstset{language=[LaTeX]{TeX},
basicstyle=\footnotesize\ttfamily,
keywordstyle=\color{ckeyw}\bfseries,
identifierstyle=\color{cident}\bfseries,
commentstyle=\color{ccomm},
stringstyle=\color{cstr},
showstringspaces=false,
breaklines=true,
breakatwhitespace=true,
tabsize=2,
% numbers=left,
% stepnumber=1,
% firstnumber=1,
% numberfirstline=true,
}
\usepackage{makecell}
\usepackage{textcomp}
\usetikzlibrary{graphs}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{shapes}
% \uoysetidentity{Department of}{Computer Science}
\definecolor{laranja}{RGB}{8, 150, 205}
\definecolor{azul}{RGB}{255, 176, 50}
\definecolor{amarelo}{RGB}{02, 138, 15}
\definecolor{verde}{RGB}{0, 132, 200}
\definecolor{branco}{RGB}{255, 255, 255}
\definecolor{cinza}{RGB}{128, 128, 128}
\setbeamercolor{block title}{bg=laranja,fg=white}
\setbeamerfont{block title}{series=\bfseries,size=\small}
\setbeamercolor{block body}{bg=laranja!20,fg=black}
\renewbibmacro{in:}{}
\addbibresource{../../include/bibclac.bib}
\DeclareFieldFormat*{citetitle}{#1}
\DeclareFieldFormat*{title}{#1}
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=url, null]
}
}
}
\setbeamercolor*{item}{fg=laranja}
\hypersetup{colorlinks,linkcolor=,urlcolor=verde}
\setbeamercolor{bibliography entry author}{fg=verde}
%% \setbeamercolor{bibliography item}{fg=green}
\setbeamercolor{bibliography entry title}{fg=black}
\setbeamercolor{bibliography entry location}{fg=black}
\setbeamercolor{bibliography entry note}{fg=black}
%% \hypersetup{
%% colorlinks=true,
%% linkcolor=yellow,
%% citecolor=yellow
%% }
\makeatletter
\newcommand{\plainbibfn}[1]{\bibfootnotewrapper{#1}}
\newbibmacro*{spfullfoot}{%
\let\@makefntext\plainbibfn
\footnotetext{\tiny%
\fullcite{\thefield{entrykey}}}}
\let\oldopenbracket\bibopenbracket
\let\oldclosebracket\bibclosebracket
\def\bibopenbracket{\mkbibsuperscript{\oldopenbracket}}
\def\bibclosebracket{\mkbibsuperscript{\oldclosebracket}}
\DeclareCiteCommand{\mycite}[\mkbibbrackets]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\mkbibsuperscript{\usebibmacro{cite}}%
\usebibmacro{spfullfoot}}
{\mkbibsuperscript{\multicitedelim}}
{\usebibmacro{postnote}}
\makeatother
\title[]{\textbf{Comparação de compiladores C/C++ para processadores x86}}
\subtitle{\mbox{}}
\author[]{Cristopher Carcereri \and Daniel Oliveira}
\institute{\hspace{1cm}}
\date[]{25 de Abril de 2025}
% \setlength{\frametitlemargin}{1mm}
\begin{document}
% ======================================================================
% --- Capa
% ======================================================================
\begin{frame}[plain]
\maketitle
\end{frame}
% ======================================================================
% --- Corpo
% ======================================================================
\begin{frame}
\frametitle{Objetivos}
Com aplicações de alta performance escritas em linguagens de alto nível,
a eficácia do compilador é um fator importante para a performance do sistema.
\pause
Exploramos o impacto de compiladores C/C+ no desempenho de aplicacões
científicas buscando:
\begin{itemize}
\item Comparar a performance de diferentes opções
\item Investigar os motivos para as diferenças observadas
\end{itemize}
\pause
Entender as diferenças de performance é importante para
\begin{itemize}
\item Pesquisadores e desenvolvedores: maximizar eficiência de uma aplicação
\item Desenvolvedores de compiladores: melhorar seu produto
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Compiladores testados}
Quatro compiladores comparados:
\pause
\begin{itemize}
\item GCC (14.2.1): parte do projeto GNU, inclui front ends para várias
linguagens e back ends para diversas arquiteturas
\pause
\item Clang (19.1.0): front end para linguagens na família C para o LLVM.
\pause
\item ICC (2025.0.1): Intel C Compiler, também baseado no LLVM (19.0.0)
\pause
\item AOCC (5.0): Fork do Clang que inclui otimizações da AMD.
O back end é o LLVM 17.0.6
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Programas testados}
Comparações baseadas no conjunto de benchmarks Rodinia (versão 3.1):
\begin{itemize}
\item Fácil de obter e testar
\item Implementa vários programas paralelos úteis para aplicações
científicas
\end{itemize}
\pause
Empregadas implementações usando a API OpenMP.
De um total de 19, foram selecionados 17.
\pause
Ajustes na versão original do Rodinia:
\begin{itemize}
\item Makefiles alterados para simplificar compilação com diferentes
parâmetros
\item Saída dos programas direcionada para /dev/null para reduzir impacto
de I/O
\end{itemize}
Benchmarks modificados, scripts e testes disponíveis em:\\
\url{https://gitlab.c3sl.ufpr.br/clac16/ic-comparacao-compiladores-x86}
\end{frame}
\begin{frame}
\frametitle{Os testes}
Benchmacks compilados e executados em um computador com AMD Ryzen 1700 e
16 GiB de RAM.
\pause
Diferentes conjuntos de flags de otimização testados.
Apenas os mais relevantes reportados:
\begin{itemize}
\item \texttt{(aocc|clang) -O3 [-march=native]}
\item \texttt{gcc -O3 -funroll-loops [-march=native]}
\item \texttt{icx -O3 -fp-model=precise [-march=native]}
\end{itemize}
\pause
Váriações entre flags usadas:
\begin{itemize}
\item ICC: otimizações que sacrificam acurácia por default (\texttt{-fp-model=fast=1})
\item GCC: \texttt{-O3} não implica loop unrolling
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Os testes}
Para cada combinação de benchmack, compilador e flags: 8 execuções.
\vspace{0.6cm}
Performance para uma combinação: inverso da média aritmética.
\vspace{0.6cm}
Performance para um compilador com conjunto de flags: inverso da média
geométrica das médias para os 17 benchmarks individuais.
Desvio padrão geométrico igual ou inferior a 1.012.
\end{frame}
\begin{frame}
\frametitle{Desempenho médio}
\begin{table}[h]
\centering
\scriptsize
\begin{tabular}{| l | c |}
\hline
\textbf{\centering Compilador e flags} & \makecell{\textbf{Tempo de execução} \\ \textbf{(Média Geométrica)}}\\
\hline
\texttt{aocc -O3} & 47.28 \\
\texttt{aocc -O3 -march=native} & 48.51 \\
\texttt{clang -O3} & 46.7 \\
\texttt{clang -O3 -march=native} & 47.75 \\
\texttt{gcc -O3 -funroll-loops} & 45.92 \\
\texttt{gcc -O3 -funroll-loops -march=native} & 44.69 \\
\texttt{icx -O3 -fp-model=precise} & 43.37 \\
\texttt{icx -O3 -march=native -fp-model=precise} & 42.7 \\
\hline
\end{tabular}
\caption{Tempos de execução médios para diferentes parâmetros de compilação}
\end{table}
\pause
\begin{columns}
\column{.5\textwidth}
Melhor desempenho: ICC
\pause
\begin{itemize}
\item ICC superou GCC em \(\sim\)5\%
\item GCC superou Clang em \(\sim\)4\%
\item Clang superou AOCC entre 1\% e 3\%
\end{itemize}
\pause
\column{.5\textwidth}
Flag \texttt{-march=native}:
\begin{itemize}
\item Melhora com GCC e ICC
\item Piora com Clang e AOCC
\end{itemize}
Problemas ao usar extensões como AVX2
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Desempenho por aplicação}
\pgfplotstableread[col sep=comma]{performances-relativas-precise.csv}\relativetable
\begin{figure}
\centering
\resizebox{9.1cm}{!}{
\begin{tikzpicture}
\begin{axis}[
ymin=0,
xtick=data,
symbolic x coords={particle-filter,srad,nn,hotspot3D,b+tree,lavaMD,kmeans,
hotspot,backprop,pathfinder,bfs,euler3d,streamcluster,myocyte,nw,leukocyte,
heartwall},
xticklabel style={rotate=45, anchor=east},
width=13cm, height=8cm,
enlarge x limits=0.1,
ymajorgrids=true,
bar width=3pt,
legend style={at={(0.90,0.95)}, anchor=north east,
legend image code/.code={
\draw[fill=####1,draw=black] (0cm,-0.1cm) rectangle (0.4cm,0.1cm);
},
},
]
\addplot[ybar,fill=blue, draw=blue, bar shift=-6pt]
table[x=benchmark, y=icc, col sep=comma] {\relativetable};
\addlegendentry{ICC}
\addplot[ybar,fill=black, draw=black,, bar shift=-3pt]
table[x=benchmark, y=gcc, col sep=comma] {\relativetable};
\addlegendentry{GCC}
\addplot[ybar,fill=gray, draw=gray, bar shift=0pt]
table[x=benchmark, y=clang, col sep=comma] {\relativetable};
\addlegendentry{Clang}
\addplot[ybar,fill=red, draw=red, bar shift=3pt]
table[x=benchmark, y=aocc, col sep=comma] {\relativetable};
\addlegendentry{AOCC}
\end{axis}
\end{tikzpicture}
}
\caption{O menor tempo de cada compilador para os benchmarks testados
(normalizado).}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Desempenho por aplicação}
Dos 17 benchmarks:
\begin{columns}
\column{.42\textwidth}
Vantagem do ICC:
\begin{itemize}
\item Pelo menos 40\%: 2 casos
\item Pelo menos 10\%: mais 3 casos
\item Pelo menos 5\%: mais 1 caso
\end{itemize}
\pause
\column{.42\textwidth}
Desvantagem do ICC:
\begin{itemize}
\item Pelo menos 40\%: 0 casos
\item Pelo menos 10\%: 4 casos
\item Pelo menos 5\%: mais 1 caso
\end{itemize}
\end{columns}
\pause
\vspace{0.4cm}
Vantagem GCC: Pelo menos 10\% em 1 caso.
\pause
\vspace{0.4cm}
Vantagem AOCC e Clang: Pelo menos 5\% em 1 caso.
\end{frame}
\begin{frame}
\frametitle{Análise do particle\_filter}
Usando as flags reportadas com \texttt{-march=native}:
\begin{itemize}
\item \texttt{aocc -O3 -march=native}
\item \texttt{clang -O3 -march=native}
\item \texttt{gcc -O3 -funroll-loops -march=native}
\item \texttt{icx -O3 -march=native -fp-model=precise}
\end{itemize}
\pause
Maior vantagem do ICC dentre todos os benchmarks
\begin{itemize}
\item ICC é 42\% mais rápido que GCC
\item GCC é 24\% mais rápido que Clang e AOCC.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter: segmento 1}
\begin{lstlisting}[language=c]
for(x = 0; x < Nparticles; x++){
weights[x] = weights[x]/sumWeights;
}
\end{lstlisting}
\pause
\begin{itemize}
\item Todos vetorizam, mas GCC usa registradores de 128 bits
\pause
\item A cada iteração:
\begin{itemize}
\item GCC: 8 vetores (16 elementos)
\item AOCC, Clang, ICC: 1 vetor (4 elementos)
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter}
Padrão se repete em quase todo segmento do programa:
\pause
\begin{itemize}
\item Ao vetorizar, GCC se limita a registradores XMM
\pause
\begin{itemize}
\item Também em outros programas, mas nem todos
\item \texttt{-mprefer-vector-width=256} não ajuda: divide operações
em duas partes.
Em vez de\\
\texttt{vmovupd \%ymm2, (\%r15)}\\
produz um par\\
\texttt{vextractf128 \$0x1, \%ymm2, 16(\%r15), vmovupd \%xmm2, (\%r15)}.
\end{itemize}
\pause
\item GCC mais agressivo no loop unrolling
\begin{itemize}
\item GCC: fator 4, 8 ou 16.
Típico é 8 elementos/vetores(16 elementos).
\item ICC: 1 vetor (4 elementos), 4 ou 8 elementos.
\item Glang e ICC: geralmente apenas um único elemento ou vetor.
\end{itemize}
\pause
\item Clang e AOCC geram códigos praticamente idênticos
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter: segmento 2}
\begin{lstlisting}[language=c]
for(x = 0; x < lengthCDF; x++) {
if(CDF[x] >= value) {
index = x;
break;
}
}
\end{lstlisting}
\pause
Principal laço da seção que domina o tempo de execução.
\begin{itemize}
\item ICC 2.4 vezes rápido que GCC
\item GCC 1.4 vezes mais rápido que Clang/AOCC
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter: segmento 2}
\begin{lstlisting}[language=c]
for(x = 0; x < lengthCDF; x++) {
if(CDF[x] >= value) {
index = x;
break;
}
}
\end{lstlisting}
\begin{itemize}
\item Clang e AOCC: sem loop unrolling.\\
6 instruções, incluindo 1 leitura da memória, 1 comparação ponto
flutuante e 2 saltos condicionais.
\item GCC: 8 elemementos.
35 instruções, incluindo 8 leituras da memória, 8 comparações ponto
flutuante e 9 saltos condicionais.
\item ICC: Vetoriza. Comparação de 16 elementos por iteração.
12 instruções, incluindo 4 comparações de (vetores) ponto flutuante lidos da
memória e 2 saltos condicionais.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter: segmento 2 --- código ICC}
\begin{lstlisting}[basicstyle=\small,language={[x86masm]Assembler}]
vbroadcastsd %xmm0, %ymm1
leaq (%rdi,%rdx,8), %r11
xorl %eax, %eax
.LBB13_14:
vcmplepd (%r11,%rax,8), %ymm1, %ymm2
vcmplepd 32(%r11,%rax,8), %ymm1, %ymm4
vcmplepd 64(%r11,%rax,8), %ymm1, %ymm3
vcmplepd 96(%r11,%rax,8), %ymm1, %ymm5
vorpd %ymm4, %ymm2, %ymm6
vorpd %ymm5, %ymm3, %ymm7
vorpd %ymm6, %ymm7, %ymm6
vtestpd %ymm6, %ymm6
jne .LBB13_15
addq $16, %rax
cmpq %r10, %rax
jbe .LBB13_14
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Análise do particle\_filter: segmento 2 --- código ICC}
\begin{lstlisting}[commentstyle=\color{blue}\textnormal\footnotesize,basicstyle=\footnotesize,language={[x86masm]Assembler}]
.LBB13_15:
vpackssdw %ymm4, %ymm2, %ymm0 ;ymm0=[0,1,4,5,2,3,6,7] 4B
vpermq $216, %ymm0, %ymm0 ;ymm0=[0,1,2,3,4,5,6,7]
vpackssdw %ymm5, %ymm3, %ymm1 ;ymm1=[8,9,12,13,10,11,14,15] 4B
vpermq $216, %ymm1, %ymm1 ;ymm1=[8,9,10,11,12,13,14,15]
vpackssdw %ymm1, %ymm0, %ymm0 ;ymm0=[0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15] 2B
vextracti128 $1, %ymm0, %xmm1 ;xmm1=[4,5,6,7,12,13,14,15]
vpacksswb %xmm1, %xmm0, %xmm0 ;xmm0=[0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15] 1B
vpshufd $216, %xmm0, %xmm0 ;xmm0=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
vpmovmskb %xmm0, %ecx ;ecx =[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 1b
tzcntl %ecx, %ecx
addq %rax, %rdx
addq %rcx, %rdx
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Impacto da vetorização}
Flags para desabilitar vetorização automática.
\pause
\begin{itemize}
\item ICC: \texttt{-no-vec}\\
42.7 \(\rightarrow\) 44.47: 4.2\%
\pause
\item GCC: \texttt{-fno-tree-vectorize -fno-tree-loop-vectorize -fno-tree-slp-vectorize}\\
44.69 \(\rightarrow\) 45.06: 0.8\%
\pause
\item AOCC/Clang: \texttt{-fno-tree-vectorize -fno-tree-slp-vectorize}
\begin{itemize}
\item AOCC: 48.51 \(\rightarrow\) 49.13: 1.2\%
\item Clang: 47.75 \(\rightarrow\) 48.1: 0.7\%
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Impacto da vetorização}
ICC é o mais afetado
\begin{itemize}
\pause
\item Vantagem frente ao GCC: 4.7\% \(\rightarrow\) 1.3\%
\pause
\item particle\_filter: 41.2\% \(\rightarrow\) 11.5\%
\item srad: 36.2\% \(\rightarrow\) -37.1\% (pior que AOCC/Clang)
\pause
\item Vantagem ainda é expressiva: 10\% ou mais em 6 casos
\pause
\item \texttt{-no-vec} mantém vetorizações simples\\
Primeiro segmento analisado:\\
vetorização+loop-unrolling --- oito elementos por iteração
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Conclusão}
Clang ligeiramente melhor que AOCC
\vspace{0.5cm}
GCC, ao vetorizar, pode usar registradores mais estreitos
\vspace{0.5cm}
Compilador da Intel capaz de vetorizações mais complexas
\vspace{0.5cm}
Vetorização automática é sua principal vantagem.
\end{frame}
\end{document}
% ----------------------------------------------------------------------
% Date: 6 June 2022
% Author: Roberto Metere
% Project: Beamer template for University of York
%
% Copyright (C) 2022 Roberto Metere
% ----------------------------------------------------------------------
%
\mode<presentation>
\usepackage{lmodern}
\usepackage[sfdefault,scaled=.9,light]{FiraSans}
\usepackage{minibox}
\usepackage{varwidth}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{amssymb}
\pdfsuppresswarningpagegroup=1
\usepackage{pgfplots}
\usepackage{pgfplotstable}
% Tikz libraries
\usetikzlibrary{backgrounds,fit,positioning,calc}
% Block transparency
%% \newcommand{\setblockbodyopacity}[1]{\def\blockbodyopacity{#1}}
% Official font
% \setmainfont{Arial} % fontspec package
% \renewcommand{\familydefault}{\sfdefault} % use with helvet for Arial-like font
\renewcommand{\rmdefault}{phv} % Arial
\renewcommand{\sfdefault}{phv} % Arial
% Default font size % scrextend
% \changefontsizes{9pt}
% Official colours
\definecolor{uoydarkfg}{RGB}{104, 143, 3}
\definecolor{uoyblue}{RGB}{00, 00, 00}
\definecolor{uoybluealt}{RGB}{106, 144, 6}
\definecolor{uoydarkbg}{RGB}{0, 255, 0}
\definecolor{uoypurple}{RGB}{0, 0, 0}
\definecolor{orange}{RGB}{0, 132, 200}
\definecolor{uoyred}{RGB}{0, 255, 0}
\definecolor{uoygray}{RGB}{0, 0, 0}
% Default [main]
\newcommand{\incolour}{}
\newcommand{\tabtype}{main}
\newcommand{\fsize}[1]{\fontsize{#1}{#1}}
\colorlet{uoysubidcolour}{uoypurple}
\colorlet{uoyidcolour}{uoybluealt}
\colorlet{uoystrongcolour}{uoyblue}
\colorlet{uoylightcolour}{uoypurple}
\colorlet{uoytextcolor}{uoygray}
\newcommand{\uoysubid}{}
\newcommand{\uoyid}{}
\newcommand{\uoysetidentity}[2]{
\renewcommand{\uoysubid}{#1}
\renewcommand{\uoyid}{#2}
}
\definecolor{canvascolor}{rgb}{1.0, 1.0, 1.0}
\colorlet{slidetitle}{uoybluealt}
\colorlet{slidetitles}{uoypurple}
\colorlet{quotesentence}{uoyblue}
\colorlet{blockexfg}{white}
\colorlet{blockexbg}{uoylightcolour}
\colorlet{dotscolour}{uoypurple}
% Workaround for renewenvironment issues
\long\def\beamer@newenvnoopt#1#2#3#4{%
\expandafter\renewcommand\expandafter<\expandafter>\csname#1\endcsname[#2]{#3}%<- here
\expandafter\long\expandafter\def\csname end#1\endcsname{#4}%
}
\long\def\beamer@newenvopt#1#2[#3]#4#5{%
\expandafter\renewcommand\expandafter<\expandafter>\csname#1\endcsname[#2][#3]{#4}%<- here
\expandafter\long\expandafter\def\csname end#1\endcsname{#5}%
}
% Distance between title and content
\newlength{\frametitlemargin}
\setlength{\frametitlemargin}{0mm}
\newlength{\blockbottommargin}
\setlength{\blockbottommargin}{2mm}
\newlength{\blocktopmargin}
\setlength{\blocktopmargin}{0mm}
\newcommand{\noframetitle}[1][-9mm]{\vskip #1}
\newcommand{\framesingletitle}[2][16mm]{{\vskip #1}\noindent{\begin{center}\color{slidetitles} {\Huge \textbf #2}\end{center}}{\vskip 2mm}{\vskip \frametitlemargin}}
\newcommand{\emptyframetitle}{\frametitle{\strut}}
% To gain partially transparent blocks
\ifx\blockbodyopacity\@empty\else
\def\blockbodyopacity{1}
\fi
\newlength{\blockheightcorr}
\setlength{\blockheightcorr}{-3.16mm}
\newlength{\blockwidthcorr}
\setlength{\blockwidthcorr}{2.48mm}
\newlength{\blockyshcorr}
\setlength{\blockyshcorr}{-0.53mm}
\newenvironment{blockminipage}[2]{%
\colorlet{bodycolour}{#1}%
\@ifundefined{bodyopacity}{\newcommand{\bodyopacity}{#2}}{\renewcommand{\bodyopacity}{#2}}%
\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}]%
\node [text width=\textwidth] (childblock) \bgroup%
\begin{minipage}{\textwidth}%
}{%
\end{minipage}%
\egroup;%
\begin{scope}[on background layer]
\path
let
\p{n}=(childblock.north),
\p{s}=(childblock.south),
\p{w}=(childblock.west),
\p{e}=(childblock.east),
\n{h}={\y{n}-\y{s}+(\blockheightcorr)},
\n{w}={\x{e}-\x{w}+\blockwidthcorr}
in
node [rectangle, draw=none, fill=bodycolour, yshift=\blockyshcorr, fill opacity=\bodyopacity, overlay, anchor=center, minimum width=\n{w}, minimum height=\n{h}] {};
\end{scope}
\end{tikzpicture}%
}
\renewenvironment<>{block}[2][uoyblue]{%
\vskip \blocktopmargin%
\begin{blockminipage}{white}{0}%
\begin{actionenv}#3%
\def\insertblocktitle{\hspace{.3em}\bfseries#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=uoytextcolor!80!white,bg=}
\setbeamercolor{block body}{fg=uoytextcolor!90!white,bg=}
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure}{fg=block title.bg}}%
\usebeamertemplate{block begin}
{\vspace{-1em}\color{black!40!white}\tiny\hrulefill}
}
{\par%
\usebeamertemplate{block end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}%
}
\renewenvironment<>{cleanblock}[2][uoypurple]{%
\vskip \blocktopmargin%
\begin{blockminipage}{white}{0}%
\begin{actionenv}#3%
\def\insertblocktitle{\bfseries#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=uoytextcolor!80!white,bg=}
\setbeamercolor{block body}{fg=uoytextcolor!90!white,bg=}
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure}{fg=block title.bg}}%
\usebeamertemplate{block begin}}
{\par%
\usebeamertemplate{block end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}%
}
\renewenvironment<>{whiteblock}[2][white!40!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{\bfseries#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=white!10!black,bg=white}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=black,bg=white}
\else
\setbeamercolor{block body}{fg=black,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure}{fg=#1}}%
\usebeamertemplate{block begin}}
{\par%
\usebeamertemplate{block end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}%
}
\renewenvironment<>{grayblock}[2][white!50!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{black!20!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=white,bg=white!50!black}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=black,bg=white!90!black}
\else
\setbeamercolor{block body}{fg=black,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure}{fg=block title.bg}}%
\usebeamertemplate{block begin}}
{\par%
\usebeamertemplate{block end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}%
}
\renewenvironment<>{exampleblock}[2][green!65!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{green!40!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title example}{fg=white,bg=green!65!black}
\if\blockbodyopacity1
\setbeamercolor{block body example}{fg=black,bg=green!10!white}
\else
\setbeamercolor{block body example}{fg=black,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure example}{use=block title,%
fg=block title.bg}}%
\usebeamertemplate{block example begin}}
{\par%
\usebeamertemplate{block example end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}}
\renewenvironment<>{alertblock}[2][uoyred!75!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{uoyred!40!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title alerted}{fg=white,bg=uoyred}
\if\blockbodyopacity1
\setbeamercolor{block body alerted}{fg=uoytextcolor,bg=uoyred!10!white}
\else
\setbeamercolor{block body alerted}{fg=uoytextcolor,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamercolor{local structure}{use=block title,%
fg=block title.bg}}%
\usebeamertemplate{block alerted begin}%
}{\par%
\usebeamertemplate{block alerted end}%
\end{actionenv}\vskip \blockbottommargin%
\end{blockminipage}}
% A few enviroments
\newenvironment<>{termblock}[2][green!90!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{black}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{\bfseries#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=green!80!black,bg=black}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=white,bg=white!20!black}
\else
\setbeamercolor{block body}{fg=white,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}\vskip \blockbottommargin\end{blockminipage}}
\newenvironment<>{problock}[2][green!80!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{green!3!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=green!80!black,bg=green!5!white}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=uoydarkfg,bg=green!1!white}
\else
\setbeamercolor{block body}{fg=uoydarkfg,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}\vskip \blockbottommargin\end{blockminipage}}
\newenvironment<>{conblock}[2][red!80!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{red!3!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=red!80!black,bg=red!5!white}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=uoydarkfg,bg=red!1!white}
\else
\setbeamercolor{block body}{fg=uoydarkfg,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}\vskip \blockbottommargin\end{blockminipage}}
\newenvironment<>{yellowblock}[2][yellow!90!black]{%
\vskip \blocktopmargin%
\begin{blockminipage}{yellow!40!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=yellow!20!black,bg=yellow!60!white}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=black,bg=yellow!25!white}
\else
\setbeamercolor{block body}{fg=black,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}\vskip \blockbottommargin\end{blockminipage}}
\newenvironment<>{blueblock}[2][uoyblue]{%
\vskip \blocktopmargin%
\begin{blockminipage}{uoyblue!40!white}{\blockbodyopacity}%
\begin{actionenv}#3%
\def\insertblocktitle{#2}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=white,bg=uoyblue}
\if\blockbodyopacity1
\setbeamercolor{block body}{fg=uoytextcolor,bg=uoyblue!20!white}
\else
\setbeamercolor{block body}{fg=uoytextcolor,bg=}
\fi
\setbeamercolor{itemize item}{fg=#1}
\setbeamercolor{itemize subitem}{fg=#1}
\setbeamertemplate{itemize item}[triangle]
\setbeamertemplate{itemize subitem}[circle]
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}\vskip \blockbottommargin\end{blockminipage}}
\setbeamertemplate{blocks}[default]
\setbeamerfont{block title}{size=\normalsize\rule{0mm}{\f@size pt}\strut\ifx\insertblocktitle\@empty{\vspace{-2mm}\vspace{-\f@size pt}}\fi}
\setbeamercolor{block title}{fg=white,bg=uoyblue}
\setbeamercolor{block body}{fg=black,bg=uoyblue!20!white}
\setbeamercolor{block title example}{fg=white,bg=green}
\setbeamercolor{block body example}{fg=black,bg=green!20!white}
\setbeamercolor{block title alerted}{fg=white,bg=uoypurple}
\setbeamercolor{block body alerted}{fg=black,bg=uoypurple!20!white}
% Title-Command
\newcommand{\fcbox}[2]{{\fcolorbox{#1}{#1}{#2}}}
\newcommand{\insertuoytab}[1]{
\begin{tikzpicture}[remember picture, overlay]
\node [anchor=north east, inner sep=0, scale=1.4] at ([xshift=-3mm, yshift=-4mm]current page.north east)
{\pgfuseimage{#1}};
\end{tikzpicture}
}
\newcommand{\insertuoyidentity}{
\begin{tikzpicture}[remember picture, overlay]
\fsize{1.7mm}
\color{uoyblue}
\node [anchor=north east, inner sep=0] at ([xshift=-3mm, yshift=-16.5mm]current page.north east)
{ \begin{hyphenrules}{nohyphenation}%
\textbf{{\uoysubid} {\uoyid}}
\end{hyphenrules}%
};
\end{tikzpicture}
}
\newcommand{\insertuoyidentityfaculty}{
\begin{tikzpicture}[remember picture, overlay]
\node [anchor=south west, inner sep=0] at ([xshift=0.056\paperwidth, yshift=0.05\paperheight]current page.south west)
{
\def\thisblockfontheight{2.5mm}
\fboxrule=0pt
\fboxsep=0.8mm
\fsize{\thisblockfontheight}
\color{white}
\ifx\uoysubid\@empty\else\fcbox{uoydarkfg}{
\textbf{\rule{0mm}{\thisblockfontheight}\strut\uoysubid}
}\fi\fcbox{uoyidcolour}{
\textbf{\rule{0mm}{\thisblockfontheight}\strut\uoyid\ }
}%
};
\end{tikzpicture}
}
% TAB - Synced width and height (uoy title relates to it)
\pgfdeclareimage[interpolate=true,height=8mm]{uoy-tab}{images/erad-logo.pdf}
\pgfdeclareimage[interpolate=true,height=8mm]{uoy-tab-institute}{images/erad-logo.pdf}
% Cover
\pgfdeclareimage[interpolate=true,width=\paperwidth]{bottomtitle}{images/lawcg22-araucaria.pdf}
\pgfdeclareimage[interpolate=true,width=\paperwidth]{bottomtitledarktheme}{images/lawcg22-araucaria.pdf}
\newcommand{\bgimg}{bottomtitle}
% Unknown option
\DeclareOption*{
\PackageWarning{uoy-beamer}{Unknown option '\CurrentOption'}
}
% Clear canvas
\def\whitebg{1}
\DeclareOption{uoynobg}{
\def\whitebg{0}
}
% Clear canvas
\def\whitebg{1}
\DeclareOption{uoybglogo}{
\def\whitebg{0}
\renewcommand{\bgimg}{bottomtitle}
}
% Dark theme
\def\darkbg{0}
\DeclareOption{darktheme}{
\def\darkbg{1}
\def\whitebg{0}
\colorlet{canvascolor}{uoydarkbg}
\colorlet{uoystrongcolour}{uoyblue!70!white}
\colorlet{uoylightcolour}{uoypurple!80!white}
\colorlet{uoytextcolor}{white}
\colorlet{slidetitle}{uoybluealt!60!white}
\colorlet{quotesentence}{uoyblue!70!white}
\colorlet{dotscolour}{white}
\renewcommand{\bgimg}{bottomtitledarktheme}
\pgfdeclareimage[interpolate=true,height=8mm]{uoy-tab}{images/uoy-logo-white.pdf}
\pgfdeclareimage[interpolate=true,height=8mm]{uoy-tab-institute}{images/uoy-logo-white.pdf}
}
% Coloured logo
\DeclareOption{colour}{
\renewcommand{\incolour}{_colour}
}
\DeclareOption{color}{
\renewcommand{\incolour}{_colour}
}
% MAIN/CORPORATE (default)
\DeclareOption{main}{}
% TECH colours
% \DeclareOption{tech}{
% \renewcommand{\tabtype}{tech}
%
% \colorlet{uoystrongcolour}{uoyblue}
% \colorlet{uoylightcolour}{uoybluelight}
% \colorlet{uoyidcolour}{uoyblue}
% \colorlet{slidetitle}{uoyblue}
% \colorlet{slidetitles}{uoybluelight}
% }
% -- end of options
\ProcessOptions\relax
% Removes nav in pages
\usenavigationsymbolstemplate{}
% Colours
\setbeamercolor{normal text}{fg=uoytextcolor}
\setbeamercolor{section name}{fg=slidetitle}
\setbeamercolor{section in toc}{fg=slidetitle}
\setbeamercolor{subsection name}{fg=slidetitle}
\setbeamercolor{subsection in toc}{}
% Table of content
\let\oldtoc\tableofcontents
\renewcommand{\tableofcontents}{
\begin{minipage}{\textwidth}
\oldtoc
\end{minipage}
}
\newcommand{\quotesentence}[2][1em]{\vskip #1 \begin{minipage}{\textwidth}\begin{center} \color{quotesentence} \textbf{\LARGE #2} \end{center}\end{minipage}}
\newcommand{\logobg}[1]{
\begin{tikzpicture}[remember picture, overlay]
\node [anchor=south west, inner sep=0pt, opacity=.5, scale=.32, yshift=-1.5cm, xshift=-6cm] at (current page.south west)
{\pgfuseimage{#1}};
\end{tikzpicture}
}
\setbeamercolor{background canvas}{bg=canvascolor}
\setbeamertemplate{background}{
\ifnumequal{\whitebg}{1}{}{
\ifnumequal{\c@framenumber}{1}{%
% First frame
\logobg{\bgimg}
}{%
\ifnumequal{\c@framenumber}{\inserttotalframenumber}{
% Last frame
\logobg{\bgimg}
}{%
% Other frames
%% \logobg{\bgimg}
}
}%
}
}
\newcommand{\inserttopline}{%
\begin{tikzpicture}[overlay, remember picture]
\fill[fill=uoyblue] (current page.north west) rectangle ($(current page.north east)+(0,-0.2)$);
\end{tikzpicture}%
}
\setbeamertemplate{title page}
{
\inserttopline
\insertuoytab{uoy-tab}
% \insertuoyidentityfaculty
\begin{center}
\vskip 20mm
{
\fboxrule=0pt
\fboxsep=1mm
\begin{minipage}[b][\height][b]{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}
\centering
\vspace{1cm}
{ \usebeamerfont{title}\LARGE\color{uoylightcolour}\textbf{\inserttitle} }
\ifx\insertsubtitle\@empty
\else
\vspace{-1cm}
\tikz \fill [verde] (0,0) rectangle (\textwidth,0.02);
\begin{minipage}{\dimexpr\textwidth-6\fboxsep-6\fboxrule\relax}
\centering
{ \usebeamerfont{subtitle}\color{uoylightcolour}\rule{0mm}{\f@size pt}\strut{ \insertsubtitle} }
\end{minipage}
\fi
\vspace{1mm}
\end{minipage}
}
\vskip 4mm
{
\fboxrule=0pt
\fboxsep=1mm
\begin{minipage}[b][\height][b]{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}
\vspace{2mm}
\centering
\ifx\insertauthor\@empty
\else
{ \usebeamerfont{author}\large\color{uoytextcolor}{\insertauthor} }
\fi
\ifx\insertinstitute\@empty
\else
\vskip 2mm
% \fcbox{white}{
\begin{minipage}{\dimexpr\textwidth-6\fboxsep-6\fboxrule\relax}
\centering
{ \usebeamerfont{author}\small\color{uoytextcolor}\rule{0mm}{\f@size pt}\insertinstitute }
\end{minipage}
% } % fcbox
\fi
\vspace{1mm}
%% \vspace{.4cm}\hspace{-12.4cm}\includegraphics[scale=.3]{images/ufpr-logo.pdf}
\end{minipage}
}
%% \ifx\insertdate\@empty
%% \else
%% \begin{tikzpicture}[remember picture, overlay]
%% \node [anchor=south east, inner sep=0pt] at ([yshift=3mm, xshift=-3mm]current page.south east)
%% { \small\color{uoyblue}\insertdate };
%% \end{tikzpicture}
%% \fi
\vspace{.5cm}
\begin{center}
\textbf{\color{uoyblue}\insertdate}
\end{center}
\end{center}
}
\setbeamercolor{headline}{fg=white}
\setbeamertemplate{headline}{
\inserttopline
\insertuoytab{uoy-tab-institute}
\insertuoyidentity
\vskip 17mm%
% \begin{center}%
% \ifx\insertframetitle\@empty
\parbox[t]{\paperwidth}{\strut}%
% \else
% \parbox[t]{\paperwidth}{\strut\color{dotscolour}\dotfill}%
% \fi
% \end{center}
}
\setbeamercolor{frametitle}{fg=slidetitle}
\setbeamertemplate{frametitle}{
\vskip -16mm
\noindent\begin{minipage}{.77\textwidth}
\textbf{\color{uoylightcolour}\Large\strut\insertframetitle}
\end{minipage}
\vskip \frametitlemargin
\vfill
}
\setbeamercolor{footline}{fg=uoystrongcolour}
\setbeamertemplate{footline}{
\vfill
\centerline{\parbox[t]{\paperwidth}{\strut\color{dotscolour}\dotfill}}%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,left]{}%
\hspace*{2ex}\bfseries \insertshortauthor
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{}%
\bfseries \insertshorttitle\ \insertshortdate
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{}%
\bfseries \hspace*{2ex}
\end{beamercolorbox}
}%
\begin{tikzpicture}[remember picture, overlay]
\fill[orange,anchor=south east, inner sep=0pt, yshift=-1mm, xshift=-14mm] (0,0) rectangle (7mm,5mm);
\node [anchor=south east, inner sep=0pt] at ([yshift=-0.3mm, xshift=-9.7mm]current page.south east)
{ \makebox[0.5mm]{\color{white!91!uoypurple}\large\bfseries\strut\insertframenumber{}} };
\end{tikzpicture}
\vskip0pt%
}
% Additional stuff
\newcommand{\code}[1]{{\lstset{basicstyle=\large\ttfamily}\lstinline!#1!}}
\mode
<all>
function compileTex (){
pdflatex --interaction=nonstopmode $1
bibtex $(basename $1)
pdflatex $(basename $1)
pdflatex $(basename $1)
rm $(basename $1).{aux,bbl,blg,log,run.xml,toc,snm,out,nav,bib}
}
compileTex $@
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment