Introdução à Computação
Paralela e Ambientes de
Grade
Inês de Castro Dutra
Departamento de Ciência de Computadores
Universidade do Porto
[email protected]
1
Grades Computacionais
 Idéia é utilizar computadores
 independentes
 geograficamente distantes
 Diferenças: clusters x grids
 heterogeneidade (nós muito diferentes)
 alta dispersão geográfica (escala mundial)
 compartilhamento (inexistente)
 múltiplos domínios administrativos
 controle totalmente distribuído
2
Grades Computacionais
 Componentes
 PCs, SMPs, MPPs, clusters
 controlados por diferentes entidades 
diversos domínios administrativos
 Não têm uma imagem única do sistema
 Sistema não dedicado
 Aplicação deve estar preparada para:
 dinamismo
 variedade de plataformas
3
Grades Computacionais
 Escalonamento de aplicação
 recursos controlados por vários escalonadores
distintos que devem decidir:
 quais recursos serão utilizados pela aplicação
 quais tarefas cada um destes recursos realizará
 submeter solicitações aos escalonadores
apropriados  tarefa do escalonador de
aplicações
 Grids: duas camadas de escalonamento
4
Grades Computacionais
usuário
usuário
Escalonador
de Aplicação
Escalonador
de Recursos
MPP
usuário
Escalonador
de Aplicação
Escalonador
de Recursos
SMP
Escalonador
de Recursos
Cluster
SMP
5
Grades Computacionais
Workstation
MPP
Computador
convencional
Cluster
Workstation
Internet
SMP
Servidor
Cluster
SMP
Servidor
MPP
6
Grades Computacionais
 Middleware: Globus, Condor, OurGrid,
gLite
 usuário pode obter poder computacional
de forma transparente
 sob demanda
 Soluções:
 evitam problemas no nível do usuário
 introduzem novas abstrações que facilitam
o uso da grade
7
Top500 Supercomputer
Site
Computer
Procs
Year
Rmax
Rpeak
DOE/NNSA/LLNL
United States
BlueGene/L - eServer Blue Gene Solution
IBM
131072
2005
280600
367000
IBM Thomas J. Watson Research Center
United States
BGW - eServer Blue Gene Solution
IBM
40960
2005
91290
114688
DOE/NNSA/LLNL
United States
ASC Purple - eServer pSeries p5 575 1.9 GHz
IBM
10240
2005
63390
77824
NASA/Ames Research Center/NAS
United States
Columbia - SGI Altix 1.5 GHz, Voltaire Infiniband
SGI
10160
2004
51870
60960
Sandia National Laboratories
United States
Thunderbird - PowerEdge 1850, 3.6 GHz, Infiniband
Dell
8000
2005
38270
64512
Sandia National Laboratories
United States
Red Storm Cray XT3, 2.0 GHz
Cray Inc.
10880
2005
36190
43520
The Earth Simulator Center
Japan
Earth-Simulator
NEC
5120
2002
35860
40960
Barcelona Supercomputer Center
Spain
MareNostrum - JS20 Cluster, PPC 970, 2.2 GHz, Myrinet
IBM
4800
2005
27910
42144
ASTRON/University Groningen
Netherlands
Stella - eServer Blue Gene Solution
IBM
12288
2005
27450
34406.4
Oak Ridge National Laboratory
United States
Jaguar - Cray XT3, 2.4 GHz
Cray Inc.
5200
2005
20527
24960
Rmax Maximal LINPACK performance achieved
Rpeak Theoretical peak performance GFlopss
8
Resumindo...
 Plataformas de Execução Paralela
Características
Conectividade
Heterogeneidade
Compartilhamento
Imagem do Sistema
Escalabilidade
SMPs
excelente
nula
não
única
10
MPPs
muito boa
baixa
não
comum
1.000
NOWs
boa
média
sim
comum
1.000
Grids
média/ruim
alta
sim
múltipla
100.000
9
Programação Paralela
10
Programação Paralela
 Paralelismo explícito
 Linguagens (SR)
 Bibliotecas (OpenMP, MPI)
 Suporte de Sistema (lib do SO)
Paralelismo implícito
 Compiladores paralelizadores (F90, HPF)
 Linguagens declarativas (Prolog)
 Sistemas híbridos (Concurrent Logic)
11
Modelos de Programação Paralela
 Modelos
 Memória Compartilhada
 Passagem de Mensagem
 Paradigmas
 SPMD (Single Program Multiple Data)
 MPDM (Multiple Program Multiple Data)
12
Ambientes de Programação Paralela
 Clusters
 Memória Compartilhada
 Software DSM (Click, HLRC, TreadMarks)
 Passagem de Mensagens
 PVM
 MPI
 OpenMP
13
Ambiente: PVM
 Modelo de programação
 passagem de mensagem
 software:
 biblioteca no nível do usuário (C/Fortran)
 protocolo TCP ou UDP
 Modelos de paralelismo: SPMD ou MPDM
14
Ambiente: PVM
 Primitivas para:
 criação e gerenciamento de processos
 troca explícita de mensagens
 primitivas de PVM possuem o prefixo
PVM_
 Sistemas computacionais:
 homogêneos ou heterogêneos
15
Ambiente: MPI
 Padronização a partir do PVM
 Modelo de programação:
 passagem de mensagem
 software:
 biblioteca no nível do usuário (C/Fortran)
 protocolo TCP ou UDP
 Modelos de paralelismo: SPMD ou MPDM
16
Ambiente: MPI
 Primitivas para:
 criação e gerenciamento de processos
 troca explícita de mensagens
 primitivas de MPI possuem o prefixo
MPI_
 Sistemas computacionais:
 homogêneos ou heterogêneos
 Corrige algumas deficiências técnicas do PVM
17
Ambiente: OpenMP
 Busca por uma padronização de facto
 Organização independente envolvendo
 fabricantes de computadores (SGI,
Compaq, Hewllet-Packard, Intel, IBM, Kuck
& Associates, Sun , U.S. Department of
Energy ASCI Program)
 desenvolvedores de aplicações e vendedores
18
Ambiente: OpenMP
 Modelo de programação:
 semelhante ao modelo seqüencial
 desenvolvido para dar suporte ao passo final da
implementação de um algoritmo paralelo
 linguagens: C, C++ e Fortran
 expressão do paralelismo
 diretivas incluídas no código fonte (comentários
em Fortran e #pragmas em C ou C ++)
 em conjunto com rotinas de bibliotecas
19
Programação Paralela
 Grades Computacionais
 Globus Toolkit
 Condor
 OurGrid
 gLite
20
Globus Toolkit
Globus Toolkit v4
www.globus.org
Data
Replication
Credential
Mgmt
Replica
Location
Grid
Telecontrol
Protocol
Delegation
Data Access
& Integration
Community
Scheduling
Framework
WebMDS
Python
Runtime
Community
Authorization
Reliable
File
Transfer
Workspace
Management
Trigger
C
Runtime
Authentication
Authorization
GridFTP
Grid Resource
Allocation &
Management
Index
Java
Runtime
Security
Data
Mgmt
Execution
Mgmt
Info
Services
Common
Runtime
21
Sistema Condor
Resource
Condor
Access Control
Match-Making
Request Agent
Sistema Condor
www.wisc.edu/condor
Resource Owner
System Administrator
Customer/User
Application RM
Application
Distributed
Scalable
Adaptable
Customizable
22
Sistema Condor
= Process Spawned
= ClassAd
Communication
Pathway
Central Manager (Frieda’s)
master
startd
schedd
negotiator
collector
startd
schedd
master
startd
Cluster Node
master
startd
Sistema Condor
Desktop
master
Cluster Node
Desktop
master
startd
schedd
www.wisc.edu/condor
23
Sistema Condor-G
 Globus
 middleware deployed
across entire Grid
 remote access to
computational resources
 dependable, robust data
transfer
 Condor
 job scheduling across
multiple resources
 strong fault tolerance with
checkpointing and
migration
 layered over Globus as
“personal batch system”
for the Grid
www.wisc.edu/condor
24
Sistema Condor-G
Job Submission Machine
Job Execution Site
Globus
GateKeeper
Persistant
Job Queue
Fo
rk
End User
Requests
Globus
JobManager
rk
Fo
Condor-G
Scheduler
Globus
JobManager
Submit
Submit
Fork
Site Job Scheduler
(PBS, Condor, LSF, LoadLeveler, NQE, etc.)
Condor-G
GridManager
GASS
Server
Job X
Job Y
25
www.wisc.edu/condor
Sistema OurGrid
 Aplicações Bag-of-Tasks (BoT)
 Compartilhamento de recursos peer-to-peer
 Principais componentes
 OurGrid peer:
 Network of Favors
 mecanismo de alocação autônomo e totalmente
descentralizado
 MyGrid broker: escalonamento
 SWAN security service: máquina virtual de
proteção
www.ourgrid.org
26
Sistema OurGrid
Ourgrid
www.ourgrid.org
27
gLite
 Utiliza funções do Globus
 Estrutura: BDII, UI, RB, WN, CE, SE, IE
 Aplicações definidas utilizando JDL
 Middleware adotado pelo projeto de grid
europeu (EGEE)
 Outros componentes:
 AMGA
 LFC
 API semelhante a de outros RMSs
www.ourgrid.org
28
Desenvolvimento de Programas
Paralelos
29
Metodologia para Programação Paralela
 Metodologia é (quase) independente da
máquina
 Estágios:
 particionamento
 comunicação
 aglomeração
 mapeamento
30
Particionamento
 Divisão da aplicação em tarefas em menores
 Decomposição do domínio da aplicação
 Objetivos aumentar:
 concorrência
 localidade de referência
31
Comunicação
 Troca de informações entre processos
 Sincronização entre processos
 Definir:
 estruturas de dados e
 algoritmos apropriados
32
Aglomeração
 Avaliação de requisitos de desempenho e custo
 Objetivos se necessário:
 combinar tarefas para reduzir custos de
comunicação
 tarefas maiores podem melhorar o
desempenho, mesmo que diminua a
concorrência
33
Mapeamento
 Cada tarefa é atribuída a um processador
 Estático ou dinâmico
 Objetivos:
 maximizar a utilização dos processadores
 minimizar os custos de comunicação
 balanceamento de carga
34
Metodologia para Programação Paralela
Problema
Particionamento
Comunicação
Aglomeração
Mapeamento
35
Métricas de Desempenho
36
Métricas de Desempenho
Speedup = grau de melhora de desempenho
Eficiência = porção utilizada da capacidade
Redundância = aumento da carga qdo em p processadores
Utilização = utilização dos recursos durante computação
Qualidade = importância de utilizar processamento paralelo
37
Métricas de Desempenho
Speedup s(p) = T(1) / T(p),
onde T(1) = tempo do melhor algoritmo sequencial possível e
p = número de processadores
Eficiência e(p) = s / p = T(1) / (p T(p))
Redundância r(p) = O(p) / O(1),
onde O(p) = número total de ops
em máquina com p processadores
Utilização u(p) = r(p) e(p) = O(p) / (p T(p))
Qualidade q(p) = (s(p) e(p)) / r(n) = T3(1) / (p T2(p) O(p))
38
Métricas de Desempenho
• Escalabilidade
• Modelos de aplicações
• Limites algorítmicos
• Limites arquiteturais
39
Modelos de Aplicações
• Carga fixa = máquinas maiores para
computar + rápido
• Tempo fixo = máquinas maiores para
problemas maiores
• Memória fixa = máquinas maiores para
problemas que precisam de + memória
40
Limites Algorítmicos
•
Falta de paralelismo
•
Freqüência de sincronização
•
Padrão de comunicação/acesso
• Escalonamento deficiente
41
Limites Arquiteturais
•
Latência/banda de comunicação
•
Latência/banda de E/S
•
Overhead de sincronização
• Overhead de coerência
• Capacidade de memória
42
Métricas de Desempenho
 Lei de Amdahl:
Speedup: s = T(1)/T(p)
Trabalho total: c = Ts + Tp = T(1)
T(p) = Ts + Tp/p
s = (Ts + Tp) / (Ts + Tp/p) = c / (Ts + Tp/p)
s = c/Ts qdo p tende a infinito
43
Métricas de Desempenho
 Lei de Gustafson:
Tempo total: c = Ts + Tp
Trabalho total: t = Ts + Tp
Scaled Speedup ss = t / c
ss = (Ts + p * Tp) / (Ts + Tp)
= (Ts + p * Tp) / c = (Ts + p * (c - Ts)) / c
= p + (Ts * (1-p)) / c, linear em Ts
44
Métricas de Desempenho
 Speedup superlinear:
• Overhead reduzido (escalonamento, por exemplo)
• Mais memória/cache
• Tolerância a latência
• Randomização (problemas de otimização)
• Problemas que possuem múltiplas soluções
45
Exemplos
46
Modelo de Programação Seqüencial
Modelo mais simples
Paralelismo implementado pelo compilador ou
software + básico
for i = 1 to N
a[i] = 1
Paralelismo explorado pelo compilador
(p.e.: F90, HPF ou runtime paralelo)
47
Modelo de Programação Paralelo baseado em
Memória Compartilhada
doall i = 1 to N
a[i] = 1
for j = 1 to NPROCS-1
fork(compute,j)
compute(0)
lock(mutex)
x=x+1
unlock(mutex)
48
Modelo de Programação Paralelo baseado em Troca de
Mensagens
Proc pid: (N é o tamanho do problema)
chunk = N/NPROCS
for j = pid*chunk to (pid+1)*chunk-1
a[i] = 1
send(dest,&a[pid*chunk],chunk*sizeof(int))
49
Programando em MC
50
Exemplo usando Posix threads (thread do_work)
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NTHREADS 4
#define ARRAYSIZE 1000000
#define ITERATIONS ARRAYSIZE / NTHREADS
double sum=0.0, a[ARRAYSIZE];
pthread_mutex_t sum_mutex;
void *do_work(void *tid) {
int i, start, *mytid, end;
double mysum=0.0;
/* Initialize my part of the global array and keep local sum */
mytid = (int *) tid;
start = (*mytid * ITERATIONS);
end = start + ITERATIONS;
printf ("Thread %d doing iterations %d to %d\n",*mytid,start,end-1);
for (i=start; i < end ; i++) mysum = mysum + a[i];
/* Lock the mutex and update the global sum, then exit */
pthread_mutex_lock (&sum_mutex);
sum = sum + mysum;
pthread_mutex_unlock (&sum_mutex);
pthread_exit(NULL);
}
51
Exemplo usando Posix threads (main thread)
int main(int argc, char *argv[]) {
int i, start, tids[NTHREADS];
pthread_t threads[NTHREADS];
/* Pthreads setup: initialize mutex. Pass each thread its loop offset */
pthread_mutex_init(&sum_mutex, NULL);
for (i=0; i<NTHREADS; i++) {
tids[i] = i;
pthread_create(&threads[i], NULL, do_work, (void *) &tids[i]);
}
/* Wait for all threads to complete then print global sum */
for (i=0; i<NTHREADS; i++) {
pthread_join(threads[i], NULL);
}
printf ("Done. Sum= %e \n", sum);
sum=0.0;
for (i=0;i<ARRAYSIZE;i++) sum = sum + a[i];
printf("Check Sum= %e\n",sum);
/* Clean up and exit */
pthread_mutex_destroy(&sum_mutex);
pthread_exit (NULL);
}
52
Exemplo usando Processos (cliente/servidor)
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMSZ 27
main() {
char c, *shm, *s;
int chave = 5678, shmid;
shmid = shmget(chave, SHMSZ, (IPC_CREAT|0666));
shm = (char *) shmat(shmid, NULL, 0);
s= shm; /* escreve info em memória */
for (c=’a’; c < =’z’; c++)
*s++= c;
*s = ’\0’;
/* espera até que outro proc altere o 1o. char em memória */
while (*shm != ’*’) sleep(1);
shmdt(shmid); /* liberta segmento */
exit(0);
}
53
Exemplo usando Processos (cliente/servidor)
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMSZ 27
main()
{
char c, *shm, *s;
int chave= 5678, shmid;
shmid= shmget(chave, SHMSZ, 0666);
shm= (char *) shmat(shmid, NULL, 0);
for (s=shm; *s!=’\0’; s++) /* lê da memória compartilhada*/
putchar(*s);
putchar(’\n’);
*shm=’*’; /* alterar o 1o. caracter em memória */
exit(0);
}
54
Exemplo usando OpenMP
PROGRAM HELLO
PRINT *, “Hello parallel world from threads:”
!$OMP PARALLEL
PRINT *, OMP_GET_THREAD_NUM ( )
!$OMP END PARALLEL
PRINT * , “Back to the sequential world.”
STOP
END
55
Exemplo usando OpenMP: saída
 Saída do programa HELLO
Hello parallel world from threads:
1
3
0
2
Back to the sequential world.
56
Programando com Troca de Msgs
usando MPI
57
Exemplo: usando MPI
#include <stdio.h>
#include <string.h>
#include "mpi.h"
main(int argc, char* argv[]) {
int
my_rank;
/* rank of process
*/
int
p;
/* number of processes */
int
source;
/* rank of sender
*/
int
dest;
/* rank of receiver */
int
tag = 0;
/* tag for messages */
char
message[100]; /* storage for message */
MPI_Status status;
/* return status for receive */
/* Start up MPI */
MPI_Init(&argc, &argv);
/* Find out process rank */
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
/* Find out number of processes */
MPI_Comm_size(MPI_COMM_WORLD, &p);
if (my_rank != 0) {
/* Create message */
sprintf(message, "Greetings from process %d!", my_rank);
dest = 0;
/* Use strlen+1 so that '\0' gets transmitted */
MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
} else { /* my_rank == 0 */
for (source = 1; source < p; source++) {
MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status);
printf("%s\n", message);
}
}
/* Shut down MPI */
MPI_Finalize();
} /* main */
58
Exemplo: SOR (Successive Over-Relaxation)
• Computação sobre uma matriz
• Grupo de linhas consecutivas para cada
processador
• Cada elemento calculado usando vizinhos
• Comunicação nas bordas
59
Exemplo: SOR (Successive Over-Relaxation)
•Usando modelo de memória compartilhada:
for num_iters
for num_minhas_linhas
compute
barreira
• Usando modelo de troca de mensagens
define submatriz local
for num_iters
if pid != 0
envia primeira linha a pid-1
recebe limite superior de pid-1
if pid != P-1
envia ultima linha a pid+1
recebe limite inferior de pid+1
for num_linhas
compute
P0
P1
P2
60
Exemplo: Usando Condor (subm file)
Universe = standard
Executable = /u/dutra/Yap-4.3.20/condor/yap.$$(Arch).$$(OpSys)
Initialdir = /u/dutra/new_experiments/Carcino/diffseeds/theories/x5x4/f5/123
Log = /u/dutra/new_experiments/Carcino/diffseeds/theories/x5x4/f5/123/log
Requirements = ((Arch == "INTEL" && OpSys == "LINUX")
&& (Mips >= 500) && Memory >= 400) ||
(Arch == "SUN4u" && OpSys == "SOLARIS28") ||
(IsDedicated && UidDomain == "cs.wisc.edu"))
Arguments = -b /u/dutra/Yap-4.3.20/condor/../pl/boot.yap
Input = condor.in.$(Process)
Output = /dev/null
Error = /dev/null
Queue 300
61
Exemplo: Usando Condor (input file)
['/u/dutra/Yap-4.3.20/condor/../pl/init.yap'].
module(user).
['/u/dutra/new_experiments/Aleph/aleph.pl'].
read_all('/u/dutra/new_experiments/Carcino/PL/x5x4/f5/123/train').
set(i,5).
set(minacc,0.7).
set(clauselength,4).
set(recordfile,'/u/dutra/new_experiments/Carcino/
diffseeds/theories/x5x4/f5/123/trace-0.7-4.0').
set(test_pos,'/u/dutra/new_experiments/Carcino/PL/x5x4/f5/123/test.f').
set(test_neg,'/u/dutra/new_experiments/Carcino/PL/x5x4/f5/123/test.n').
set(evalfn,coverage).
induce.
write_rules('/u/dutra/new_experiments/Carcino/
diffseeds/theories/x5x4/f5/123/theory-0.7-4.0').
62
halt.
Exemplo: Usando JDL
Executable = "/home/SO/marluce/tmp/yap/condor/yap";
InputSandbox = { "/home/SO/marluce/tmp/yap/condor/yap",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/*.pl",
"home/SO/marluce/tmp/CondorBench//Aleph/aleph.pl",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.b",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.f",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.n",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/condor.in.0" };
OutputSandbox = { "theory-0.9-5.0", "trace-0.9-5.0"};
InputData = { "/home/SO/marluce/tmp/yap/condor/yap",
"home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/*.pl",
“ home/SO/marluce/tmp/CondorBench//Aleph/aleph.pl”,
“home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.b”,
“ home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.f”,
“home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/train.n”,
“home/SO/marluce/tmp/CondorBench//Carcino/diffseeds/theories/x5x4/f1/2/condor.in.0” };
Arguments = "/home/SO/marluce/tmp/yap/condor/yap < home/SO/marluce/tmp/CondorBench/
Carcino/diffseeds/theories/x5x4/f1/2/condor.in.0";
Requirements = "((Arch == "INTEL" && OpSys == "LINUX") && (Mips >= 500)
&& Memory >= 400)";
StdInput
= "condor.in.0";
StdOutput = "/dev/null";
63
StdError = "/dev/null";
Referências
 DSM http://www.ics.uci.edu/~javid/dsm.html
 TOP500 Supercomputers http://www.top500.org
 Globus Toolkit http://www.globus.org/toolkit/
 gLite http://glite.web.cern.ch/glite/
 Condor http://www.wisc.edu/condor
 OurGrid http://www.ourgrid.org
 PVM http://www.csm.ornl.gov/pvm
 MPI http://www.mpi-forum.org
 OurGrid http://www.ourgrid.org
 Projeto EGEE: http://www.egee.org
 Projeto EELA: http://www.eu-eela.org
 Global Grid Forum: http://www.ggf.org
64
Obrigada!!

65
Download

Mini-curso em Programacao Paralela e Grids (ISEP)