CAP-387(2016) Tópicos Especiais em

Documentos relacionados
Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens

Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

MPI Linux. Alternativas Práticas

SISTEMAS OPERACIONAIS. 3ª. Lista de Exercícios

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Conteúdo programático

Simulado de Linguagem de Programação Java

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0

PROGRAMAÇÃO DE COMPUTADORES

Administração Portal Controle Público

Sobre o Visual C

Programação WEB. Prof. André Gustavo Duarte de Almeida www3.ifrn.edu.br/~andrealmeida. Aula II jquery UI

Sistemas Distribuídos

Módulo e-rede Magento v1.0. Manual de. Instalação do Módulo. estamos todos ligados

ENG1000 Introdução à Engenharia

Arquitetura de Computadores Sistemas Operacionais II

apt-get install openssh-client (Debian) yum install openssh-clents (Fedora) slapt-get install openssh (Slackware)

Instruções para uso do MPI - Relatório Técnico -

Curso de C: uma breve introdução

Ambientes de troca de mensagens - MPI. Aleardo Manacero Jr.

UNIVERSIDADE ESTADUAL PAULISTA. Apostila Pascal Ed Prof. Dr. Galeno José de Sena DMA/FEG CAPÍTULO 8

tipo e tamanho e com os "mesmos" elementos do vetor A, ou seja, B[i] = A[i].

Engenharia de Software II

Como usar a opção de Folha de roteamento

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Inteligência Artificial

Lista de Exercícios 1

Processamento de Dados aplicado à Geociências. AULA 1: Introdução à Arquitetura de Computadores

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Comunicação entre pai e filho

Programação Orientada a Objetos SANTOS, Rafael

Introdução. Aula 02. Estrutura de Dados II. UFS - DComp Adaptados a partir do material da Profa. Kenia Kodel Cox

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Introdução à orientação a objetos

Sistemas Operacionais. Rodrigo Rubira Branco

Arquivos. Estruturas de Dados II Vanessa Braganholo

Sistemas Distribuídos Capítulo 4 - Aula 5

Fundamentos de Arquivos. SCC203 Algoritmos e Estruturas de Dados II

Controlador de DMA. Gustavo G. Parma

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Formas de Pagamento Resumida Vendas Vendedor Vendas Vendedor Resumido Vendas Vendedor Caixa Vendas por Artigos...

Introdução à Informática

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

6. Comunicação entre processos - Pipes

Os passos a seguir servirão de guia para utilização da funcionalidade Acordo Financeiro do TOTVS Gestão Financeira.

Curso de extensão em Blender Prof. Luiz Gonzaga Damasceno

Programação Orientada a Objetos (DPADF 0063)

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Uma Visão Geral dos Sistemas distribuídos de Cluster e Grid e suas Ferramentas para o processamento paralelo de dados

Sistema Operacional. Implementação de Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Plant Design.com

Curso C: Ponteiros e Arrays

Administração de Banco de Dados. José Antônio da Cunha CEFET - RN

Departamento de Informática - PUC-Rio INF 1005 Programação I P1 22/09/2010 Nota

Banco de Dados I. Prof. Edson Thizon

Modelagem de Sistemas Web. Metodologias para o desenvolvimento de sistemas web

DESCRITIVO TÉCNICO PLATAFORMA PCS

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Índice. tabela das versões do documento. GPOP - Gerenciador POP _ /01/2016 1/14. título: GPOP. assunto: Manual de utilização

Revisão Diagrama de Caso de Uso. Rodolfo Adamshuk Silva 30/08/2013

DK105 GROVE. Temperatura e Umidade. Radiuino

Do alto-nível ao assembly

CRIAÇÃO DE TABELAS NO ACCESS. Criação de Tabelas no Access

Estudos Caso-Controle. efeito > causa??? Casos. Expostos. (doentes) Coorte hipotética ou real. Não-expostos. Expostos. Controles (não - doentes)

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Oganização e Arquitetura de Computadores

Programação de Computadores I. Linguagem C Função

Curso de Informática DCC-IM / UFRJ. Gabriel P. Silva MPI

Organização de Computadores 1

Metodologias de PETI. Prof. Marlon Marcon

Método de ordenação - objetivos:

Sefaz Virtual Ambiente Nacional Projeto Nota Fiscal Eletrônica

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Sistema de Entrada/Saída

BC1424 Algoritmos e Estruturas de Dados I Aula 02: Ponteiros, estruturas e alocação de memória

Álgebra Linear Aplicada à Compressão de Imagens. Universidade de Lisboa Instituto Superior Técnico. Mestrado em Engenharia Aeroespacial

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Estruturas de entrada e saída

Experimentos com a memória cache do CPU

Algoritmos APRENDENDO A PROGRAMAR COM C#

Experiência 04: Comandos para testes e identificação do computador na rede.

ARQUITETURA DE COMPUTADORES. Professor: Clayton Rodrigues da Siva

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Aspectos de Sistemas Operativos

Manual Remessa Bancária

Controlo parental AVISO PARA OS PAIS. Vita antes de permitir que os seus filhos joguem. Defina o controlo parental no sistema PlayStation

Modelo Entidade Relacionamento (MER) Professor : Esp. Hiarly Alves

OO Engenharia Eletrônica

Transcrição:

CAP-387(2016) Tópicos Especiais em Computação Aplicada: Construção de Aplicações Massivamente Paralelas Aula 44: MPI IO Celso L. Mendes, Stephan Stephany LAC / INPE Emails: celso.mendes@inpe.br, stephan.stephany@inpe.br

MPI IO - Introdução MPI IO: Funções de I/O definidas no padrão MPI (em MPI-2) Motivação: Melhor desempenho paralelo Arquivo único (ao invés de um por processo) Migração fácil para códigos usando Posix I/O Suporte para múltiplos estilos de I/O Implementação modelo: ROMIO (ANL) Distribuída como parte de MPICH 2

MPI IO Visão Geral Revendo: I/O via Posix MPI IO: E/S Cooperativa Paralelismo presente Um único arquivo Acesso pode ser otimizado pela biblioteca MPI 3

Conveniência de MPI IO Semelhanças de funcionalidades: write é similar a enviar mensagem, read a receber I/O paralelo pode usar operações coletivas I/O paralelo pode usar operações sem bloqueio Tipos de dados podem ser usados em I/O para definir estruturas dos dados na memória ou num arquivo Comunicadores podem ser usados em mensagens relacionadas a I/O Infraestrutura de MPI: pode ser bem conveniente 4

Significado de I/O Paralelo Ao nível do programa: writes e reads concorrentes a um arquivo comum, a partir de múltiplos processos do programa Ao nível do sistema: Sistema de arquivos paralelo, e hardware para suportar os acessos concorrentes Vários tipos de implementações possíveis 5

Estrutura de MPI IO I/O Independente: Funções de I/O invocadas por cada processo individualmente Modo similar a Posix I/O I/O Coletivo: Funções coletivas, invocadas por todos os processos de um comunicador Implementação (biblioteca MPI) pode otimizar desempenho 6

I/O Independente em MPI IO Funções Básicas: Similar a Posix I/O Abrir arquivo: MPI_File_open() Escrever arquivo: MPI_File_write() Posicionar no arquivo: MPI_File_seek() Ler arquivo: MPI_File_read() Fechar arquivo: MPI_File_close() Argumentos: Similares a Posix I/O, mais comunicador/status/info 7

MPI IO Exemplo Básico #include <stdio.h> #include mpi.h int main(int argc, char *argv[]) { MPI_File fh; int buf [1000], rank; MPI_Init (0,0); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_File_open(MPI_COMM_WORLD, "test.out", MPI_MODE_CREATE MPI_MODE_WRONLY, MPI_INFO_NULL, &fh); if (rank == 0) MPI_File_write(fh, buf, 1000, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&fh); MPI_Finalize(); return 0; } Operação Independente Operações Coletivas 8

Escrita em Arquivo com MPI IO Funções Principais: MPI_File_write(): escrita a partir da posição atual MPI_File_write_at(): escrita passando posição desejada Flags de modo: MPI_MODE_WRONLY, MPI_MODE_RDWR, etc Múltiplos flags compostos via em C (em Fortran: +) Se o arquivo não existe ainda, o flag MPI_MODE_CREATE deve ser passado em MPI_File_open() 9

Formas de Acesso MPI_File_seek MPI_File_read MPI_File_write MPI_File_read_at MPI_File_write_at MPI_File_read_shared MPI_File_write_shared Similar a Posix I/O Combinam seek e I/O (são thread-safe) Similar a Posix I/O 10

Uso de Offsets Específicos #include <stdio.h> #include mpi.h arquivo: int main(int argc, char *argv[]) { MPI_File fh; MPI_Status status; MPI_Offset offset; int buf [1000], rank, nprocs; MPI_Init (0,0); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &nprocs); MPI_File_open(MPI_COMM_WORLD, /pfs/arquivo", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh); nints = FILESIZE / (nprocs*intsize); offset = rank * nints * INTSIZE; MPI_File_read_at(fh, offset, buf, nints, MPI_INT, &status); MPI_Get_count(&status, MPI_INT, &count); printf( rank %d leu %d ints\n,rank,count); MPI_File_close(&fh); MPI_Finalize(); return 0; } P 0 P 1 P 2 Operação Independente Operações Coletivas 11

Acesso a Dados Não-Contíguos Cada processo enxerga partes do arquivo O conjunto destas partes chama-se file-view Indica as partes do arquivo às quais o processo tem acesso reads e writes do processo são sempre sobre sua fileview Descrito em MPI por um offset (útil para pular cabeçalhos) e um MPI_Datatype (tipo de dados) A file-view é útil para se definir acessos não-contíguos 12

File-View em MPI IO Especificação da file-view: Definida por {displacement, etype, filetype} displacement: número de bytes a serem pulados no início do arquivo etype: unidade básica de acesso (tipo básico ou derivado) filetype: indica quais partes são vistas pelo processo Configurada com chamada a MPI_File_set_view() 13

File-View em MPI IO (cont.) Exemplo: 14

Uso da File-View do Exemplo MPI_File fh; MPI_Aint lb, extent; MPI_Offset disp; MPI_Datatype etype, filetype, config; int buf[1000]; MPI_Type_contiguous(2,MPI_INT, &config); << cria tipo de 2 inteiros >> lb=0; extent=6*sizeof(int); MPI_Type_create_resized(config, lb, extent, &filetype); << cria tipo de 2 ints e 4 gaps >> MPI_Type_commit(&filetype); << registra o novo tipo criado >> disp = 5 * sizeof(int); etype=mpi_int; MPI_File_open(MPI_COMM_WORLD, /pfs/arquivo", MPI_MODE_CREATE MPI_MODE_RDWR, MPI_INFO_NULL, &fh); MPI_File_set_view(fh, disp, etype, filetype, native, MPI_INFO_NULL); << cria file-view >> MPI_File_write(fh, buf, 1000, MPI_INT, MPI_STATUS_IGNORE); << escreve 1000 ints >> 15

I/O Coletivo em MPI IO Funções de I/O coletivo: Chamadas por todos os processos do comunicador Objetivo: permitir otimizações pela biblioteca MPI Idéia básica: agrupar I/O em blocos maiores Bastante efetivo quando acessos se entrelaçam 16

Funções para I/O Coletivo Escrita: MPI_File_write_at_all(), etc Argumentos similares aos das respectivas funções independentes, mas relativos a cada processo _all: Indicaque todos os processos do comunicador usado ao abrir o arquivo vão chamar esta função _at: Indica que a posição no arquivo é passada como parte da chamada; evita ter que chamar seek, e garante código mais claro, além de thread-safety 17

Exemplo de I/O Coletivo Exemplo: Acessar um array distribuído 2-D Assume que 16 processos (P 0 :P 15 ) vão acessar o arq. Cada processador lê o arquivo e guarda os dados em sua memória local Dados armazenados no arquivo por linhas:...... P0 P1 P2 P3 P0 P1 P2 P3 P0 P1 P2 P3 P4 P5 P6 P7 Ex: Dados a serem lidos por P1:... 18

Exemplo de I/O Coletivo (cont.) Leitura dos dados: 4 formas possíveis Cada forma (ou nível) seleciona funções específicas de MPI, e as requisita do sist.arquivos Diferentes formas (níveis) podem ter desempenhos distintos Níveis são classificados de 0 a 3 19

Acesso em Nível 0 Cada processo faz uma leitura independente a cada linha da sua parte no arquivo MPI_File_open(, file,, &fh); for (i=0; i<n_local_rows; i++) { } MPI_File_seek(fh, ); MPI_File_read(fh, &(A[i][0]), ); MPI_File_close(&fh); 20

Acesso em Nível 1 Similar ao Nível-0, mas cada processo usa I/O coletivo para a leitura MPI_File_open(, file,, &fh); for (i=0; i<n_local_rows; i++) { } MPI_File_seek(fh, ); MPI_File_read_all(fh, &(A[i][0]), ); MPI_File_close(&fh); 21

Acesso em Nível 2 Cada processo cria um tipo derivado que descreve seus acessos não-contíguos, define file-view, e chama uma função de I/O independente MPI_Type_create_subarray(, &subarray, ); MPI_Type_commit(&subarray); << registra novo tipo >> MPI_File_open(, file,, &fh); MPI_File_set_view(fh,, subarray, ); MPI_File_read(fh, A, ); MPI_File_close(&fh); 22

Acesso em Nível 3 Similar ao Nível-2, mas cada processo usa I/O coletivo para a leitura MPI_Type_create_subarray(, &subarray, ); MPI_Type_commit(&subarray); << registra novo tipo >> MPI_File_open(, file,, &fh); MPI_File_set_view(fh,, subarray, ); MPI_File_read_all(fh, A, ); MPI_File_close(&fh); 23

Arquivo Quatro Níveis de Acesso Níveis 0 e 1 pegam uma sub-linha por vez Nível-1 otimiza usando coletiva Níveis 2 e 3 pegam todo o sub-array, usando novo tipo (dados não-contíguos) Nível-3 otimiza usando coletiva Para cada aumento de nível, maior é o volume de dados lidos por chamada MPI Aumenta a chance de otimização para a biblioteca MPI 24

Desempenho em Sistemas Reais Nível 0 Nível 2 Nível 3 BlueGene/Q - 39 2.685 Blue Waters 142 137 2.839 Teste: array de tamanho 1024 3 Número de processos: 256 BG/Q: 32 nós, 8 procs/nó BW: 16 nós, 16 procs/nó Sist.arquivos distintos BG/Q: GPFS BW: Lustre Resultados em MB/s BG/Q: aumento de 68! BW: aumento de 20,7! 25

MPI IO: Sumário Dispositivos de I/O têm latência alta Formas de obter melhor desempenho: Otimizar acesso a dados não contíguos Criação de tipos derivados em MPI Grande vantagem de MPI IO sobre Posix I/O Biblioteca MPI pode ler blocos maiores (contíguos) e extrair partes de interesse de cada processo Combinar vários acessos em acessos maiores Operações de I/O coletivo em MPI Permite otimizações pela biblioteca MPI 26