XIX Escola Regional de Alto Desempenho da Região Sul

10 a 12 de abril de 2019 em Três de Maio - RS

Minicursos

Minicurso 1:

Introdução à Deep Learning com NVIDIA DIGITS

  • Quarta, 10/abr/2019 10h00
  • Laboratório 1
  • Intermediário
  • PDF
  • Slides

Deep Learning está dando às máquinas capacidades super-humanas de reconhecimento de objetos, e substituindo o modelo rule-based por modelos preditivos aprendidos diretamente dos dados. Este minicurso apresenta uma introdução ao fluxo de trabalho de machine learning e oferece uma experiência prática na utilização de redes neurais profundas (DNN - Deep Neural Networks) para resolver problemas reais de classificação de imagens. A metodologia apresentada inclui as etapas de preparação dos dados, definição do modelo, treinamento da rede, estratégias de validação e testes para melhoria do modelo. Este treinamento mostra os benefícios da utilização de GPUs no treinamento de redes neurais profundas. Ao final o aluno terá o conhecimento necessário para utilizar a ferramenta NVIDIA DIGITS para treinar uma DNN em seu próprio conjunto de imagens para classificação.

Ministrado por:

Pedro Mário Cruz e Silva

Pedro Mário Cruz e Silva

Pedro é Bacharel em Matemática (1995) e Mestre em Matemática Aplicada e Otimização (1998) pela UFPE, Doutor em Computação Gráfica pela PUC-Rio (2004). Trabalhou por 15 anos no Instituto Tecgraf/PUC-Rio onde criou o Grupo de Geofísica Computacional, durante este período liderou diversos projetos de Desenvolvimento de Software, bem como projetos de Pesquisa na área de Geofísica. Finalizou o MBA em Gestão Empresarial na FGV-Rio. Atualmente é o Gerente de Arquitetura de Soluções da NVIDIA para América Latina.

Minicurso 2:

Projetando e Construindo Programas Paralelos

  • Quarta, 10/abr/2019 10h00
  • Laboratório 6
  • Básico
  • PDF

O minicurso, de nível introdutório, apresenta os conceitos de projeto e a construção de programas paralelos. Ele é fortemente baseado no livro de Ian Foster que porta o título Designing and Building Parallel Programs [Foster 1995]. O enfoque será dado para o projeto metodológico chamado PCAM, oriundo das quatro fases de criação de um programa paralelo: Particionamento, Comunicação, Aglomeração e Mapeamento. Esses quatro eixos serão apresentados de forma a levar o participante a quebrar um problema potencialmente grande em pedações, pensar em como particioná-lo e as implicações do mapeamento em uma determinada máquina paralela. Serão utilizados exemplos práticos tais como simulação de equações físicas simples.

Ministrado por:

Lucas Mello Schnorr

Lucas Mello Schnorr

Lucas M. Schnorr possui graduação em Ciência da Computação pela Universidade Federal de Santa Maria (2003), mestrado em Computação pela Universidade Federal do Rio Grande do Sul (2005), doutorado em Computação pela Universidade Federal do Rio Grande do Sul (2009), 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.

Lucas Leandro Nesi

Lucas Leandro Nesi

Lucas Leandro Nesi possui graduação em Ciência da Computação pela Universidade do Estado de Santa Catarina (2017) e atualmente persegue um mestrado 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 heterogêneos com múltiplas GPUs e CPUs.

Minicurso 3:

Programação Paralela e Vetorial em Memória Compartilhada e Distribuı́da

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, distribuı́da 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, distribuı́da e vetorial, de forma que os participantes aprendam a otimizar adequadamente suas aplicações para arquiteturas atuais. Desta forma, os estudantes terão a oportunidade de aprender e praticar conceitos de programação paralela em aplicações de alto desempenho.

Ministrado por:

Matheus S. Serpa

Matheus S. Serpa

Matheus da Silva Serpa é Mestre pelo Programa de Pós-Graduação em Computação da Universidade Federal do Rio Grande do Sul (UFRGS), onde, atualmente é doutorando. É bacharel em Ciência da Computação pela Universidade Federal do Pampa (UNIPAMPA), 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). Matheus tem experiência na área de Ciência da Computação, com ênfase em Arquitetura de Computadores e Computação de Alto Desempenho. Nos 2 últimos anos foi responsável pelo minicurso de Programação Paralela e Vetorial na ERAD/RS.

Claudio Schepke

Claudio Schepke

Claudio Schepke é professor adjunto da Universidade Federal do Pampa (UNIPAMPA), campus Alegrete/RS desde 2012. 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). Tem experiência na área de Ciência da Computação, com ênfase em Processamento Paralelo e Distribuído, atuando principalmente nos seguintes temas: processamento de alto desempenho, programação paralela, aplicações científicas e computação em nuvem.

João V. F. Lima

João V. F. Lima

João V. F. Lima possui graduação em Ciência da Computação pela Universidade Federal de Santa Maria (2006), mestrado em Computação pela Universidade Federal do Rio Grande do Sul (2009) e doutorado em co-tutela entre a Université de Grenoble e Universidade Federal do Rio Grande do Sul (2014). Atualmente é Professor Adjunto do Departamento de Linguagens e Sistemas de Computação da Universidade Federal de Santa Maria. Tem experiência na área de Ciência da Computação, com ênfase em Processamento paralelo de alto desempenho, atuando principalmente nos seguintes temas: processamento de alto desempenho, programação paralela, linguagens de programação.

Minicurso 4:

Introdução à Programação de GPUs com a linguagem CUDA

  • Quinta, 11/abr/2019 09h30
  • Laboratório 1
  • Intermediário
  • PDF
  • Slides

A computação acelerada está substituindo a computação exclusivamente em CPU como a melhor prática. A grande quantidade de avanços científicos e tecnológicos impulsionados pela computação acelerada aumenta drasticamente a demanda por aplicativos acelerados. No centro do sucesso da computação acelerada, tanto em termos de desempenho impressionante quanto de facilidade de uso, está a linguagem CUDA. CUDA fornece um paradigma de programação que estende linguagens como C, C ++, Python e Fortran, para serem capazes de executar código acelerado e massivamente paralelizado nos processadores paralelos mais eficientes do mundo: GPUs da NVIDIA. O CUDA acelera os aplicativos drasticamente com pouco esforço, possui um ecossistema de bibliotecas altamente otimizadas para DNN, BLAS, análise de gráficos, FFT e muito mais, além de contar com ferramentas de desenvolvimento poderosas. CUDA suporta muitas, se não a maioria das aplicações de maior desempenho do mundo, em Dinâmica dos Fluidos Computacional, Dinâmica Molecular, Química Quântica, Física e HPC. Objetivos são: 1) Escrever, compilar e executar programas C/C ++ que chamam funções de CPU e iniciem kernels de GPU; 2) Controlar a hierarquia de threads paralelas usando a configuração de execução; 3) Redesenhar loops seriais para executar suas iterações em paralelo em uma GPU; 4) Alocar e liberar memória disponível para CPUs e GPUs; 5) Lidar com erros gerados pelo código CUDA; 6) Acelerar aplicativos somente da CPU.

Ministrado por:

Pedro Mário Cruz e Silva

Pedro Mário Cruz e Silva

Pedro é Bacharel em Matemática (1995) e Mestre em Matemática Aplicada e Otimização (1998) pela UFPE, Doutor em Computação Gráfica pela PUC-Rio (2004). Trabalhou por 15 anos no Instituto Tecgraf/PUC-Rio onde criou o Grupo de Geofísica Computacional, durante este período liderou diversos projetos de Desenvolvimento de Software, bem como projetos de Pesquisa na área de Geofísica. Finalizou o MBA em Gestão Empresarial na FGV-Rio. Atualmente é o Gerente de Arquitetura de Soluções da NVIDIA para América Latina.

Minicurso 5:

Boas Práticas para Experimentos

Este documento apresenta uma proposta de minicurso para a edição 2019 da Escola Regional de Alto Desempenho, a ser realizada na cidade de Três de Maio, noroeste do RS. O minicurso se posiciona na temática de análise de desempenho de aplicações paralelas em clusters de computadores 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. Ele traz exemplos interessantes de problemas de análise oriundos em medidas mal feitas, como já foi previamente relatado [Stanisic et al. 2017]. 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 analizar 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.

Ministrado por:

Lucas Mello Schnorr

Lucas Mello Schnorr

Lucas M. Schnorr possui graduação em Ciência da Computação pela Universidade Federal de Santa Maria (2003), mestrado em Computação pela Universidade Federal do Rio Grande do Sul (2005), doutorado em Computação pela Universidade Federal do Rio Grande do Sul (2009), 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.

Vinícius Garcia Pinto

Vinícius Garcia Pinto

Vinícius Garcia Pinto é doutor em Computação pelo Programa de Pós-Graduação em Computação da UFRGS em co-tutela com a Université Grenoble Alpes / França (2018). Mestre em Computação pelo Programa de Pós-Graduação em Computação da Universidade Federal do Rio Grande do Sul (2013). Bacharel em Ciência da Computação pela Universidade Federal de Santa Maria (2010) onde atuou como bolsista do Programa de Educação Tutorial (PET) do Curso de Ciência da Computação, também foi colaborador do Laboratório de Sistemas de Computação (LSC) e Professor do Curso de Ciência da Computação da Faculdade São Francisco de Assis. Atua no Grupo de Processamento Paralelo e Distribuído (GPPD) da UFRGS.

Minicurso 6:

Paralelismo no nível de tarefas utilizando o padrão OpenMP 4.5

Existem diversas formas de modelar o paralelismo em um determinado problema. Algumas dessas formas são amplamente utilizadas, como o paralelismo de dados e o paralelismo de loops. No entanto, quando tratamos de problemas cujas operações não são bem definidas, torna-se mais complexa a aplicação de paralelismo. Além disso, existem diversas partes de um problema que podem ser executadas de forma independente. Ou seja, existe outra forma de representação do paralelismo nestes casos chamado de paralelismo de tarefas. É comum a utilização da notação de grafos para a representação dessas tarefas e, consequentemente, permitir uma representação do fluxo de execução, dependências entre tarefas e, até mesmo, estudar técnicas de escalonamento. O objetivo deste minicurso é apresentar ao participante o modelo de paralelismo de tarefas por meio da fundamentação teórica, mostrando seu impacto em exemplos práticos com o uso do OpenMP 4.5.

Ministrado por:

Calebe de Paula Bianchini

Calebe de Paula Bianchini

Calebe Bianchini é doutor pela Escola Politécnica da USP, com mestrado e graduação em Ciência da Computação pela UFSCar. Realizou seu Pós-doutorado no Núcleo de Computação Científica, na UNESP, explorando paralelismo de diversos níveis (e.g. SIMD, threads, tasks) em simuladores para a física de altas energias, com parceria com o Fermilab e o CERN. Possui experiência em processamento paralelo e distribuído de alto desempenho e em engenharia de software. É professor adjunto na Universidade Presbiteriana Mackenzie, em São Paulo, e participa ativamente da comunidade de Arquitetura de Computadores e Processamento de Alto Desempenho no Brasil, sendo um dos organizadores das competições da área: Desafio de Programação Paralela, do ERAD-SP, e da Maratona de Programação Paralela, do SBAC/WSCAD.

Fabrício Gomes Vilasbôas

Fabrício Gomes Vilasbôas

Fabrício Vilasbôas possui graduação em Tecnologia da Informação e Comunicação pelo Instituto Superior de Tecnologia em Ciência da Computação de Petrópolis (2012). Tem experiência na área de Ciência da Computação, com ênfase em Sistemas de Computação, atuando principalmente nos seguintes temas: GPGPU, programação, processamento paralelo, computação de alto desempenho e CUDA.

Leandro Nunes de Castro

Leandro Nunes de Castro

Leandro Nunes de Castro é Engenheiro Eletricista pela Universidade Federal de Goiás (1996), Mestre em Engenharia Elétrica pela Unicamp (1998), Doutor em Engenharia de Computação (2001) pela Unicamp, possui MBA em Gestão Empresarial Estratégica pela Universidade Católica de Santos (2008) e fez Empretec pelo Sebrae-SP (2012). Foi Pesquisador ou Professor Visitante nas seguintes instituições: Universidade de Kent em Canterbury (junho de 2001 a maio de 2002); Universidade Tecnológica da Malásia (setembro de 2005); FT-Unicamp (março a junho de 2012); e Universidade de Salamanca (janeiro a julho de 2014). Foi professor e pesquisador junto ao Programa de Mestrado em Informática da Unisantos de 2003 a 2007. Possui bolsa produtividade em pesquisa do CNPq, nível 2, pelo comitê de Ciência da Computação. Suas principais linhas de pesquisa são Computação Natural e Aprendizagem de Máquina. Possui mais de 220 artigos publicados em revistas e conferências nacionais e internacionais. Fundou e coordena o Laboratório de Computação Natural e Aprendizagem de Máquina (LCoN) do Programa de Pós-Graduação em Engenharia Elétrica do Mackenzie. Nos últimos 11 anos fundou e participou da estruturação de três start-ups de tecnologia, incluindo NATCOMP Informática e Equipamentos Eletrônicos LTDA, NATLUX Informática e Consultoria LTDA, e AXONDATA Tecnologia Analítica LTDA. Atualmente é Coordenador de Desenvolvimento e Inovação da Universidade Presbiteriana Mackenzie.

Organização

Realização

Instituições colaboradoras

Apoio e Patrocínio

Diamante
Ouro
Prata
Bronze
TOP