Sexta, 13/04 Sábado, 14/04 Domingo, 15/04
08:00 – 08:30 Credenciamento Credenciamento Sessão Técnica I

Apresentação de Artigos
08:30 – 09:00 Mini Curso I

OpenMP - Calebe P. Bianchini (Mackenzie)
Mini Curso III

CUDA - Pedro Mario (NVIDIA)
Mini Curso II

Introdução à Programação Paralela em Clusters Heterogêneos

Silvio Stanzani (UNESP)
Mini Curso IV

Programação de aceleradores baseada em diretivas de compilação (Pedro Pais Lopes)
09:00 – 09:30
09:30 – 10:00 Sessão de Posters / Coffee-break
10:00 – 10:30 Coffee-break Coffee-break
10:30 – 11:00 Mini Curso I

OpenMP - Calebe P. Bianchini (Mackenzie)
Mini Curso III

CUDA - Pedro Mario (NVIDIA)
Mini Curso II

Introdução à Programação Paralela em Clusters Heterogêneos

Silvio Stanzani (UNESP)
Mini Curso IV

Programação de aceleradores baseada em diretivas de compilação (Pedro Pais Lopes)
Sessão Técnica II

Apresentação de Artigos
11:00 – 11:30
11:30 – 12:00
12:00 – 12:30 Almoço Almoço Almoço
12:30 – 13:00
13:00 – 13:30
13:30 – 14:00 Cerimônia de Abertura

Palestra I - Approximated computing, from programming language to the hardware

Dr. Luis Ceze (University of Washington)
Tutorial II

Meltdown/Spectre

Rodolfo Azevedo (UNICAMP)
Palestra II

Modernas arquiteturas de Computadores: core & cache

Dr. Leonardo Fialho (Atos/Bull)
14:00 – 14:30
14:30 – 15:00
15:00 – 15:30 Palestra: Inteligência Artificial na Arquitetura Intel Warm-up Desafio de Programação Paralela Tutorial III

HardCloud / Intel Harp

Guido Araújo (UNICAMP)
Painel sobre Programação Paralela
15:30 – 16:00
16:00 – 16:30 Palestra: SDC/Seagate
16:30 – 17:00 Coffee-break Desafio de Programação Paralela

Calebe P. Bianchini (Mackenzie)

Daniel M. Lamosa (CPTEC/INPE)
Coffee Break Cerimônia de Encerramento e Premiação
17:00 – 17:30 Palestra: IBM (Fernando Toledo) Tutorial IV

Charm++/AMPI - Eduardo R. Rodrigues (IBM)
17:30 – 18:00
18:00 – 18:30 Tutorial I

Deep Learning/TensorFlow

Pedro Mario (Nvidia)
18:30 – 19:00
19:00 – 19:30
19:30 – 20:30 Reunião CRAD
20:30 Jantar do evento - Golden Grill

Programação Detalhada

Palestra: Approximated computing, from programming language to the hardware.

Prof. Luiz Ceze (Computer Science and Engineering / University of Washington)

Slides

A significant proportion of computer system resources are devoted to applications that can inherently tolerate inaccuracies in their data, execution and communication. Hence, approximate computing is promising for performance and energy efficiency. However, taking advantage of approximate computing needs: language support to specify where and how to apply approximation; analysis and mechanisms that ensure good output quality; and hardware/system support that take advantage of approximation. In this talk I will describe our effort on co-designing language, hardware and system support to take advantage of approximate computing across the system stack (compute, storage and communication) in a safe and efficient way. I will end with some thoughts on how effective approximate computing techniques can not only improve computer systems in the short and medium term but can also enable the use of new substrates and applications.

Palestra: Modernas arquiteturas de Computadores: core e cache

Leonardo Fialho (Atos/Bull – ARM Software Lab Manager)

Arquiteturas de computadores modernos são bastante complexos e incluem múltiplos níveis de paralelismo. Existem dois níveis de paralelismo dentro do núcleo, pelo menos um nível dentro do nó e também existe paralelismo entre os nós. Fazer uso eficiente dessas máquinas é um desafio que precisa ser planejado a partir do algoritmo de solução para o problema, através da distribuição de dados entre diferentes processos. Existem diferentes estratégias para gerar um código eficiente, entretanto, algumas dessas estratégias podem se sobrepor ou estar em conflito. Procurar uma solução ideal é um desafio constante para programadores e também para especialistas em diferentes áreas do conhecimento. O único consenso é que o resultado final depende do nível de conhecimento que se possui sobre a arquitetura em que deseja programar e executar a aplicação paralela.

Palestra: Inteligência Artificial na Arquitetura Intel

Igor Freitas

Será abordado nesta palestra um overview do portfólio de software e hardware da Intel em Machine Learning e Deep Learning. Além disso, será apresentado um caso de sucesso nacional no qual técnicas de programação paralela ajudaram a acelerar workloads de Deep Learning em processadores escaláveis Intel® Xeon®.

Mini-Bio: Igor Freitas é Gerente de Parcerias de Eng. em Inteligência Artificial pela Intel. Atualmente coordena os ""Centros de Excelência Intel em Inteligência Artificial"", conduzindo projetos de P&D em conjunto com a indústria e academia. Possui MBA Executivo pelo INSPER, graduação em Informática e mestrado em Eng. Elétrica, ambos pela UNICAMP.

Mini Curso I - OpenMP - Um modelo de programação paralelas com threads

Calebe P. Bianchini (Mackenzie)

Slides

OpenMP é um modelo de programação paralela que oferece, basicamente, diretivas de compilação, bibliotecas e variáveis de ambiente. Mas, o que pode ser feito com tudo isso? Nesse minicurso vamos explorar alguns do recursos existentes no OpenMP atual (versão 4.5) e resolver problemas clássicos da computação. Utilizaremos o modelo de paralelismo apresentado no OpenMP chamado de fork/join e, juntamente com outros recursos disponíveis, teremos um alto grau de abstração para compartilhamento, sincronização, divisão de tarefas; e portabilidade, desenvolvendo soluções independente de arquiteturas e plataformas de execução.

Mini Curso II - Introdução à Programação Paralela em Clusters Heterogêneos

Silvio Stanzani (UNESP)

Material de Apoio

Atualmente, arquiteturas computacionais têm sido montadas de modo heterogêneo, compostas por recursos computacionais que possuem diversos processadores e coprocessadores ou aceleradores que podem ser usados em conjunto por uma mesma aplicação. Tais arquiteturas disponibilizam diversas unidades heterogêneas de processamento, escalares e vetoriais, e em geral dispõem de um sistema de memória heterogêneo e composto por múltiplos níveis. Mais recentemente, tem se observado uma variação quanto ao uso de coprocessadores e/ou aceleradores como nós independentes, que podem ser agregados em um sistema computacional por meio de uma rede de alto desempenho. Dois exemplos de uso de coprocessadores como nós independentes são o DGX-SATURNV desenvolvido pela 1 NVIDIA que utiliza nós do tipo NVIDIA DGX-1, e o projeto Aurora que é um projeto de 2 supercomputador que prevê o uso de nós do tipo Xeon Phi (KNL). Nesse sentido, as infra estruturas de clusters heterogêneas permitem explorar as diferentes vantagens que cada arquitetura pode oferecer. O objetivo deste minicurso é apresentar uma introdução a arquiteturas paralelas heterogêneas, ao modelo de programação por troca de mensagens e técnicas elementares de otimização para tais ambientes.

Mini Curso III - Fundamentos de Computação Acelerada com CUDA C/C++

Pedro Mario Cruz e Silva (NVIDIA)

Este curso dará uma introdução ao desenvolvimento de aplicações massivamente paralelas com CUDA em C/C++ para GPUs da NVIDIA. O público-alvo deste curso são desenvolvedores com alguma experiência com as linguagens C/C++ que estejam interessados em acelerar o desempenho de suas aplicações além dos limites da programação somente para CPU. Neste curso, você aprenderá como: Estender seu código C/C++ com o modelo de programação CUDA; Escrever e executar kernels que executam com paralelismo massivo em uma GPU NVIDIA; Perfilar e otimizar seus programas acelerados. Após a conclusão, você poderá escrever programas massivamente paralelos para arquiteturas heterogêneas com poderosas GPUs NVIDIA, e otimizar seu desempenho utilizando o NVVP.

Mini Curso IV - Programação de aceleradores baseada em diretivas de compilação

Pedro Pais Lopes

Processadores com centenas a milhares de núcleos de processamento estão presentes no cotidiano da computação. Este número expressivo de núcleos estão em placas gráficas (denominadas GPUs) como também em aceleradores x86 (como os Xeon Phi) ou mesmo em chips ARM, com arquiteturas complexas de acesso a memória e de operações de ponto flutuante. A programação para utilizar este grande poder de processamento pode envolver linguagens especializadas, o que demanda profunda modificação do programa e possivelmente redução da sua portabilidade. Padrões de programação baseadas em diretivas, amplamente utilizadas para expor paralelismo em arquitetura de memória central, surgiram ou foram expandidos para permitir expor o paralelismo destes processadores massivamente paralelos. Neste minicurso serão tratados os padrões existentes (OpenACC e OpenMP v4.5), suas principais diretivas, compiladores com suporte a estes padrões e desempenho obtido em aplicações simples em algumas arquiteturas (GPU, CPU multicore e Xeon Phi).

Tutorial I - TensorFlow - Framework multi-plataforma para Deep Learning.

Joao Paulo de Oliveira (NVIDIA)

TensorFlow é um framework de código aberto para computação numérica que utiliza o conceito de fluxo em grafos. Os nós do grafo representam operações matemáticas, enquanto suas arestas representam matrizes de dados multidimensionais. Matrizes, ou tensores, são transformados e fluem pelo grafo de maneira estruturada. A flexibilidade do TensorFlow™ permite a implementação de soluções de alto nível de Machine Learning e Deep Learning em CPUs ou GPUs. Atualmente é o framework mais utilizado para treinamento e inferência de redes neurais. Neste tutorial serão apresentados tópicos importantes para o desenvolvimento de aplicações com o framework: Arquitetura, características e sintaxe; Treinamento, inferência e deploy de aplicações; Escalabilidade de treinamentos em múltiplas GPUs; Recomendações de uso e bibliotecas auxiliares - TFLearn e TF-Slim; Aplicações em Visão Computacional.

Tutorial II - Meltdown/Spectre - Rodolfo Azevedo (UNICAMP)

Recentemente foram divulgados dois bugs de processadores que têm o potencial de afetar praticamente todos os equipamentos computacionais ativos atualmente. Nesta palestra, serão discutidos os desenvolvimentos arquiteturais que permitiram que estes bugs surgissem e também como eles podem ser explorados e mitigados.

Tutorial III - HardCloud / Intel Harp - Automatic Offloading of Cluster Accelerators

Ciro Ceissler, Ramon Nepomuceno, Marcio Pereira and Guido Araujo

The sheer amount of computing resources required to run modern cloud workloads has put a lot of pressure on the design of power efficient cluster nodes. To address this problem, Intel (HARP) and Microsoft (Catapult) have proposed CPU-FPGA integrated architectures that can deliver efficient power-performance executions. Unfortunately, the integration of FPGA acceleration modules to software is a challenging endeavor that does not have a seamless programming model. This tutorial presents HardCloud (www.hardcloud.org), an extension of the OpenMP 4.X standard that eases the task of offloading FPGA modules to cluster accelerators. Participants will be able do hands-on experiments that use HardCloud to program FGPA modules in order to accelerate code on the Intel Altera HARP 2 architecture. This work will also be presented at The 26th IEEE International Symposium on Field-Programmable Custom Computing Machines (FCCM 2018).

Sessão Técnica I

Sessão de Posters / Coffee-Break

09:40 - 10:30

Sessão Técnica II