Tutoriais e Minicursos

Tutorial I: Construindo aceleradores com FPGAs para computação de alto desempenho

Ricardo Menotti (DC-UFSCar)

Auditório Escola Americana - 03/08 (Quarta-Feira) - 11:00 - 12:30

Resumo: A computação reconfigurável tem se tornado cada vez mais importante em sistemas computacionais embarcados e de alto desempenho. A chamada computação heterogênea consiste em usar aceleradores de diferentes arquiteturas para melhorar o desempenho e reduzir o consumo de energia dos computadores. Os FPGAs, usados recentemente como aceleradores, permitem níveis de desempenho próximos aos obtidos com circuitos integrados de aplicação específica (ASIC), enquanto ainda mantém flexibilidade de projeto e implementação. No entanto, para programar eficientemente estes dispositivos, é necessária experiência em desenvolvimento e domínio de linguagens de descrição de hardware (HDL), tais como VHDL e Verilog. Neste tutorial serão abordados os principais aspectos da computação reconfigurável, abordagens para reduzir a complexidade de projeto, bem como seu uso recente na computação de alto desempenho.

Tutorial II: O primeiro passo para se programar dez milhões de cores

Denise Stringhini, Alvaro Fazenda (SJC-UNIFESP)

Auditório Escola Americana - 03/08 (Quarta-Feira) - 14:00 - 15:30

Resumo: Recentemente, o ranking das máquinas mais poderosas do mundo, publicada no site Top500.org, apontou a máquina chinesa Sunway Taihu como número um entre as 500 mais rápidas, a qual tem em sua arquitetura mais de dez milhões de cores. Este tutorial apresenta princípios básicos de programação nestas supermáquinas através da introdução da biblioteca de programação paralela MPI (Message Passing Interface). Serão apresentados conceitos de arquiteturas paralelas, assim como as principais rotinas de comunicação da biblioteca MPI em linguagem C, tipos de aplicações e aspectos relacionados ao desempenho de tais programas.

Minicursos

Minicurso I : Um Estudo sobre a Expansão das Diretivas de Compilação para Interceptação de Código OpenMP

Rogério Gonçalves (UTFPR) e Alfredo Goldman (IME-USP)

Auditório João Calvino - 03/08 (Quarta-Feira) - 11:00 - 12:30 (Primeira Parte) e 14:00-15:30 (Segunda Parte)

Resumo: 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 e tasks, bem como a estrutura do código gerado pela expansão dessas diretivas. Esses conceitos podem ser aplicados no desenvolvimento de bibliotecas para interceptar chamadas que as aplicações fazem ao runtime do OpenMP, o que possibilita a execução de código pré ou pós chamada para a criação de traces, para atividades de logging, para o monitoramento e avaliação de desempenho ou para offloading de código para dispositivos aceleradores.

Minicurso II : Introdução à Programação de GPUs com a plataforma CUDA

Pedro Bruel (IME-USP) e Alfredo Goldman (IME-USP)

Auditório João Calvino - 04/08 (Quinta-Feira) - 08:30 - 10:00 (Primeira Parte) e 14:00-15:30 (Segunda Parte)

Resumo: O objetivo deste minicurso é disseminar o conhecimento e o uso de GPUs na pesquisa em Ciência da Computação. Apresentaremos a plataforma CUDA como ferramenta para facilitar a programação e a otimização de projetos para GPUs. Introduziremos algumas características do hardware de GPUs, o modelo de programação da linguagem CUDA C, e ferramentas para profiling e debugging de aplicações CUDA. O objetivo é que os participantes saiam do minicurso com o interesse e a capacidade de se aprofundar nas ferramentas da plataforma CUDA e de utilizar GPUs em seus projetos pesquisa.

Minicurso III : Task Parallelism Runtimes and Architectures

Guido Araujo (IC-UNICAMP)

Auditório MackMobile - 04/08 (Quinta-Feira) - 08:30 - 10:00 (Primeira Parte) e 14:00-15:30 (Segunda Parte)

Resumo: In recent years, Task-based Programming/Execution model has proven itself a scalable and quite flexible approach to extract regular and irregular parallelism from applications. In this model the programmer uses a task annotation directive to add annotations to code regions in the program which will later be used by a runtime system to manage the parallel execution of such regions. Programming models for task parallelism like OpenSs and OpenMP 4.X have been proposed which easy the task of programming tasks. These models have been supported by runtimes like Intel IOMP, GCC GOMP, and MTSP. In this course we will describe how to use task parallelism to speed-up program execution, and detail the design of runtimes. We will also discuss some optimization techniques like dependency resolution acceleration, to reduce runtime overhead, and task stealing to improve workload balancing. The course will have a short practical session in which the public will be able to play with task programming and runtime design (bring your laptop).

Minicurso IV : Introdução à Vetorização em Arquiteturas Paralelas Híbridas

Silvio Stanzani, Raphael Cube, Rogério Iope (NCC-UNESP)

Auditório Escola Americana - 05/08 (Sexta-Feira) - 08:30 - 10:00 (Primeira Parte) e 14:00-15:30 (Segunda Parte)

Resumo: Utilização de técnicas de vetorização de código são essenciais para se obter alto desempenho nas arquiteturas computacionais atuais, que vem oferecendo cada vez mais unidades de processamento vetoriais e com maior capacidade. Nesse sentido, é proposto um minicurso básico de três horas com o objetivo de ensinar os conceitos relacionados com vetorizaçäo e técnicas de acesso eficiente a memória, bem como, ferramentas para explorar tais técnicas, usando os recursos oferecidos pelas arquiteturas Multicore e Manycore (Intel Xeon e Intel Xeon Phi).

Minicurso V : Introdução ao Spark para Data Science

Thiago Baldim (Reddrummer Tecnologia)

Auditório João Calvino - 05/08 (Sexta-Feira) - 08:30 - 10:00 (Primeira Parte) e 14:00-15:30 (Segunda Parte)

Resumo: Apache Spark é uma engine para processamento de dados em larga escala. Utilizando infraestruturas baseadas em Hadoop para dados distribuidos, garantindo uma velocidade de processamento até cem vezes mais rápido que o processamento por hadoop. Permitindo execução de map reduces em memória RAM, tendo ganho de processamento dez vezes mais rápido que em disco.