Sistemas de Processamento Paralelo: Programação e Scheduling Oliver Sinnen oliver.sinnen@inesc.pt
Conteúdo Introdução Programação paralela Identificação de sub-tarefas Dependências Scheduling List Scheduling
Sistemas paralelos Sistemas com mais do que uma unidade de processamento (processador) Unidades trabalham em paralelo para resolver um problema SIMD (Single Instruction Multiple Data), MIMD (Multiple Instructuion Multiple Data)
Arquitectura de sistemas paralelos Memória partilhada Comunicação rápida entre processadores Ex. uma maquina com vários processadores => IBM, SUN < 64 P Memória distribuída Comunicação lenta entre processadores Ex. clusters de PCs => Existem Linux clusters <512 PCs!
Programação sequêncial 1. Especificação da tarefa Textual, na cabeça, equações... 2. Codificação da tarefa Numa linguagem de programação (por ex. C, Java,...) 3. Execução num processador Programa é executado num computador com um processador
Programação paralela Além das tarefas da programação sequêncial: Decomposição da tarefa em subtarefas Análise de dependências entre as subtarefas Mapeamento espacial e temporal (scheduling) das sub-tarefas para os recursos do sistema paralelo
Programação paralela
Sub-tarefas Exemplo: d = a 2 +a+1 a = 1 b = a + 1 c = a*a d = b + c Identificação de sub-tarefas/ decomposição em sub-tarefas Análise de dependências entre as sub-tarefas
Dependências 1: a = 1 2: b = a + 1 3: c = a*a 4: d = b + c grafo de dependência 1 2 3 4
Scheduling, exemplos Schedule 1: Schedule 2: Processor 1 Processor 2 Processor 1 Processor 2 1 3 1 3 4 2 2 4
Scheduling dinâmico vs. estático Dinâmico Atribuição sub-tarefa <-> processador durante a execução da tarefa (-> multitasking) Estático Para problemas não determinísticos Adapta-se à situação Atribuição sub-tarefa <-> processador antes da execução Gestão de localidade de dados Sem overhead na execução
Scheduling estático Problema NP-completo: Complexidade duma solução óptima é O(x N ), em que N é o número de sub-tarefas Algoritmos de scheduling: Do tipo heuristico Entradas: Grafo que representa a tarefa; número de processadores Saída: Schedule que define em qual processador e quando é que as sub-tarefas são executadas
Grafos para scheduling Grafo é modelo duma tarefa a paralelisar: Nó representa computação (sub-tarefa) Arco representa comunicação/dependência entre nós Peso dum arco ou dum nó representa o custo (tempo) Tipos de grafos, por ex.: DAG, grafos de fluxo, grafos não direccionais
Exemplo dum grafo b=a+1 Sub-tarefas: 1 a a=1 a 2 3 b c 4 d=b+c c=a*a Pesos: 1 1 1 1 2 4 2 3 1 1 4 2
DAG (Directed Acyclic Graph) Modelo de grafo mais usado para scheduling estático Direccionado Representação precisa das dependências e do fluxo de comunicação Acíclico Simples para análises (teoria de grafos Não tem representação directa de ciclos => granularidade grosseira é típico
Algoritmo de scheduling: List scheduling 1. Ordena os nós numa lista segundo a sua importância, respeitando as dependências 2. Schedule do 1º nó da lista no processador que permite a sua execução mais cedo; apaga nó da lista 3. Repete 2. até todos nós da lista serem processados
Prioridades de nós Caminho crítico Caminho no grafo com o maior comprimento bottom-level, top-level Comprimentos de caminhos parciais (por ex. bottom-level de f é 6) Medidas para definir a importância dum nó => ordem na 1ª parte de list scheduling
Procurar o melhor processador Na 2ª fase de list scheduling: Para cada nó em cada processador: Quando o processador está livre Quando chegam os dados de entrada É assumido que comunicação entre nós executados no mesmo processador é zero
Exemplo list scheduling
Resultados de List Scheduling Grafos aleatórios Custo por nó: 1 em média Comunicação elevada 16 processadores
Scheduling e comunicação Comunicação é a parte mais crítica na paralelização de tarefas No scheduling tradicional assume-se sistemas paralelos ideais: completamente ligados e sem competição nos recursos de comunicação => Não é realístico!
Scheduling em sistemas arbitrários com competição Sistemas alvos também modelados como grafo Canais de comunicação tratados como processadores => scheduling de messagens nos canais
Investigação List scheduling com competição Obter resultados em sistemas reais Bom Apetite!!!