INE 5645 - Programação Paralela e Distribuída


Tarefas Teóricas e de Programação

Material Didático
Plano de Ensino     Introdução

Unidade 1 - Concorrência e Paralismo em Java
         (a)  Semáforos, Locks (Sistemas Operacionais)
            (b)  Sincronização de Threads com Monitor


Processos e Threads     Tarefa 1-2
Programação com Threads
Material da Unidade I


Laboratório 1.1 - Threads e Monitor  LEITORES x ESCRITORES

Entrega entre 01 e 06/08

Buffer (interface),   Buffer (implementação),  Leitor,    Escritor,    Main (package principal)

Exemplo 1 - Leitores x Escritores (Java)  (Não mostra a terminação das threads)

Exemplo 2 - Leitores x Escritores (Java)  (Cuida da terminação das threads, implementa 1 escritor no pool e escreve e 4 leitores)

                                                                Como interromper uma thread

                  Exemplos para Escalonamento de Threads em Diferentes Formas em Java

                                    Java 8 Concurrency Tutorial: Threads and Executors
  

 

Laboratório 1.2 -  Programação Paralela e Distribuída com Sockets  (Cliente-Servidor)  (Entrega entre 08-19/08)     

Programação com SocketsExecutar aplicações distribuídas em rede usando sockets nos protocolos de comunicação UDP (User Datagram Protocol), TCP (Transmission Control Protocol) e a comunicação em grupo dada por IP Multicast. Estas aplicações são paralelas e distribuidas em rede. Utilizar os exemplos de códigos abaixo:

User Datagram Protocol (UDP) é um protocolo simples da camada de transporte (camada 4 da pilha de protocolos da Internet). Ele é descrito na RFC 768 e permite que a aplicação envie um datagrama encapsulado num pacote IPv4 ou IPv6 a um destino, porém sem qualquer tipo de garantia que o pacote chegue corretamente. Aplicações que não requerem um serviço de confiabilidade de entrega de pacotes podem se utilizar de protocolos mais simples como o User Datagram Protocol (UDP), que provê um serviço que enfatiza a redução de latência da conexão.

O TCP é um outro protocolo de nível da camada de transporte (camada 4), e é sobre o qual que se assentam a maioria das aplicações  como o SSH, FTP, HTTP -  portanto, a World Wide Web. O Protocolo de controle de transmissão provê confiabilidade, entrega na sequência correta e verificação de erros dos pacotes de dados, entre os diferentes nós da rede, para a camada de aplicação.

IP Multicast é a transmissão de um datagrama IP para um "grupo de máquinas dos usuários, membros de um grupo", representado por um conjunto de máquinas no grupo, identificadas por um único endereço IP de destino, chamado de IP multicast.

                                      LIVROS REFERÊNCIA 

Livro sobre Redes de Computadores - Computer-Networks - A.Tanenbaum - 5th-edition

Livro de Sistemas Distribuidos: Conceitos e Projetos -
George Coulouris at eli.

                      Cap.4 (Coulouris) Communicação Inter-Processos

                      Comunicação por Sockets A       Comunicação por Sockets B

Laboratório 1.2a  -  Comunicação de Datagramas UDP  
 

                                Exemplo 1:  UDPClient1 x UDPServer1 
                                Exemplo 2:  UDPClient2 x UDPServer2   
                                Exemplo 3:  UDPClient3 x UDPServer3 

Laboratório 1.2b  -  Comunicação com TCP Streams      
                                Exemplo 2:  TCPClient2 x TCPServer2    

Laboratório 1.2c  -  Comunicação de grupo com IP Multicast 

           MULTICAST - UNDERSTAND HOW IP MULTICAST WORKS

              How to Multicast Using Java Sockets

             API Abstration Multicast  (contém alguns slides sobre Multicast)

               SOCKETS UDP, TCP E MULTICAST

               Slides sobre Sockets UDP e TCP

Outros Exemplos de Código para implementação com sockets UDP 
   Datagram Socket Client
   Datagram Socket Server

Outros Exemplos e Código para implementação com sockets TCP   
   TCP Stream Socket Client
   TCP Stream Socket Server

Exemplo de código para implementação de comunicação de grupo com multicast IP.
   Group Communication Socket com IP Multicast  

      

===================================================================================

Material para o Laboratório 1.3 - Parallel Streams
                                    
                   
Visão Geral de Coleções em Java
        
                  Interface Collection  ( Interfaces:  Set, Queue, List )

===============================================================

Streams - Fork/Join Framework in Java
          Parallel Streams em Java

Streams (fluxos de dados)

Para a Streams API, uma Stream pode ser definida, de forma sucinta, como uma sequência de elementos de uma fonte de dados que suporta operações de agregação. 

Processamento de dados com Streams do Java SE 8 - Parte 1

The Java 8 Stream API Tutorial

Introduction to Java 8 Streams

Java Fork and Join using ForkJoinPool (Jenkov)


Parallel Programming Basics with the Fork/Join Framework in Java


JAVA FORK JOIN EXAMPLE

       Understanding Java Fork-Join Framework with Examples

Guide to the Fork/Join Framework in Java


Parallel Processing in Java


The Fork/Join Java Framework Tutorial (Oracle) - Ver implementação sobre o que significa threshold.

 

Divide and Conquer Parallelism with the Fork/Join Framework - Oracle

 
Laboratório 1.3 - Parallel Streams  (Entrega entre 20-29/08) - vale 30%

  Introduction to the Fork/Join Framework

     Entendendo Fork-Join-Framework-Java

1. Estudar o conteúdo do link abaixo e executar o exemplo em paralelismo dado no códigocom RecursiveTask..
     Você pode conseguir o código neste Arquivo TXT com códigos (RecursiveTask e Teste de Desempenho)
     Exemplo - Implementando Framework Fork-Join-Java (contém a explicação das classes do Framework, os    
     códigos explicados, a explicação do teste e conclusões. Faça comentários sobre seu entendimento.

     Questões:  (a) Qual é o modelo de programação que usa para o Paralelismo em Java ?
                          (b) Para que serve ForkJoinPool ? 
                          (c)
Por que você usa RecursiveTask ?
                          (d) Qual a função do número threshod ?
                          (e) Em seu programa, você tem paralelimo de dados ou de tarefa ?

2. Fazer um teste de desempenho, considerando o número de elementos de uma Lista, conforme exemplificado   
    no exemplo no link acima. Você pode reduzir o tamanho do teste se assim desejar. Comente suas conclusões.

                           (f) Analise seus resultados e informe qual foi a  principal conclusão do seu teste ? Explique
                                  brevemente.

Outros links interessantes são:

Understanding Java Fork-Join Framework with Examples
Java JDK 1.7 Fork/join para um processamento melhor
Parallel stream processing in Java 8 - performance of sequential vs. parallel stream processing

=======================================================================================================================

Material sobre Java 8

Classes Internas em Java
Funções Lambda (Java 8)
Trabalhando com Closures  (Java 8
)


==================================================================================================

Unidade 2  -   Programação Paralela com OpenMP   

Verificando Instalação

       Apresentação 1 (AULA)          Apostila Introdução ao OpenMP (AULA) 

OpenMP Diretivas (Primeiras Diretivas)

Exemplo1 - Cláusula Schedule       
Exemplo2
 - Cláusula Dynamic Schedule      
Exemplo3
- Cláusula Reduction

            Exemplos - Outras Diretivas (atomic, critical, single, master, section) e Cláusula (nowait)

Apostila de Treinamento OpenMP

Conceitos em OpenMP    
Conceitos de Processamento Paralelo      Introduction to OpenMP       

OpenMP Tutorial      
Paralelização com OpenMP

Laboratório 2: Tarefas Práticas OpenMP:  Entrega em 18/04/2018

Realizar testes com exemplos contendo diretivas, cláusulas e funçoes OpenMP (as mais importantes). O ambiente mais fácil de excutar OpenMP é Ubuntu 16.04. O ambiente Visual Studio da Microsoftware, também pode ser usado.

Usar as seguintes diretivas: parallel, for, sections, barrier, atomic, critical, master
Usar as seguintes cláusulas private, shared, sheduled, reduction, nowait, num_threads
Usar as seguintes
funções:omp_set_num_threads     omp_get_thread_num
omp_get_num_threads
omp_get_wtime
Postar no Moodle um só arquivo  <.....>*.txt, contendo seus 10 exemplos testados. Questões da Prova 1 serão feitas sobre as tarefas práticas.

Para_Prova_OpenMP     Prova 1   (26/09/2018)       Sala CTC-207

AULA OMP PRATICA 1   (03/09/2018)

AULA OMP PRATICA 2   (05/09/2018)



Links Didáticos:

    
(1) Programação em Memória Partilhada com o OpenMP  (Por Ricardo Rocha, DCC, Universidade do Porto)

     
      (2)
A partir deste link  Microsoft OpenMP Directives pode-se obter:  
                                          Microsoft Clauses
                                          Microsoft Library Reference contendo
                                                  (Bibliotecas,   Tipos de Dados,   Variáveis de ambientes,   Funções)

           Obs: Caso estes links (2) estejam lentos via a página, procurem entrar na busca do Google, diretamente.
                                                   

       (3) Exemplo OpenMP Scheduling
      (4) OpenMP-intro-v5
      (5) OpenMP by Examples
                                      
   Exemplos que podem ser testados:

    1. Ordenação por intercalação (merge sort) com OpenMP - Você pode observar um exemplo prático no qual o  
    conhecimento sobre OpenMP ajuda a economizar tempo de execução. Essa não é uma versão muito otimizada do
    algoritmo 
merge sort, mas é o suficiente para mostrar as vantagens de usar OpenMP no código.  A Listagem
     mostra o código deste exemplo.
    
    2. Multiplicação de matrizes -  Multiplicar duas matrizes A(NRA, NCA) e B(NCA, NCB). Lembre que para
    multiplicar duas matrizes, o número de colunas de A deve ser igual ao número de linhas de B, e a matriz resultante de
    ter a dimensão (NRA, NCB), onde NRA é o número de linhas de A e NCB é o número de colunas de B.
    Consequentemente, NCA é o número de colunas de A. Você pode estudar este código OpenMP no final do arquivo   
    em OpenMP Tutorial .

   

   (a) Trabalho realizado em SO)  Números Mutuamente Amigos

  (b) Você pode sugerir para outra tarefa de OpenMP, aproveitar sua implementação que você fez em PThreads. Tarefas opcionais, acrescentadas ao que é obrigatório, ao final do período, valem mais 0,5 na média final no CAGR.
  
           Arquivo Parte A da Prova 1 
           Arquivo Parte B da Prova 1     Transações - O Problema da Atualização Perdida

 

PROVA 1 DE RECUPERAÇÃO   (Entregar de forma impressa e manuscrita em 01/09/2018)
  

=================================================================================================

Unidade 3 - Programação Paralela com OpenCL (CPU+GPU)

Apresentação OpenCL   (apresentado em aula)

Introdução em OpenCl - Uma introdução prática    (Sua Primeira Experiência               

Calling the Kernel

List-4-8-List-4.9    -    List-4-10-List-4-11

PARALELISMO DE DADOS,     PARALELISMO DE TAREFA

Prova 1 - 30/04/2018  (Assunto:  Concorrência em Java,  OpenMP,  Conceitos em OpenCL)

Prova 1 resolvida 

TÉCNICA DE PROGRAMAÇÃO PARALELA EM PIPELINING

Introdução ao OpenCL - Douglas Adriano Augusto - LNCC - 2012

CUDA x OpenCL (Modelos de Plataforma, Memória e Programação similares)

Multiplicação de Matrizes em CUDA

Book OpenCL em HTML

Book Heterogeneus Computing wtith OpenCL  (Gaster at ali)

Livro em português sobre CUDA  PROGRAMANDO PARA PROCESSADORES PARALELOS   Por WEN-MEI W. HWU,DAVID B. KIRK  2011

OpenCL - AMD Processor
OpenCL - The open standard for parallel programming of heterogeneous
OpenCL - Exemplos Interessantes
OpenCL - Software Intel OpenCL


OpenCL precisa de placas GPUs:   Nvidia GeForce
                                                        AMD Radeon
                                                        Intel GPUs

Arquiteturas Paralelas Hibridas

TAREFAS PARA AVALIAÇÃO DA UNIDADE 3

Lab 3.1 - Tarefa Teórica Lab 3 - Parte 1 (Conceitos)
(Obrigatória para os que tratarem a Unidade 3, do ponto de vista teórico.)

Get Started with Intel® SDK for OpenCL™ Applications for Linux*

 
Para a parte prática (opcional) você deve escolher umas das atividades abaixo:


Lab 3.2 - Tarefa Prática -  Estudar e explicar as partes de exemplos de programas OpenCL. Exemplo para a tarefa individual Lab 3 . Caso você tenha condiçoes de máquina adequada e conveniente executar o programa OpenCL. Voce pode utilizar OpenCL no Ubuntu. Utilizar o programa em Introdução em OpenCl - Uma introdução prática  (Sua Primeira Experiência OpenCL). Um programa com o modelo de paralelismo de dados.

 

How to Install CUDA on Ubuntu 18.04

 

Lab 3.3 - Tarefa Prática -   Estudar e explicar as partes de exemplos de programas CUDA. Caso você tenha condiçoes de máquina adequada (placa de vídeo Nvidia) é conveniente executar o programa CUDA. Voce pode utilizar Ubuntu. Usar um dos exemplos explicados em Introdução a CUDA - Programando threads em paralelo . Um programa com o modelo de paralelismo de dados.
                                                


Programação Paralela com CUDA 
(computação heterogênea CPU + GPU)

Introdução a CUDA - Programando threads em paralelo
Caracterizando Elementos de Programaçao CUDA
Computação Paralela usando CUDA-COPPE
MINI-CURSO: Introdução à Programação em CUDA Prof. Raphael Y. de Camargo Centro de Matemática, Computação e Cognição Universidade Federal do ABC (UFABC)
Nvidia CUDA - Programming Guide
Instalação de Driver
Treinamento em CUDA
PROGRAMANDO_COM_GPUs_PARALELIZANDO_LATTICE_COM_CUDA

 

=================================================================================================

PALESTRA
   " Paralelismo: Você Está Fazendo Isso Errado "  -   Iury Krieger (Fullstack Developer)  -   Chaordic Systems

16/05/2018 - 20:20 - Sala CTC 209  (Promovida por INE5645-Programação Paralela e Distribuída)


================================================================================================= 

Prova 1  - 

===============================================================

Unidade 5 - Programação Distribuida com Hadoop

Hadoop - Conceitos e Exemplo Didático
(Texto Completo)

Questionário Hadoop - Fazer antes de iniciar a tarefa prática ! (pdf)
Questionário Hadoop - Fazer antes de iniciar a tarefa prática ! (docx)


Exemplo Didático Hadoop - Tarefa Prática
(Com links para instalação e outros conceitos e figuras)

 

==============================================================

PROVA 2 -   Comunicação por Sockets    Prova 2 Resolvida      Prova em branco para correção de seus erros

PROVA 2 - 03/12    Prova em branco para correção de seus erros      Prova 2 Resolvida (segunda chamada)

PROVA 2 - 13/11/2017-Resolvida                                          

Slides da Palestra

Tarefa 5 (Palestra) : 

Baixe o projeto, do link dado nos slides e altere o código para que o algoritmo conte as ocorrências de 3 palavras especificadas de sua escolha. Use um texto de 300 palavras. Ver no último link dos slides:   https://goo.gl/TNnQMv

Hadoop Wikipedia
                                                                                 

================================================================================================= 

Unidade 5 - Programação Paralela e Distribuída com MPI (Message Passing Interface)   (para Ambientes Paralelos e Distribuídos Clusterizados)

Memória Compartilhada Distribuida = DSM (Coulouris, Cap. 18, pg 643-671)   

Cliente-Servidor com threads
Agrupamento Clusters
Introducao DSM
DSM 1
DSM 2
Estratégias de Implementação DSM
Programação MPI Básico
Introdução à Programação Paralela com OpenMPI

Escrevendo Programas MPI em C     Exemplo MPI (Message Passing Interface)     Exemplos Resolvidos MPI

                                                        Tutorial MPI        Cluster MPI       Testando MPI

 


-------------------------------------------------------------------------------------------