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 Sockets - Executar
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
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 JOIN EXAMPLE
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%
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.)
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.
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
------------------------------------------------------------------------------------------- |