Inscrições aos Minicursos

Todos os minicursos terão transmissão ao vivo.

Contudo, os minicursos práticos com acesso remoto precisam de inscrição prévia por motivos de segurança. Verifique abaixo o link de inscrições para cada minicurso:

O livro dos minicursos está disponível em:

Minicursos de Quarta-feira (15/04)

Minicurso 1 - Quarta 10:30

Introdução à Programação com OpenACC

O OpenACC (programação para aceleradores) é um modelo de programação para computação paralela desenvolvido com o objetivo de simplificar a programação paralela, oferecendo alto desempenho e portabilidade entre vários tipos de arquiteturas: multicore, manycore e GPUs. Este minicurso tem por objetivo apresentar este novo modelo de programação e suas facilidades de uso. A proposta deste minicurso é oferecer uma introdução à programação com OpenACC através de uma abordagem expositiva como: uma visão geral dos conceitos, diretivas e cláusulas; acrescidas da utilização de exemplos com os diversos tipos de arquiteturas alvo.

Ministrantes

Gabriel Pereira

Doutor pela Universidade Federal do Rio de Janeiro. Professor e Chefe do Departamento de Ciência da Computação.

Participa como avaliador institucional do MEC e integra o BASis.

Evaldo B. Costa

Mestre pela Universidade Federal do Rio de Janeiro

Doutorando pela Universidade Federal do Rio de Janeiro

Minicurso 2 - Quarta 13:30

Desenvolvimento de aplicações paralelas com o paradigma orientado a tarefas e o runtime StarPU

O minicurso enquadra-se no contexto de programação paralela de plataformas heterogêneas. As novidades e a heterogeneidade de recursos computacionais cada vez mais presentes no mundo da computação de alto desempenho, como aceleradores GPGPUs, continuam contribuindo para a complexidade da programação paralela. O paradigma orientado a tarefas permite algumas facilidades nesta programação por que transfere para um runtime muitas responsabilidades que seriam anteriormente realizadas pelo programador nos paradigmas tradicionais. É responsabilidade do runtime escalonar as tarefas, gerenciar a memória, e escolher o recurso/implementação ao ser utilizada. Para isso, basta o programador neste paradigma definir as tarefas, suas implementações em recursos heterogêneos diferentes, e suas dependências de dados. Neste minicurso, será apresentado o paradigma de programação paralela orientado a tarefas, e como construir programas que executam em recursos heterogêneos utilizando o runtime StarPU. O minicurso será conduzido de forma prática, exemplos e exercícios de programas básicos e naturalmente adaptáveis ao paradigma orientado a tarefa serão demonstrados. Serão usados exemplos de aplicações como produto escalar de vetores, soma e multiplicação de matrizes. Demonstraremos como programar tarefas com múltiplas implementações, utilizando CPU e GPU. Por fim, faremos a introdução a ferramentas e métodos de como analisar estes programas, como o uso do framework StarVZ.

Ministrantes

Lucas M. Schnorr

Professor da Universidade Federal do Rio Grande do Sul (UFRGS)

Lucas Leandro Nesi

Doutorando pela Universidade Federal do Rio Grande do Sul (UFRGS)

Vinicius Garcia

Professor da Universidade Federal do Rio Grande do Sul (UFRGS)

Marcelo Miletto

Mestrando pela Universidade Federal do Rio Grande do Sul (UFRGS)

Minicurso 3 - Quarta 17:00

Programando Aplicações com Diretivas Paralelas

Uma das motivações para o desenvolvimento de programas paralelos é acelerar aplicações científicas. Aplicações deste tipo geralmente demandam de um grande tempo de computação para uma versão com um único fluxo de execução, o que pode levar minutos, horas ou até mesmo dias, dependendo do tamanho do domínio ou resolução do problema adotado. Uma das maneiras de gerar paralelismo a partir de um código é inserir diretivas (pragmas), os quais geram fluxos concorrentes de código, que podem ser executados tanto em arquiteturas multi-core como many-core. Neste sentido, este minicurso tem como objetivo apresentar técnicas de exploração de paralelismo em diferentes trechos de código para um conjunto de aplicações científicas usando as interfaces de programação OpenMP e OpenACC. Serão demonstrados exemplos reais do impacto do uso de pragmas no desempenho de códigos, incluindo situações em que a granularidade impede que se obtenha a aceleração do programa. Com isso, o foco do minicurso está voltado para um nível intermediário, fugindo de simples exemplos introdutórios às interfaces de programação, mas atuando em códigos com um número expressivo de linhas de código. Desta forma, o participante perceberá as reais dificuldades que existem ao se deparar com a necessidade de paralelização de um código-fonte.

Ministrantes

Claudio Schepke

Professor adjunto da Universidade Federal do Pampa (UNIPAMPA), campus Alegrete/RS. Possui graduação em Ciência da Computação pela Universidade Federal de Santa Maria (2005) e mestrado (2007) e doutorado (2012) em Computação pela Universidade Federal do Rio Grande do Sul, sendo este feito na modalidade sanduíche na Technische Universität Berlin, Alemanha (2010-2011).

Natiele Lucca

Graduada em Ciência da Computação pela Unipampa e atualmente mestranda do Programa de Pós-Graduação em Engenharia de Software (PPGES) da Unipampa, Campus Alegrete

Minicurso 4 - Quarta 20:30

Programação Paralela em Memória Compartilhada e Avaliação de Desempenho com Contadores de Hardware

No passado, o aumento de desempenho das aplicações se dava de forma transparente aos programadores devido ao aumento do paralelismo a nível de instruções e aumento de frequência dos processadores. Entretanto, isto já não se sustenta mais há alguns anos. Atualmente para se ganhar desempenho nas arquiteturas modernas, é necessário conhecimentos sobre programação paralela e vetorial. Todos estes paradigmas são tratados de alguma forma em muitos cursos de computação, mas geralmente não aprofundados. Neste contexto, este tutorial objetiva propiciar um maior entendimento sobre os paradigmas de programação paralela e vetorial, de forma que os participantes aprendam a otimizar adequadamente suas aplicações para arquiteturas atuais. Além disso, conceitos de avaliação de desempenho com contadores de hardware via Linux perf e PAPI serão ensinados. Desta forma, os estudantes terão a oportunidade de aprender e praticar conceitos de programação paralela em aplicações de alto desempenho.

Ministrantes

Matheus Serpa

Doutorando pela Universidade Federal do Rio Grande do Sul (UFRGS). Tendo sido bolsista de iniciação científica da FAPERGS por dois anos, e recebido o Prêmio Destaques UNIPAMPA 2015 e o Prêmio Aluno Destaque da SBC (2016). Nos 3 últimos anos foi responsável pelo minicurso de Programação Paralela na ERAD/RS.

Claudio Schepke

Professor adjunto da Universidade Federal do Pampa (UNIPAMPA), campus Alegrete/RS. estrado (2007) e doutorado (2012) em Computação pela Universidade Federal do Rio Grande do Sul, sendo este feito na modalidade sanduíche na Technische Universität Berlin, Alemanha (2010-2011).

Minicursos de Quinta-feira (16/04)

Minicurso 5 - Quinta 9:00

Networks on Chip - Estudo e Implementação em Hardware Reconfigurável

Atualmente a principal solução de processamento para sistemas de alto desempenho são os Systems on Chip (SoCs). Estes sistemas apresentam um hardware desenvolvido para processamento com não apenas uma unidade de processamento padrão, mas também outros núcleos especializados em tarefas específicas. Um exemplo claro são os processadores de computadores atuais que contém também um processador específico para aplicações gráficas. O próximo passo a ser explorado afundo serão processadores que possuem diversos núcleos heterogêneos, ou seja, cada núcleo do SoC será especializado em uma tarefa específica permitindo inclusive um número alto de configurações possíveis do mesmo chip a serem construídos de acordo com a necessidade do usuário final. Um dos problemas enfrentados na construção deste tipo de hardware é a comunicação entre os diferentes núcleos heterogêneos. Uma das principais soluções para este problema é a construção de uma Network on Chip (NoC), ou seja, uma plataforma de comunicação que provê alta velocidade para troca de dados entre os núcleos do chip baseada em conceitos desenvolvidos para redes de computadores como confiabilidade, integridade de transmissão e Quality of Service (QoS). Considerando a importância deste assunto para o cenário atual de Computação de Alto Desempenho, o objetivo deste minicurso é apresentar os principais conceitos sobre Networks on Chip (NoC), suas aplicações e as soluções implementadas em hardware reconfigurável para estudo desta estrutura. Questões a serem tratadas são o roteamento, a tolerância a falhas da estrutura, o consumo de energia e o escalonamento de tarefas. Devido à complexidade de implementação e teste destes sistemas é necessário que se utilize uma ferramenta de prototipação que permita o estudo da paramétrico e com precisão das soluções criadas e uma destas ferramentas é o FPGA. As soluções utilizando esta plataforma de hardware reconfigurável serão também apresentadas de forma que seja possível aprender uma técnica e uma ferramenta para criação e teste de estruturas na área.

Ministrantes

Maurício Acconcia

Professor substituto nas instituições Unesp, ICMC-USP, UFscar. Professor na Fatece e no Centro Universitário da Fundação Hermínio Ometto (FHO).

Suas principais área de atuação são: sistemas embarcados, arquitetura de computadores,hardware reconfigurável e inteligência computacional bioinspirada

Marcílio Neto

Mestrando pela Universidade Estadual Paulista (UNESP) com foco em Inteligência Computacional - Web Semântica, Representação de Conhecimento e IoT. Atualmente é professor na FHO|Uniararas nos cursos de Engenharia

Minicurso 6 - Quinta 10:30

Computação Quântica - implementando um circuito quântico e analisando qual a sua sensibilidade ao ruído

A computação quântica tem se apresentado como uma das possibilidades mais promissoras na aceleração do processamento. Se o algoritmo escolhido se adequa ao modelo da computação quântica, se tem promessas de speedup exponencial, tanto em processamento como em armazenamento. A Atos desenvolveu um simulador de computação quântica chamado QLM – Quantum Learning Machine. A ideia desse simulador é possibilitar a simulação da computação quântica independente de suas implementações, e comparar os resultados considerando diferentes implementações.

Um mesmo circuito quântico pode necessitar diferentes alterações para ser executados em implementações reais, como o IBM QX4 (superconducting qubits) ou na implementação do projeto AQTION (trapped ions). Com a promessa de se ter disponível aceleradores quânticos em 3 a 5 anos, precisamos entender quais algoritmos poderão se beneficiar dessa tecnologia, assim como quais os efeitos do ruído nesses dispositivos. Nesse minicurso teremos uma apresentação básica dos conceitos da computação quântica, usando o QLM, e faremos uma análise acessando o simulador da Atos, de um circuito quântico que resolve transformadas de Fourier (QFT). Será feita a análise do uso do reordenamento das portas e sua sensibilidade ao ruído, considerando as arquiteturas do IBM QX4 e do projeto AQTION.

Ministrante

Genaro Costa

Genaro Costa, PhD, PMP. Atua como HPC Senior Expert / Gerente de Projetos na Atos Bull, coordenando o Atos R&D Labs no Senai CIMATEC. Graduado em Ciência da Computação pela UCSal, mestre e doutor em Informática pela Universitat Autónoma de Barcelona (UAB).

Tem interesse de pesquisa em Computação de Alto Desempenho, Machine Learning, Big Data, Performance Models, Computer Vision, Quantum Computing e Prescriptive Analytics.

Minicurso 7 - Quinta 20:30

High-Performance Deep Learning at Scale

The computational requirements of deep neural networks used to enable AI applications like self-driving cars are enormous. A single training cycle can take weeks on a single GPU, or even years for the larger datasets like those used in self-driving car research. Using multiple GPUs for deep learning can significantly shorten the time required to train lots of data, making solving complex problems with deep learning feasible.

In this course we will discuss how to use multiple GPUs to training neural networks. We will cover:

- Approaches to multi-GPU training

- Algorithmic and engineering challenges to large-scale training

- Key techniques used to overcome the challenges mentioned above

- How to use the open-source distributed training framework Horovod to achieve an efficient parallel high-scalable training, programming motifs like multiple workers, race conditions, and synchronization

Upon completion, you'll be able to effectively parallelize training of deep neural networks using TensorFlow.

Ministrante

João Paulo Navarro

É Cientista da Computação graduado pela Universidade Federal de Juiz de Fora (UFJF) e mestre em Modelagem Computacional pela mesma instituição. Foi membro do Grupo de Computação Gráfica da UFJF, trabalhando em pesquisas nas áreas de Computação Visual, Simulação Física e Computação de Alto Desempenho. Sua experiência como engenheiro de software foi construída durante anos desenvolvendo sistemas na PUC-Rio, com foco em aplicações de Machine Learning para a indústria de Óleo & Gás. É autor de publicações em conferências internacionais nas áreas de Machine Learning e Computação Gráfica, suas especialidades. Atualmente é Arquiteto de Soluções na NVIDIA, com foco no design de soluções escaláveis baseadas em computação acelerada com GPU, voltadas para Deep Learning e HPC.

Minicursos de Sexta-feira (17/04)

Minicurso 8 - Sexta 14:30

Boas Práticas para Experimentos Computacionais de Alto Desempenho

Este minicurso se posiciona na temática de análise de desempenho de aplicações paralelas para computação de alto desempenho. Especificamente, o minicurso se propõe a sensibilizar os participantes aos fatores que impactam a coleta de medidas representativas para que os experimentos sejam mais confiáveis.

O minicurso tem três partes: (a) motivar cuidados essenciais na realização de experimentos computacionais para controlar a variabilidade experimental; (b) apresentação dos principais formas de controlar parâmetros em sistemas Linux, tais como controle de frequência do processador e atividades do sistema operacional; e (c) como analisar os dados coletados com linguagens de programação e ferramentas modernas de manipulação de dados que habilitam a reprodutibilidade desta análise. O minicurso é da categoria intermediário pois demanda conhecimento prévio em programação paralela, scripting em bash e Linux.

O minicurso é da categoria intermediário pois demanda conhecimento prévio em programação paralela, scripting em bash e Linux.

Lucas M. Schnorr

Pós-doutorado pela Centre National de la Recherche Scientifique (2011) e pós-doutorado pela Institut National de Recherche en Informatique et en Automatique(2017). Atualmente é Professor Adjunto da Universidade Federal do Rio Grande do Sul e orientador do Programa de Pós-Graduação em Computação (nível máximo na avaliação da CAPES). Conduz pesquisas em ambiente internacional. Tem experiência na área de Ciência da Computação, com ênfase em Sistemas de Computação e Processamento de Alto Desempenho.

Vinicius Garcia Pinto

Doutorado em Computação pela Universidade Federal do Rio Grande do Sul em cotutela com a Université Grenoble Alpes / França (2018). Foi professor da Faculdade São Francisco de Assis e da Universidade de Caxias do Sul e atualmente é professor substituto e pós-doutorando no Departamento de Informática Aplicada da Universidade Federal do Rio Grande do Sul. Tem experiência em Programação Paralela e Computação de Alto Desempenho.

Lucas Leandro Nesi

Doutorando em Computação pela Universidade Federal do Rio Grande do Sul com bolsa da Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (CAPES). Realiza pesquisas na área de processamento de alto desempenho, especialmente em problemas que envolvem sistemas com múltiplos nós computacionais equipados com múltiplas GPUs e CPUs.