· pdf file neste livro esta˜o compilados os seis minicursos apresentados durante o...

Click here to load reader

Post on 05-Jun-2020

1 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • XVIII Simpósio em Sistemas Computacionais de Alto Desempenho De 17 a 20 de Outubro de 2017

    Campinas – SP

    Minicursos do WSCAD 2017

    Sociedade Brasileira de Computação – SBC

    Organizador Alexandro Baldassin

    Realização Sociedade Brasileira de Computação – SBC Universidade de Campinas – UNICAMP Universidade Estadual Paulista – UNESP

    ISBN: 978-85-7669-418-2

  • Neste livro estão compilados os seis minicursos apresentados durante o XVIII Simpósio em Sistemas Computacionais de Alto Desempenho, realizado entre os dias 17 e 20 de outubro de 2017 em Campinas, São Paulo. Os minicursos apresentados abrangem desde aspectos mais introdutórios de programação paralela com memória compartilhada até técnicas avançadas para tolerância de falhas em sistemas distribúıdos.

    O minicurso Sistemas de Computação Paralelos com a Linguagem Python apresenta os fundamentos para desenvolvimento de código paralelo usando a linguagem e módulos Python. Além de cobrir máquinas multi/many-cores, o autor Luciano Silva também aborda o desenvolvimento para plataformas baseadas em clusters e FPGAs.

    Em Intel Modern Code: Programação Paralela e Vetorial AVX para o Processador Intel Xeon Phi Knights Landing, Eduardo Cruz e colegas apresentam os paradigmas de programação paralela e vetorial utilizando o processador Intel Xeon Phi Knights Landing como plataforma.

    Rogério Gonçalves e colegas apresentam OpenMP do ponto de vista de código gerado em Introdução à Programação Paralela com OpenMP: Além das Diretivas de Compilação. Nesse minicurso é mostrado como as diretivas OpenMP são expandidas durante a com- pilação do código e suas respectivas relações com conceitos empregados em computação paralela.

    O suporte para programação paralela em Erlang é discutido no minicurso Programação Concorrente em Erlang. Alexandre Oliveira e colegas apresentam nesse minicurso as principais caracteŕısticas de Erlang, assim como o processo de compilação e execução de códigos sequenciais e paralelos.

    Já em Técnicas para a Construção de Sistemas MPI Tolerantes a Falhas, Edson Ca- margo e Elias Duarte Jr. apresentam métodos para tolerância de falhas em programas distribúıdos baseados em MPI. Além de técnicas tradicionais como a rollback-recovery, os autores também discutem a mais recente proposta para tolerância a falhas em MPI, a ULFM (User Level Failure Mitigation).

    Finalmente, o minicurso Introdução à Otimização de Desempenho para Arquitetura Intel Xeon Phi Knights Landing (KNL) discute formas para otimização de desempenho na plataforma KNL. Silvio Stanzani e colegas apresentam a arquitetura KNL e mostram como melhorar o desempenho dessa arquitetura através de seu sistema de memória heterogêneo, vetorização (AVX-512) e prefetching.

  • Sumário

    1. Sistemas de Computação Paralelos com a Linguagem Python Luciano Silva (Universidade Mackenzie)

    2. Intel Modern Code: Programação Paralela e Vetorial AVX para o Processador Intel Xeon Phi Knights Landing Eduardo H. M. Cruz, Arthur M. Krause, Emmanuell D. Carreno, Matheus S. Serpa,

    Philippe O. A. Navaux (UFRGS), Marco A. Z. Alves (UFPR), Igor J. F. Freitas

    (Intel Brasil)

    3. Introdução à Programação Paralela com OpenMP: Além das Diretivas de Compilação Rogério A. Gonçalves, João M. de Queiroz Filho (UTFPR), Alfredo Goldman (IME,

    USP)

    4. Programação Concorrente em Erlang Alexandre P. de Oliveira (Faculdade de Tecnologia de Lins), Paulo S. L. de Souza,

    Simone do R. S. de Souza (ICMC, USP)

    5. Técnicas para a Construção de Sistemas MPI Tolerantes a Falhas Edson T. de Camargo (UTFPR), Elias P. Duarte Jr. (UFPR)

    6. Introdução à Otimização de Desempenho para Arquitetura Intel Xeon Phi Knights Landing (KNL) Silvio Stanzani, Jefferson Fialho, Raphael Cóbe, Rogério Iope (NCC, UNESP), Igor

    J. F. Freitas (Intel Brasil)

  • Capítulo

    1

    Sistemas de Computação Paralelos com a

    Linguagem Python

    Luciano Silva Faculdade de Computação e Informática, Universidade Mackenzie

    [email protected]

    Resumo

    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 multicore e manycore, clusters e FPGAs. Dentro deste contexto, o objetivo deste capítulo é apresentar os fundamentos de desenvolvimento de programas paralelos utilizando a linguagem e módulos Python como suporte. Serão abordadas quatro plataformas paralelas: processadores multicore, processadores manycore (coprocessadores e GPUs), clusters e FPGAs. Além dos fundamentos de arquitetura destas plataformas, serão construídos e discutidos programas em Python para cada uma delas.

    Palavras-chave: Python Multicore, Python Manycore, Python em Cluster, Python

    FPGA, Sistemas Paralelos.

    1.1 Introdução

    Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte (PALACH, 2014). Foi lançada por Guido van Rossum em 1991. Atualmente, possui um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem como um todo não é formalmente especificada.

  • A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional, prioriza a legibilidade do código sobre a velocidade ou expressividade, além de combinar uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros.

    Python é uma linguagem de propósito geral de alto nível, multi-paradigma, suporta o paradigma orientado a objetos, imperativo, funcional e procedimental. Possui tipagem dinâmica e uma de suas principais características é permitir a fácil leitura do código e exigir poucas linhas de código se comparado ao mesmo programa em outras linguagens. Devido às suas características, ela é principalmente utilizada para análise de dados em geral, tendo como origem primordial os algoritmos de Bioinformática.

    Recentemente, houve um interesse bastante acentuado pelo uso de Python no

    desenvolvimento de programas paralelos para os mais diversos ambientes de alto

    desempenho, como processadores multicore, processadores manycore, clusters e

    FPGA. Dentro deste contexto, o objetivo deste pequeno texto é introduzir as técnicas fundamentais de programação em Python para estes ambientes, evidenciando a simplicidade das construções.

    Este texto está organizado a seguinte forma:

    • a Seção 1.2 apresenta os fundamentos da organização de programas em Python

    • a Seção 1.3 apresenta a organização dos ambientes paralelos que serão tratados no texto

    • a Seção 1.4 mostra os fundamentos de programação em Python para processadores multicore

    • a Seção 1.5 mostra os fundamentos de programação em Python para processadores manycore

    • a Seção 1.6 mostra os fundamentos de programação em Python para clusters

    • finalmente, a Seção 1.7 mostra os fundamentos de programação em Python para FPGA.

    No final do texto, encontram-se algumas referências adicionais para o leitor interessado em aprofundar as técnicas de programação para os ambientes tratados no texto.

  • 1.2 Linguagem de Programação Python

    Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte (PALACH, 2014).

    O comando condicional é mostrado nas construções abaixo, juntamente com os respectivos operadores lógicos:

    Figura 1: Comando condicional em Python.

    O comando de repetição é mostrado nas construções abaixo, juntamente com os respectivos operadores lógicos:

    Figura 2: Comando de repetição em Python.

  • Uma variação do comando de repetição é o comando for, que itera sobre uma lista de elementos:

    Figura 3: Comando de repetição for em Python.

    Funções são construções bastante comuns em Python e podem ser declaradas da seguinte forma:

    Figura 4: Declaração de funções em Python.

    Funções em Python também suportam construções no estilo de programação funcional, onde se pode usar funções anônimas com abstrações lambda.

  • Vetores em Python são construídos através de listas lineares indexadas. Os elementos nos vetores podem ser heterogêneos, conforme mostrado no exemplo abaixo:

    Figura 5: Declaração de vetores em Python.

    Em Python também existe uma construção bastante útil, chamada conjunto (set), que permite construir subconjuntos de elementos de um vetor:

    Figura 6: Declaração de conjuntos (sets) em Python.

    Dicionários, por sua vez, permitem que elementos sejam indexados por uma chave, conforme mostrado no exemplo abaixo:

    Figura 7: Declaração de dicionários em Python.

  • A linguagem P