Programa dos Minicursos

Intel Modern Code: Programação Paralela e Vetorial AVX para o Processador Intel Xeon Phi Knights Landing

Eduardo H. M. Cruz (UFRGS), Emmanuell D. Carreño (UFRGS), Matheus S. Serpa (UFRGS), Philippe O. A. Navaux (UFRGS) e Igor J. F. Freitas (Intel Brasil)

Tradicionalmente, 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, este modelo não se sustenta mais. Para se ganhar desempenho nas arquiteturas modernas, são necessários conhecimentos sobre programação paralela e programação vetorial. Ambos paradigmas são tratados de forma lateral em cursos de computação, sendo que muitas vezes nem são abordados. Neste contexto, este minicurso 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 modernas. Como plataforma de desenvolvimento, será utilizado o processador Intel Xeon Phi Knights Landing.


Técnicas para a Construção de Sistemas MPI Tolerantes a Falhas

Edson Tavares de Camargo (UTFPR) e Elias P. Duarte Jr. (UFPR)

O minicurso proposto tem como objetivo apresentar algumas das principais abordagens de tolerância a falhas desenvolvidas para sistemas MPI. Após a Introdução na Seção 1, na Seção 2 serão apresentados os modelos e conceitos principais de tolerância a falhas. A Seção 3 é o núcleo do trabalho, e descreverá diversas das principais técnicas de tolerância a falhas aplicadas em sistema MPI, por exemplo a técnica rollback-recovery [Elnozahy et al. 2002, Egwutuoha et al. 2013] e ABFT ((Algorithm-Based Fault Tolerance)) [Du et al. 2012]. Destaca-se que também será apresentada a especificação ULFM (User Level Failure Mitigation) [Bland et al. 2013], que é a mais recente proposta do MPI-Fórum para padronizar a semântica de tolerância a falhas em MPI. A proposta ULFM visa permitir a implementação de aplicações tolerantes a falhas por meio de construtores definidos para recuperar a capacidade do MPI de transportar suas mensagens após uma falha e já tem sido usada na prática.


Introdução​ ​à​ ​Otimização​ ​de​ ​Desempenho​ ​para​ ​Arquitetura Intel​ ​Xeon​ ​Phi​ ​Knights​ ​Landing​ ​(KNL)

Silvio​ ​Stanzani (UNESP), Jefferson​ ​Fialho (UNESP), Raphael​ ​Cóbe (UNESP), Rogério​ ​Iope​ (UNESP) e Igor​ ​Freitas (Intel Brasil)

Atualmente as 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. Um exemplo dessa tendência é a arquitetura Intel Xeon Phi Knights Landing (KNL) (segunda geração da família ​manycore​), que oferece unidades de processamento vetorial de 512 bits e um sistema de memória heterogêneo composto por uma unidade de memória RAM, memória cache em múltiplos níveis e uma memória de alta largura de banda. A utilização adequada​ ​de​ ​tais​ ​recursos​ ​visando​ ​obter​ ​ganhos​ ​de​ ​desempenho​ ​é​ ​um​ ​desafio. O objetivo deste minicurso é capacitar os participantes a compreender conceitos básicos relacionados à arquitetura KNL e utilizar as novas possibilidades oferecidas pela arquitetura​ ​KNL,​ ​com​ ​ênfase​ ​na​ ​vetorização​ ​e​ ​no​ ​uso​ ​do​ ​sistema​ ​heterogêneo​ ​de​ ​memória.


Programação Concorrente em Erlang

Alexandre Ponce de Oliveira (Faculdade de Tecnologia de Lins), Paulo Sérgio Lopes de Souza (USP) e Simone do Rocio Senger de Souza (USP)

Erlang é uma linguagem de programação funcional que foi projetada para programação concorrente, em tempo real e sistemas distribuídos tolerantes a falhas. Ela teve o início de seu desenvolvimento em 1986 no Ericsson Computer Science Laboratory e a partir de 1998 teve seu código aberto, sendo atualmente portada para muitas plataformas. O objetivo principal da linguagem Erlang foi melhorar a programação das aplicações telefônicas que são atualizadas em tempo de execução, e consequentemente, não permitam a perda do serviço durante a atualização do código (Armstrong, 2007). Este minicurso tem como principal objetivo apresentar o paradigma de programação funcional por meio da linguagem Erlang, fornecer noções conceituais sobre a linguagem considerando aspectos sequenciais e concorrentes. O minicurso apresenta exemplos de aplicações sequenciais e concorrentes da linguagem. Ao final do minicurso, os alunos deverão ser capazes de entender o paradigma de programação funcional e desenvolver aplicações Erlang sequenciais e concorrentes em nível básico.


Sistemas de Computação Paralelos com a Linguagem Python

Luciano Silva (Mackenzie)

Python é uma linguagem de programação de alto nível, com algumas características bastante interessantes para programas paralelos: legibilidade de código, curva de aprendizagem muito curta e alcance em várias plataformas como processadores multi e manycore, clusters e FPGAs. Dentro deste contexto, o objetivo deste minicurso é apresentar os fundamentos de desenvolvimento de programas paralelos utilizando a linguagem e módulos Python como suporte. Serão abordadas quatro plataformas paralelas no minicurso: processadores multicore, processadores manycore (coprocessadores e GPUs), clusters e FPGAs. Além dos fundamentos de arquitetura destas plataformas, o minicurso irá mostrar e discutir estruturas e algoritmos paralelos clássicos para cada uma delas.


Introdução à Programação Paralela com OpenMP: Além das Diretivas de Compilação

Rogério Aparecido Gonçalves (UTFPR), João Martins de Queiroz Filho (UTFPR) e Alfredo Goldman (USP)

O objetivo é apresentar uma introdução ao OpenMP mostrando as principais diretivas de compilação para a cobertura de regiões paralelas, laços, seções, tasks e dispositivos aceleradores (target), bem como a estrutura do código gerado pela expansão dessas diretivas. Queremos apresentar o OpenMP dando uma visão diferente dos tutoriais convencionais, apresentando o código gerado pelas diretivas e suas relações com conceitos de programação paralela.