Waldemar Celes. 25 de Agosto de 2014

Tamanho: px
Começar a partir da página:

Download "Waldemar Celes. 25 de Agosto de 2014"

Transcrição

1 Introdução a CUDA INF2062 Tópicos em Simulação e Visualização Waldemar Celes [email protected] Tecgraf, DI/PUC-Rio 25 de Agosto de 2014 W. Celes Introdução a CUDA 1

2 GPGPU Programação de propósito geral usando a GPU Simulação física Traçado de raio Processamento de imagem Ordenação... Álgebra W. Celes Introdução a CUDA 2

3 CUDA Compute Unified Device Architecture Modelo de programação de propósito geral usando GPU Hospedeiro (host) requisita execução de threads na GPU GPU é um dispositivo (device) visto como um co-processador A dedicated super-threaded co-processor W. Celes Introdução a CUDA 3

4 Hardware Gráfico Conjunto de multi-processadores (SM stream multiprocessor) Cada um composto por processadores escalares (SP) W. Celes Introdução a CUDA 4

5 Modelo de Programação Kernel É o equivalente a função em programação sequencial Executado N vezes por N diferentes threads no dispositivo A cada execução, o thread associado é identificado pela variável built-in threadidx Qualificador global identifica um kernel Número de threads informado na chamada: <<<... >>> W. Celes Introdução a CUDA 5

6 Exemplo: soma de vetores // Kernel definition global void VecAdd(float A, float B, float C) { int i = threadidx.x; C[i] = A[i] + B[i]; } int { } main()... // Kernel invocation with N threads VecAdd<<<1, N>>>(A, B, C); W. Celes Introdução a CUDA 6

7 Hierarquia de threads Threads são agrupados em blocos Número de threads num bloco é definido por 3 componentes Tipo dim3 Possibilita a identificação de threads em arranjos 1D, 2D e 3D Número de threads por bloco é limitado Threads de um bloco compartilham recursos W. Celes Introdução a CUDA 7

8 Hierarquia de threads Threads são agrupados em blocos Número de threads num bloco é definido por 3 componentes Tipo dim3 Possibilita a identificação de threads em arranjos 1D, 2D e 3D Número de threads por bloco é limitado Threads de um bloco compartilham recursos Cada thread executa num processdor Threads de um bloco executam em um mesmo SM Número máximo de threads por SM Exemplos: 1024 (GT200), 768 (G80) Diferentes blocos podem ser mapeados para um mesmo multi-processador W. Celes Introdução a CUDA 7

9 Exemplo: soma de matrizes // Kernel definition global void MatAdd (float A[N][N], float B[N][N], float C[N][N]) { int i = threadidx.x; int j = threadidx.y; C[i][j] = A[i][j] + B[i][j]; } int main () {... // Kernel invocation with one block of N N 1 threads int numblocks = 1; dim3 threadsperblock(n, N); MatAdd<<<numBlocks, threadsperblock>>>(a, B, C);... } W. Celes Introdução a CUDA 8

10 Organização de Blocos Blocos são organizados em grid 1D ou 2D Escolha do número de blocos depende: Tamanho do problema Número de multi-processadores (pode ser bem maior) Blocos são executados em ordem aleatória Distribuídos entre os multi-processadores Variáveis pré-definidas Índice do bloco: blockidx Dimensão do bloco: blockdim W. Celes Introdução a CUDA 9

11 Processamento de Matriz por Bloco j 16x16 i Por exemplo, blocos de tamanho 16x16 (256 threads) Pode ocorrer do número total de threads não ser divisível pelo número de threads por bloco Código deve verificar esta condição i = blockidx.x blockdim.x + threadidx.x W. Celes Introdução a CUDA 10

12 Exemplo: soma de matrizes por bloco // Kernel definition global void MatAdd(float A[N][N], float B[N][N], float C[N][N]) { int i = blockidx.x blockdim.x + threadidx.x; int j = blockidx.y blockdim.y + threadidx.y; if (i < N && j < N) C[i][j] = A[i][j] + B[i][j]; } int main() {... // Kernel invocation: assuming N and threads/block are multiple dim3 threadsperblock(16, 16); dim3 numblocks(n / threadsperblock.x, N / threadsperblock.y); MatAdd<<<numBlocks, threadsperblock>>>(a, B, C); } W. Celes Introdução a CUDA 11

13 Tamanho do bloco Qual tamanho de bloco devemos usar: 8 8, 16 16, 32 32? Considerando uma GT200 Até 1024 threads por SM Até 256 threads por bloco Até 8 blocos por SM W. Celes Introdução a CUDA 12

14 Tamanho do bloco Qual tamanho de bloco devemos usar: 8 8, 16 16, 32 32? Considerando uma GT200 Até 1024 threads por SM Até 256 threads por bloco Até 8 blocos por SM Com tamanho 8 8 Cada bloco teria 8 8 = 64 threads Para usar todo SM, teríamos que ter 1024/64 = 12 blocos W. Celes Introdução a CUDA 12

15 Tamanho do bloco Qual tamanho de bloco devemos usar: 8 8, 16 16, 32 32? Considerando uma GT200 Até 1024 threads por SM Até 256 threads por bloco Até 8 blocos por SM Com tamanho 8 8 Cada bloco teria 8 8 = 64 threads Para usar todo SM, teríamos que ter 1024/64 = 12 blocos Excede o limite de 8 blocos Teríamos então apenas 8 64 = 512 threads no SM W. Celes Introdução a CUDA 12

16 Tamanho do bloco Qual tamanho de bloco devemos usar: 8 8, 16 16, 32 32? Considerando uma GT200 Até 1024 threads por SM Até 256 threads por bloco Até 8 blocos por SM Com tamanho 8 8 Cada bloco teria 8 8 = 64 threads Para usar todo SM, teríamos que ter 1024/64 = 12 blocos Excede o limite de 8 blocos Teríamos então apenas 8 64 = 512 threads no SM Com tamanho = 256 threads por bloco 1024/246 = 4 blocos por SM OK! W. Celes Introdução a CUDA 12

17 Tamanho do bloco Qual tamanho de bloco devemos usar: 8 8, 16 16, 32 32? Considerando uma GT200 Até 1024 threads por SM Até 256 threads por bloco Até 8 blocos por SM Com tamanho 8 8 Cada bloco teria 8 8 = 64 threads Para usar todo SM, teríamos que ter 1024/64 = 12 blocos Excede o limite de 8 blocos Teríamos então apenas 8 64 = 512 threads no SM Com tamanho = 256 threads por bloco 1024/246 = 4 blocos por SM OK! Com tamanho = 512 threads por bloco Excede limite W. Celes Introdução a CUDA 12

18 Programação híbrida Hospedeiro x Dispositivo (hardware gráfico) Threads executados no dispositivo (co-processador) Memória do hospedeiro x Memória do dispositivo CUDA oferece funções de alocação e transferência de dados Memória do disponsitivo: linear ou CUDA array (textura) Execução concorrente assíncrona (hospedeiro-dispositivo) Operações assíncronas Disparo de kernels Cópia entre espaços de memória do dispositivo Hw pode permitir execução concorrente de diferente kernels W. Celes Introdução a CUDA 13

19 Compilação e Linkedição CUDA: estende a linguagem C Programa compilado com compilador CUDA (nvcc) Responsável por executar outras ferramentas de compilação (cudacc, gcc, etc.) Gera código C (que pode já ser compilado) Biblioteca runtime cudart, cuda W. Celes Introdução a CUDA 14

20 Espaços de Memória do Dispositivo Diferentes espaços de memória Memória local a cada thread Tempo de vida do thread Gerenciada automaticamente por CUDA como alternativa aos registradores (não é rápida) Memória compartilhada por bloco Tempo de vida do bloco Acesso compartilhado a todos os threads do bloco (baixa latência) Sincronismo através da função builtin: syncthreads (); Barreira que obriga todos os threads serem executados até o ponto da chamada (lightweight) Memórias persistentes entre kernels (alta latência) Memória global (read/write, not cached) Memória constante (read only, cached) Baixa latência se todos os threads acessam o mesmo endereço Memória de textura (read only, cached) W. Celes Introdução a CUDA 15

21 Uso da memória on-chip Memória com latência baixa Registradores de 32-bits por thread Memória compartilhada entre threads de um bloco Cache da memória constante Cache da memória de textura W. Celes Introdução a CUDA 16

22 Memórias do dipositivo W. Celes Introdução a CUDA 17

23 API para Gerenciamento de Memória Linear cudamalloc, cudafree, cudamemcpy // Host code int main() { int N =...; size t size = N sizeof(float); // Allocate input vectors h A and h B in host memory float h A = (float )malloc(size); float h B = (float )malloc(size); // Initialize input vectors... // Allocate vectors in device memory float d A; cudamalloc(&d A, size); float d B; cudamalloc(&d B, size); float d C; cudamalloc(&d C, size); // Copy vectors from host memory to device memory cudamemcpy(d A, h A, size, cudamemcpyhosttodevice); cudamemcpy(d B, h B, size, cudamemcpyhosttodevice); W. Celes Introdução a CUDA 18

24 // Invoke kernel int threadsperblock = 256; int blockspergrid = (N + threadsperblock 1) / threadsperblock; VecAdd<<<blocksPerGrid, threadsperblock>>>(d A, d B, d C, N); // Copy result from device memory to host memory // h C contains the result in host memory cudamemcpy(h C, d C, size, cudamemcpydevicetohost); // Free device memory cudafree(d A); cudafree(d B); cudafree(d C); } // Free host memory... W. Celes Introdução a CUDA 19

25 // Invoke kernel int threadsperblock = 256; int blockspergrid = (N + threadsperblock 1) / threadsperblock; VecAdd<<<blocksPerGrid, threadsperblock>>>(d A, d B, d C, N); // Copy result from device memory to host memory // h C contains the result in host memory cudamemcpy(h C, d C, size, cudamemcpydevicetohost); // Free device memory cudafree(d A); cudafree(d B); cudafree(d C); } // Free host memory... Memória com alinhamento para acesso 2D e 3D 2D: cudamallocpitch, cudamemcpy2d 3D: cudamalloc3d, cudamemcpy3d W. Celes Introdução a CUDA 19

26 } Eficiência de acesso a memória Exemplo: multiplicação de matriz com solução simplista global void MatMult (float A, float B, float C, int width) { int row = blockidx.y TILE SIZE + threadidx.y; int col = blockidx.x TILE SIZE + threadidx.x; float val = 0; for (int k = 0; k < width; ++k) val += A[row width+k] B[k width+col] C[row width+k] = val W. Celes Introdução a CUDA 20

27 } Eficiência de acesso a memória Exemplo: multiplicação de matriz com solução simplista global void MatMult (float A, float B, float C, int width) { int row = blockidx.y TILE SIZE + threadidx.y; int col = blockidx.x TILE SIZE + threadidx.x; float val = 0; for (int k = 0; k < width; ++k) val += A[row width+k] B[k width+col] C[row width+k] = val Cada thread processa um elemento da matriz resultante Cada elemento da matriz A é lido width vezes Cada elemento da matriz B é lido height vezes Muito acesso à memória global (é muito caro!) W. Celes Introdução a CUDA 20

28 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) W. Celes Introdução a CUDA 21

29 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) Razão entre computação e acesso a memória global Número de operações aritméticas por acesso global r = 2/2 = 1 Esta razão tem um forte impacto na eficiência de códigos W. Celes Introdução a CUDA 21

30 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) Razão entre computação e acesso a memória global Número de operações aritméticas por acesso global r = 2/2 = 1 Esta razão tem um forte impacto na eficiência de códigos Por exemplo, G80: largura de banda de acesso à global 86.4 GB/s 21.6 (86.4/4) Gfloat/s W. Celes Introdução a CUDA 21

31 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) Razão entre computação e acesso a memória global Número de operações aritméticas por acesso global r = 2/2 = 1 Esta razão tem um forte impacto na eficiência de códigos Por exemplo, G80: largura de banda de acesso à global 86.4 GB/s 21.6 (86.4/4) Gfloat/s Cada operação aritmética precisa de um acesso: 21.6 gigaflops 21.6 bilhões de operações de floating-point por segundo W. Celes Introdução a CUDA 21

32 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) Razão entre computação e acesso a memória global Número de operações aritméticas por acesso global r = 2/2 = 1 Esta razão tem um forte impacto na eficiência de códigos Por exemplo, G80: largura de banda de acesso à global 86.4 GB/s 21.6 (86.4/4) Gfloat/s Cada operação aritmética precisa de um acesso: 21.6 gigaflops 21.6 bilhões de operações de floating-point por segundo Muito abaixo do limite do processador: 367 gigaflops W. Celes Introdução a CUDA 21

33 Eficiência de acesso a memória Eficiência esperada do código A cada iteração do loop 2 acessos a memória global 2 operações aritméticas (1 multiplicação, 1 adição) Razão entre computação e acesso a memória global Número de operações aritméticas por acesso global r = 2/2 = 1 Esta razão tem um forte impacto na eficiência de códigos Por exemplo, G80: largura de banda de acesso à global 86.4 GB/s 21.6 (86.4/4) Gfloat/s Cada operação aritmética precisa de um acesso: 21.6 gigaflops 21.6 bilhões de operações de floating-point por segundo Muito abaixo do limite do processador: 367 gigaflops Solução: usar memória compartilhada W. Celes Introdução a CUDA 21

34 Memória Compartilhada Compartilhada por todos os threads do bloco Identificada pelo qualificador shared W. Celes Introdução a CUDA 22

35 Memória Compartilhada Compartilhada por todos os threads do bloco Identificada pelo qualificador shared Padrão comum de codificação para ganho de desempenho Carrega dados da memória global para compartilhada Sincroniza threads Processa dados armazenados na memória compartilhada Sincroniza threads Transfere resultado para memória global W. Celes Introdução a CUDA 22

36 Memória Compartilhada Exemplo: multiplicação de matriz com memória compartilhada Divide matrizes em sub-matrizes (mapeados para blocos de threads) Copia sub-matrizes de A e de B para memória compartilhada Faz a multiplicação entre duas sub-matrizes Acumula resultado da sub-matriz e transfere para global W. Celes Introdução a CUDA 23

37 Memória Compartilhada Exemplo: multiplicação de matriz com memória compartilhada Divide matrizes em sub-matrizes (mapeados para blocos de threads) Copia sub-matrizes de A e de B para memória compartilhada Faz a multiplicação entre duas sub-matrizes Acumula resultado da sub-matriz e transfere para global Menos acesso a memória global Cada elemento da matriz A é lido width/blocksize vezes Cada elemento da matriz B é lido height/blocksize vezes W. Celes Introdução a CUDA 23

38 Exemplo: multiplicação de matrizes // Matrix multiplication kernel called by MatMul() global void MatMulKernel(Matrix A, Matrix B, Matrix C) { // Block row and column int blockrow = blockidx.y; int blockcol = blockidx.x; // Each thread block computes one submatrix Csub of C Matrix Csub = GetSubMatrix(C, blockrow, blockcol); // Each thread computes one element of Csub float Cvalue = 0; // Thread row and column within Csub int row = threadidx.y; int col = threadidx.x; // Loop over all the submatrices of A and B for (int m = 0; m < (A.width / BLOCK SIZE); ++m) { // Get submatrix Asub of A Matrix Asub = GetSubMatrix(A, blockrow, m); // Get submatrix Bsub of B Matrix Bsub = GetSubMatrix(B, m, blockcol); // Shared memory used to store Asub and Bsub respectively shared float As[BLOCK SIZE][BLOCK SIZE]; shared float Bs[BLOCK SIZE][BLOCK SIZE]; W. Celes Introdução a CUDA 24

39 } // Load Asub and Bsub from device memory to shared memory // Each thread loads one element of each submatrix As[row][col] = GetElement(Asub, row, col); Bs[row][col] = GetElement(Bsub, row, col); // Synchronize to make sure the submatrices are loaded // before starting the computation syncthreads(); // Multiply Asub and Bsub together for (int e = 0; e < BLOCK SIZE; ++e) Cvalue += As[row][e] Bs[e][col]; // Synchronize to make sure that the preceding // computation is done before loading two new // submatrices of A and B in the next iteration syncthreads(); } // Write Csub to device memory // Each thread writes one element SetElement(Csub, row, col, Cvalue); Funções do tipo device GetSubMatrix: guarda referência para a sub-matriz na memória global GetElement/SetElement: lê/escreve um elemento na memória global W. Celes Introdução a CUDA 25

40 Memória como fator limitante Recursos de um SM compartilhado por todos os threads Registradores & Memória compartilhada Podem reduzir o número de threads por SM W. Celes Introdução a CUDA 26

41 Memória como fator limitante Recursos de um SM compartilhado por todos os threads Registradores & Memória compartilhada Podem reduzir o número de threads por SM Exemplo de limitação por registrador G80: 8K registradores por SM Número máximo de threads num SM: 768 Então: 8K/728 = 10 registradores por thread W. Celes Introdução a CUDA 26

42 Memória como fator limitante Recursos de um SM compartilhado por todos os threads Registradores & Memória compartilhada Podem reduzir o número de threads por SM Exemplo de limitação por registrador G80: 8K registradores por SM Número máximo de threads num SM: 768 Então: 8K/728 = 10 registradores por thread Se cada thread usa 11 registradores Número de threads por SM é reduzido Redução tem granularidade de bloco Se cada bloco tem 256 threads (um total de 3 blocos por SM) Apenas 2 blocos serão executados por SM: redução de 1/3 W. Celes Introdução a CUDA 26

43 Memória como fator limitante Exemplo de limitação por memória compartilhada W. Celes Introdução a CUDA 27

44 Memória como fator limitante Exemplo de limitação por memória compartilhada G80: 16kB de memória compartilhada por SM Número máximo de blocos por SM: 8 blocos Com 8 blocos, cada bloco pode usar 2kB W. Celes Introdução a CUDA 27

45 Memória como fator limitante Exemplo de limitação por memória compartilhada G80: 16kB de memória compartilhada por SM Número máximo de blocos por SM: 8 blocos Com 8 blocos, cada bloco pode usar 2kB Se cada bloco usa 5kB Apenas 3 blocos podem ser associados a um SM W. Celes Introdução a CUDA 27

46 Memória como fator limitante Exemplo de limitação por memória compartilhada G80: 16kB de memória compartilhada por SM Número máximo de blocos por SM: 8 blocos Com 8 blocos, cada bloco pode usar 2kB Se cada bloco usa 5kB Apenas 3 blocos podem ser associados a um SM No caso da multiplicação de matrizes: bloco de Cada bloco usa = 1kB por matriz Um total de 2kB para as duas matrizes G80: 768 threads por SM 3 blocos por SM Memória sub-utilizada: 3 2 = 6kB W. Celes Introdução a CUDA 27

47 Memória como fator limitante Exemplo de limitação por memória compartilhada G80: 16kB de memória compartilhada por SM Número máximo de blocos por SM: 8 blocos Com 8 blocos, cada bloco pode usar 2kB Se cada bloco usa 5kB Apenas 3 blocos podem ser associados a um SM No caso da multiplicação de matrizes: bloco de Cada bloco usa = 1kB por matriz Um total de 2kB para as duas matrizes G80: 768 threads por SM 3 blocos por SM Memória sub-utilizada: 3 2 = 6kB GT200: 1024 threads por SM 4 blocos por SM Memória também sub-utilizada: 4 2 = 8kB W. Celes Introdução a CUDA 27

48 Memória de Textura Pode ser linear ou CUDA array Referência de textura (declarado como global estática): texture <Type, Dim, ReadMode> ref; Type: 1, 2, 3, ou 4 componentes; tipo inteiro ou real. Dim: dimensão da textura (1, 2, ou 3). ReadMode: ElementType ou NormalizeFloat (mapeia inteiro em [0,1]). W. Celes Introdução a CUDA 28

49 Memória de Textura Pode ser linear ou CUDA array Referência de textura (declarado como global estática): texture <Type, Dim, ReadMode> ref; Type: 1, 2, 3, ou 4 componentes; tipo inteiro ou real. Dim: dimensão da textura (1, 2, ou 3). ReadMode: ElementType ou NormalizeFloat (mapeia inteiro em [0,1]). Parâmetros mutáveis: Coordenada de textura normalizada? [0, N) [0, 1) Modo de endereçamento (clamp ou wrap) Filtro (apenas para textura que retorna valor real) W. Celes Introdução a CUDA 28

50 Inter-operabilidade com APIs Gráficas Permite CUDA ler e escrever em recursos usados pela API gráfica OpenGL Buffer object: em CUDA é mapeado para um ponteiro de memória linear cudagraphicsglregisterbuffer Texture or render buffer: em CUDA é mapeado para um CUDA array cudagraphicsglregisterimage W. Celes Introdução a CUDA 29

51 Arquitetura do Hardware Gráfico CUDA executa num conjunto de multi-processadores (SM stream multiprocessor) Blocos são distribuídos entre os SMs disponíveis Threads de um bloco executam concorrentemente num SM Arquitetura de SM: SIMT (Single Instruction Multiple Threads) W. Celes Introdução a CUDA 30

52 Arquitetura do Hardware Gráfico CUDA executa num conjunto de multi-processadores (SM stream multiprocessor) Blocos são distribuídos entre os SMs disponíveis Threads de um bloco executam concorrentemente num SM Arquitetura de SM: SIMT (Single Instruction Multiple Threads) Um SM executa em paralelo grupo de 32 threads, denominados warps Blocos tem suas threads particionadas em warps, sequencialmente W. Celes Introdução a CUDA 30

53 Arquitetura do Hardware Gráfico CUDA executa num conjunto de multi-processadores (SM stream multiprocessor) Blocos são distribuídos entre os SMs disponíveis Threads de um bloco executam concorrentemente num SM Arquitetura de SM: SIMT (Single Instruction Multiple Threads) Um SM executa em paralelo grupo de 32 threads, denominados warps Blocos tem suas threads particionadas em warps, sequencialmente Um SM tem um número de warps residentes CUDA gerencia chaveamento de um warp para outro Custo do chaveamento é mínimo pois contexto está no chip Chaveamente entre warps tenta esconder latência E.g, enquanto faz-se um acesso a memória fora do chip W. Celes Introdução a CUDA 30

54 Performance Visando melhorar desempenho: Usar um número de threads por bloco que seja múliplo do tamanho do warp (i.e, 32) Minimizar transferências com alta latência Host Device On-chip Off-chip Usar page-locked memory para hospedeiro cudahostalloc, cudafreehost Transferência concorrente com execução de kernels Pode ser alocada no dispositivo Largura de banda pode ser maior Mas... é um recurso escasso. W. Celes Introdução a CUDA 31

55 Performance Acesso a memória do dispositivo Memória global Acessada via pacotes de 32, 64 ou 128 bytes Cada requisição de acesso é agrupada (coalesced) com outras requisições dentro do mesmo warp Agrupamento: Perfis antigos: sequencial e alinhado Perfis novos: alinhado (dentro do mesmo pacote) Memória compartilhada Baixa latência pois é no próprio chip Evitar bank conflict Memória divididas em módulos (banks) Acessos a banks distintos são simultâneos Memória constante Tem cache Memória de textura Tem cache de textura (otimizado para acesso 2D) W. Celes Introdução a CUDA 32

56 Performance Chaveamento de warps visa esconder latência da memória global Não é possível se todos os threads dependem do acesso Computação dependente da carga dos dados Pré-carga pode contornar problema W. Celes Introdução a CUDA 33

57 Performance Chaveamento de warps visa esconder latência da memória global Não é possível se todos os threads dependem do acesso Computação dependente da carga dos dados Pré-carga pode contornar problema Código sem pré-carga loop { loadtile(); syncthreads(); computetile(); syncthreads(); } Carrega, depois computa W. Celes Introdução a CUDA 33

58 Performance Chaveamento de warps visa esconder latência da memória global Não é possível se todos os threads dependem do acesso Computação dependente da carga dos dados Pré-carga pode contornar problema Código sem pré-carga loop { loadtile(); syncthreads(); computetile(); syncthreads(); } Carrega, depois computa Código com pré-carga loadfirsttile(); loop { transfertile(); syncthreads(); loadnexttile(); computetile(); syncthreads(); } Carrega enquanto computa W. Celes Introdução a CUDA 33

59 Performance Processadores com arquitetura SIMT Evitar divergência na linha de execução de threads de um warp Warp agrupam threads sequenciais W. Celes Introdução a CUDA 34

60 Performance Processadores com arquitetura SIMT Evitar divergência na linha de execução de threads de um warp Warp agrupam threads sequenciais Exemplo de REDUÇÃO: soma dos elementos de um vetor Sem coerência entre vizinhos shared float sum[];... int t = threadidx.x; for (int stride = 1; stride < blockdim.x; stride = 2) { syncthreads(); if (t % (2 stride) == 0) sum[t] += sum[t+stride] } W. Celes Introdução a CUDA 34

61 Performance Processadores com arquitetura SIMT Evitar divergência na linha de execução de threads de um warp Warp agrupam threads sequenciais Exemplo de REDUÇÃO: soma dos elementos de um vetor Com coerência entre vizinhos shared float sum[];... int t = threadidx.x; for (int stride = blockdim.x>>1; stride > 0; stride >>= 1) { syncthreads(); if (t < stride) sum[t] += sum[t+stride] } W. Celes Introdução a CUDA 35

62 N-body simulation Ref: GPU Gems 3 Chapter 31. Fast N-Body Simulation with CUDA Sistemas naturalmente quadráticos Exemplo: interação gravitacional entre planetas fij = G m im j r ij r ij 2 r ij W. Celes Introdução a CUDA 36

63 N-body simulation Ref: GPU Gems 3 Chapter 31. Fast N-Body Simulation with CUDA Sistemas naturalmente quadráticos Exemplo: interação gravitacional entre planetas fij = G m im j r ij r ij 2 r ij F i = 1 j N j i fij = Gm i 1 j N j i m j r ij r ij 3 W. Celes Introdução a CUDA 36

64 N-body simulation Ref: GPU Gems 3 Chapter 31. Fast N-Body Simulation with CUDA Sistemas naturalmente quadráticos Exemplo: interação gravitacional entre planetas fij = G m im j r ij r ij 2 r ij F i = 1 j N j i fij = Gm i 1 j N j i m j r ij r ij 3 F i Gm i 1 j N m j r ij, ɛ 2 > 0 ( r ij 2 + ɛ 2 ) 3 2 W. Celes Introdução a CUDA 36

65 Interação entre 2 corpos Cálculo da aceleração no corpo i devido ao corpo j Acumula aceleração no valor passado como parâmetro W. Celes Introdução a CUDA 37

66 Implementação simplista Cada thread calcula a aceleração total de um corpo Cada posição seria lida da memória global N vezes W. Celes Introdução a CUDA 38

67 Divisão em ladrilhos uso da memória compartilhada Cálculo de aceleração entre p corpos de um ladrilho Função assume que posição dos p corpos estão carregados na memória compartilhada Função executada por p threads em paralelo W. Celes Introdução a CUDA 39

68 Cálculo da aceleração total ladrilho a ladrilho Para cada corpo (thread) Para cada bloco de p corpos Carrega posições do ladrilho para memória Acumula aceleração do corpo com o ladrilho W. Celes Introdução a CUDA 40

69 OpenCL Padrão multi-plataforma para processamento paralelo Modelo de memória compartilhada Desenvolvido por Khronos Group, Apple, NVidia Suporte atual: AMD ATI GPU, NVIDIA GPU, x86 CPUs Fortemente baseado em CUDA Gerenciamento de dispositivo mais complexo por ser multi-plataforma Ainda não tão robusto quanto CUDA... W. Celes Introdução a CUDA 41

70 OpenCL Equivalência de conceitos OpenCL Kernel Host NDRange Work group Work item CUDA Kernel Host Grid Block Thread W. Celes Introdução a CUDA 42

71 OpenCL Equivalência de dimensões e índices OpenCL get local id(0) get local size(0) get global id(0) get global size(0) CUDA threadidx.x blockdim.x blockidx.x blockdim.x+threadidx.x griddim.x blockdim.x W. Celes Introdução a CUDA 43

72 OpenCL Equivalência de memórias OpenCL global memory constant memory local memory private memory CUDA global memory constant memory shared memory local memory W. Celes Introdução a CUDA 44

73 OpenCL Exemplo Kernel para processamento simples de imagem: modulate { } kernel void modulate ( int id = get global id(0); c[id] = a[id] b[id]; global const float a, global const float b, global float c) W. Celes Introdução a CUDA 45

74 OpenCL Exemplo Kernel para processamento simples de imagem: modulate { } kernel void modulate ( int id = get global id(0); c[id] = a[id] b[id]; global const float a, global const float b, global float c) Gerenciamento de dispositivos clcreatecontext clgetcontextinfo Application Kernel Kernel Cmd queue Cmd queue OpenCL device clcreatecommandqueue OpenCL device W. Celes Introdução a CUDA 45

75 Referância NVIDIA CUDA Reference Manual, version 3.1 June 2010 Programming Massively Parallel Processors D.B. Kirk, W.W. Hwu, 2010 Course Slides D.B. Kirk, W.W. Hwu ECE 498AL, University of Illinois, 2007 W. Celes Introdução a CUDA 46

Arquitetura e Programação de GPU. Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973

Arquitetura e Programação de GPU. Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973 Arquitetura e Programação de GPU Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973 Agenda Primeiras Placas de Vídeo Primeira GPU Arquitetura da GPU NVIDIA Arquitetura

Leia mais

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013 Programação em Paralelo CUDA N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: CUDA 1 / 23 CUDA "Compute Unified Device Architecture" Parte 2

Leia mais

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Francisco Ribacionka e Ettore Enrico (STI ) USP/STI/InterNuvem [email protected] Março -2016 Processamento de Alto Desempenho

Leia mais

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 DUTRA, Evandro Rogério Fruhling 2 ; VARINI, Andre Luis 2 ; CANAL, Ana Paula 2 1 Trabalho de Iniciação Científica _UNIFRA 2 Ciência

Leia mais

Introdução a CUDA. Esteban Walter Gonzalez Clua. Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center START

Introdução a CUDA. Esteban Walter Gonzalez Clua. Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center START Introdução a CUDA START Esteban Walter Gonzalez Clua Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center 1536 cores Dynamic Parallelism Hyper - Q Pipeline

Leia mais

Eng. Thársis T. P. Souza

Eng. Thársis T. P. Souza Introdução à Computação de Alto Desempenho Utilizando GPU Seminário de Programação em GPGPU Eng. Thársis T. P. Souza [email protected] Instituto de Matemática e Estatística - Universidade de São Paulo Introdução

Leia mais

Programação Paralela em OpenCL

Programação Paralela em OpenCL Programação Paralela em OpenCL César L. B. Silveira [email protected] 19 de novembro de 2010 Introdução Open CompuDng Language (OpenCL) Padrão aberto, livre de royal&es, para programação paralela em ambientes

Leia mais

Programação Paralela em Ambientes Computacionais Heterogêneos com OpenCL

Programação Paralela em Ambientes Computacionais Heterogêneos com OpenCL Programação Paralela em Ambientes Computacionais Heterogêneos com OpenCL César L. B. Silveira Prof. Dr. Luiz G. da Silveira Jr. Prof. Dr. Gerson Geraldo H. Cavalheiro 28 de outubro de 2010 [email protected]

Leia mais

Universidade Federal do ABC. Dissertação de Mestrado. Aderbal de Morais Junior

Universidade Federal do ABC. Dissertação de Mestrado. Aderbal de Morais Junior Universidade Federal do ABC Curso de Pós Graduação em Ciência da Computação Dissertação de Mestrado Aderbal de Morais Junior UMA BIBLIOTECA PARA DESENVOLVIMENTO DE APLICAÇÕES CUDA EM AGLOMERADOS DE GPUS

Leia mais

Edison Gustavo Muenz. Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU

Edison Gustavo Muenz. Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU Edison Gustavo Muenz Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU Florianópolis SC Agosto / 2008 Edison Gustavo Muenz Estudo e implementação de um algoritmo de

Leia mais

Aula 10 - Streams (Parte I)

Aula 10 - Streams (Parte I) Disciplina de TICs 1 - Introdução a Programação em GPGPU Aula 10 - Streams (Parte I) Introdução Até então foi visto como engenho de processamento paralelo massivo de dados nas GPUs pode aumentar assombrosamente

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

Patrício Domingues Dep. Eng. Informática ESTG Instituto Politécnico de Leiria Leiria, Maio Programação Genérica de GPUs

Patrício Domingues Dep. Eng. Informática ESTG Instituto Politécnico de Leiria Leiria, Maio Programação Genérica de GPUs Patrício Domingues Dep. Eng. Informática ESTG Instituto Politécnico de Leiria Leiria, Maio 2012 http://bit.ly/patricio Programação Genérica de GPUs 1 CUDA Teaching Center A ESTG/IPLeiria é um CUDA Teaching

Leia mais

SISTEMAS OPERACIONAIS

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS Processos e Threads Andreza Leite [email protected] Plano de Aula 2 Gerenciamento de Processos Threads Aplicações com múltiplas Threads Concorrência e Compartilhamento

Leia mais

Fabrício Gomes Vilasbôas

Fabrício Gomes Vilasbôas Fabrício Gomes Vilasbôas Apresentação Placas Arquitetura Toolkit e Ferramentas de Debug Pensando em CUDA Programação CUDA Python Programação PyCUDA 1) Grids( padrão Globus) 2) Clusters ( padrão MPI) 3)

Leia mais

Computação Paralela (CUDA)

Computação Paralela (CUDA) Universidade Federal do Amazonas Faculdade de Tecnologia Departamento de Eletrônica e Computação Computação Paralela (CUDA) Hussama Ibrahim [email protected] Notas de Aula Baseado nas Notas de

Leia mais

Processamento Paralelo Utilizando GPU

Processamento Paralelo Utilizando GPU Processamento Paralelo Utilizando GPU Universidade Estadual de Santa Cruz Bruno Pereira dos Santos Dany Sanchez Dominguez Esbel Evalero Orellana Cronograma Breve introdução sobre processamento paralelo

Leia mais

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013 Programação em Paralelo CUDA N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: CUDA 1 / 19 CUDA "Compute Unified Device Architecture" Parte 1

Leia mais

Comparação de eficiência entre OpenCL e CUDA

Comparação de eficiência entre OpenCL e CUDA Aluno: Thiago de Gouveia Nunes Orientador: Prof. Marcel P. Jackowski GPGPU O que é GPGPU? É programação de propósito geral em GPUs. =D GPGPU Existem 2 linguagens populares no mercado para GPGPU, o CUDA

Leia mais

Memória cache. Prof. Francisco Adelton

Memória cache. Prof. Francisco Adelton Memória cache Prof. Francisco Adelton Memória Cache Seu uso visa obter uma velocidade de acesso à memória próxima da velocidade das memórias mais rápidas e, ao mesmo tempo, disponibilizar no sistema uma

Leia mais

5 Unidades de Processamento Gráfico GPUs

5 Unidades de Processamento Gráfico GPUs 5 Unidades de Processamento Gráfico GPUs As GPUs são processadores maciçamente paralelos, com múltiplos elementos de processamento, tipicamente utilizadas como aceleradores de computação. Elas fornecem

Leia mais

Computação Heterogênea Programação paralela, clusters e GPUs

Computação Heterogênea Programação paralela, clusters e GPUs Computação Heterogênea Programação paralela, clusters e GPUs Profa. Dra. Denise Stringhini (ICT- Unifesp) Primeiro Encontro do Khronos Chapters Brasil Belo Horizonte, 20/09/2013 Conteúdo Computação heterogênea:

Leia mais

Computação de alto desempenho utilizando CUDA

Computação de alto desempenho utilizando CUDA Computação de alto desempenho utilizando CUDA Bruno Cardoso Lopes, Rodolfo Jardim de Azevedo 1 Instituto de Computação Universidade Estadual de Campinas (Unicamp) Caixa Postal 6176 13083-970 Campinas SP

Leia mais

Gerência de Memória. Paginação

Gerência de Memória. Paginação Gerência de Memória Paginação Endereçamento Virtual (1) O programa usa endereços virtuais É necessário HW para traduzir cada endereço virtual em endereço físico MMU: Memory Management Unit Normalmente

Leia mais

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Esbel Tomás Evalero Orellana Universidade Estadual de Santa Cruz Roteiro Breve introdução

Leia mais

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries

Estrutura Interna do KernelUNIX Sistema O. Estrutura Interna de Arquivos (1) Estrutura Seqüência. User application. Standard Unix libraries Sistemas de Arquivos (Aula 23) Funções Profa. Gerência Sistema de um processos SO Patrícia D. CostaLPRM/DI/UFES de de de Proteção memória I/O Arquivos Necessidade 2 Sistemas Operacionais 2008/1 Grandes

Leia mais

Gerenciamento de memória

Gerenciamento de memória Sistemas Operacionais Gerenciamento de memória Capítulos 7 Operating Systems: Internals and Design Principles W. Stallings O problema Em um ambiente multiprogramado, é necessário: subdividir a memória

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores UNIVERSIDADE FEDERAL RURAL DO DO SEMI-ÁRIDO DEPARTAMENTO DEPARTAMENTO DE DE CIÊNCIAS CIÊNCIAS EXATAS EXATAS E E NATURAIS NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO CURSO DE CIÊNCIA DA COMPUTAÇÃO Arquitetura

Leia mais

Sistemas Operacionais

Sistemas Operacionais BCC264 Sistemas Operacionais Estruturas de Sistemas Computacionais Prof. Charles Garrocho Arquitetura geral de Sistemas de Computação atuais Operação de sistemas de computação CPU e dispositivos de E/S

Leia mais

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores Introdução à Programação Armazenamento de Grande Quantidade de Informação Usando Vetores Armazenando Grande Quantidade de Informação Como armazenar tanta informação? Vetores! 2 Tópicos da Aula Hoje, aprenderemos

Leia mais

armazenamento (escrita ou gravação (write)) recuperação (leitura (read))

armazenamento (escrita ou gravação (write)) recuperação (leitura (read)) Memória Em um sistema de computação temos a UCP se comunicando com a memória e os dispositivos de E/S. Podemos fazer um paralelo do acesso à memória com um carteiro entregando cartas ou um acesso à biblioteca.

Leia mais

Capítulo 8 Arquitetura de Computadores Paralelos

Capítulo 8 Arquitetura de Computadores Paralelos Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da

Leia mais

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção Sistemas de Arquivos Funções de um SO Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção 2 Sistemas Operacionais Necessidade de Armazenamento Grandes quantidades

Leia mais

Alcides Carneiro de Araújo Neto. Comparação Sequência-Família em GPU

Alcides Carneiro de Araújo Neto. Comparação Sequência-Família em GPU Alcides Carneiro de Araújo Neto Comparação Sequência-Família em GPU Campo Grande MS 2014 Alcides Carneiro de Araújo Neto Comparação Sequência-Família em GPU Dissertação de Mestrado apresentada à Faculdade

Leia mais

LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU

LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU CURITIBA 2009 LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU Trabalho de Conclusão de Curso apresentado como requisito

Leia mais

Capítulo 4 Gerenciamento de Memória

Capítulo 4 Gerenciamento de Memória Capítulo 4 Gerenciamento de Memória 4.1 Gerenciamento básico de memória 4.2 Troca de processos 4.3 Memória virtual 4.4 Algoritmos de substituição de páginas 4.5 Modelagem de algoritmos de substituição

Leia mais

Tecnologias de Construção de Memórias e Memórias RAM, entrelaçada e Virtual

Tecnologias de Construção de Memórias e Memórias RAM, entrelaçada e Virtual Tecnologias de Construção de Memórias e Memórias RAM, entrelaçada e Virtual Arquiteturas para Alto Desmpenho Prof. [email protected] Sala 110 Prédio da Computação www.comp.ita.br/~pauloac Tempos de Acesso

Leia mais

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos Capítulo 6 Gerenciamento de Arquivos 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos 1 Armazenamento de longo prazo 1. Deve guardar grandes volumes de dados. 2. Informação armazenada

Leia mais

ANÁLISE DE DESEMPENHO DA PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PRIMOS UTILIZANDO PTHREAD E OPENMP 1

ANÁLISE DE DESEMPENHO DA PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PRIMOS UTILIZANDO PTHREAD E OPENMP 1 ANÁLISE DE DESEMPENHO DA PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PRIMOS UTILIZANDO PTHREAD E OPENMP 1 Francisco Berti Da Cruz 2, Cleber Cristiano Sartorio 3, Edson Luiz Padoin 4, Emilio Hoffmann 5. 1 Trabalho

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Parte IV Introdução à Programação em C++ (Continuação) Relembrando da Última Aula... Funções Classes de armazenamento

Leia mais

Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas

Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas Claudio André [email protected] Motivação Seu computador

Leia mais

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

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios CURSO - TADS TURMA 2008.1 2 PERÍODO 3 MÓDULO AVALIAÇÃO MP2 DATA 02/10/2008 SISTEMAS OPERACIONAIS 2008/2 GABARITO COMENTADO SISTEMAS OPERACIONAIS PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida,

Leia mais

Modos de entrada/saída

Modos de entrada/saída Arquitectura de Computadores II Engenharia Informática (11545) Tecnologias e Sistemas de Informação (6621) Modos de entrada/saída Fonte: Arquitectura de Computadores, José Delgado, IST, 2004 Nuno Pombo

Leia mais

CUDA. José Ricardo da Silva Jr.

CUDA. José Ricardo da Silva Jr. CUDA José Ricardo da Silva Jr. Medialab Ins1tuto de Computação Universidade Federal Fluminense CUDA Research Center & CUDA Teaching Center Centro de excelência da NVIDIA desde julho 2012 Perfil Bacharel

Leia mais

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado Memória Armazenamento Sistema de Arquivos 1 Hierarquia de Memórias 2 Partes físicas associadas à memória Memória RAM Memória ROM Cache

Leia mais

O Problema do Fractal de Mandelbrot como Comparativo de Arquiteturas de Memória Compartilhada GPU vs OpenMP

O Problema do Fractal de Mandelbrot como Comparativo de Arquiteturas de Memória Compartilhada GPU vs OpenMP O Problema do Fractal de Mandelbrot como Comparativo de Arquiteturas de Memória Compartilhada GPU vs OpenMP Bruno P. dos Santos, Dany S. Dominguez, Esbel V. Orellana Departamento de Ciências Exatas e Tecnológicas

Leia mais

Sistemas Operacionais Arquivos. Carlos Ferraz ([email protected]) Jorge Cavalcanti Fonsêca ([email protected])

Sistemas Operacionais Arquivos. Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Sistemas Operacionais Arquivos Carlos Ferraz ([email protected]) Jorge Cavalcanti Fonsêca ([email protected]) Copyright Carlos Ferraz Cin/UFPE Implementação do Sistema de Arquivos Sistemas de arquivos são

Leia mais

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins Organização de Computadores 1 1 - INTRODUÇÃO Prof. Luiz Gustavo A. Martins Arquitetura Define os elementos que impactuam diretamente na execução lógica do programa. Corresponde aos atributos visíveis veis

Leia mais

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.

Leia mais

Memória Cache. Prof. Leonardo Barreto Campos 1

Memória Cache. Prof. Leonardo Barreto Campos 1 Memória Cache Prof. Leonardo Barreto Campos 1 Sumário Introdução; Projeto de Memórias Cache; Tamanho; Função de Mapeamento; Política de Escrita; Tamanho da Linha; Número de Memórias Cache; Bibliografia.

Leia mais

Introdução à Computação Heterogênea

Introdução à Computação Heterogênea Capítulo 7 Introdução à Computação Heterogênea Denise Stringhini, Rogério A. Gonçalves, Alfredo Goldman Resumo Diversos tipos de coprocessadores tem sido utilizados a fim de acelerar a execução de aplicações

Leia mais

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação Linguagem C: variáveis, operadores, entrada/saída Prof. Críston Algoritmos e Programação Linguagem C Linguagem de uso geral (qualquer tipo de aplicação) Uma das linguagens mais utilizadas Foi utilizada

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (2.0) (a) (Verdade/Falso) A comunicação entre processos consiste em transmitir uma mensagem entre

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Curso de Sistemas de Informação Karla Donato Fook [email protected] DESU / DAI 2016 Linguagem de Programação C 2 1 Linguagem de Programação C Os programas em C consistem em

Leia mais

Memória primária Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Memória primária Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h Memória primária Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Sumário Bits Endereços de memória Ordenação de bytes Códigos de correção de erro Memória cachê Empacotamento e tipos de memória

Leia mais

Sistemas Operacionais I

Sistemas Operacionais I UFRJ IM - DCC Sistemas Operacionais I Unidade II - Threads 24/04/2014 Prof. Valeria M. Bastos 1 ORGANIZAÇÃO DA UNIDADE Threads Processos Threads Conceituação Descrição e Imagem de uma Thread Tipos de thread

Leia mais

Sistema de Memórias de Computadores

Sistema de Memórias de Computadores Sistema de Memórias de Computadores Uma memória é um dispositivo que permite um computador armazenar dados temporariamente ou permanentemente. Sabemos que todos os computadores possuem memória. Mas quando

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Introdução à gestão de memória Programação de Sistemas Gestão de memória : 1/16 Introdução (1) A memória central de um computador é escassa. [1981] IBM PC lançado com 64KB na motherboard,

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler

Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler Emilio Hoffmann, Bruno M. Muenchen, Taís T. Siqueira, Edson L. Padoin e Philippe O. A. Navaux Universidade Regional do Noroeste

Leia mais

Gerenciamento de memória

Gerenciamento de memória Na memória principal ficam todos os programas e os dados que serão executados pelo processador. Possui menor capacidade e custo maior. S.O buscam minimizar a ocupação da memória e otimizar sua utilização.

Leia mais

Point Based Graphics e Aplicações em Jogos

Point Based Graphics e Aplicações em Jogos Point Based Graphics e Aplicações em Jogos Luciano Silva Laboratório de Processamento Gráfico e Mídias Digitais Faculdade de Computação e Informática, Universidade Presbiteriana Mackenzie Abstract Point

Leia mais

Projeto 1 - Bootloader

Projeto 1 - Bootloader Projeto 1 - Bootloader IF677 - Infra-Estrutura de Software Centro de Informática - UFPE Autor: Thyago Porpino (tnp) Objetivos Desmistificar o processo de inicialização de um computador. Entender como um

Leia mais

Programação com Posix Threads

Programação com Posix Threads 9 Programação com Posix Threads Revisão: Data: 11-03-2016 Cap. 9 1/6 Programação multi-threaded com Pthreads 9.1. O que é uma thread? Um processo represente a execução pelo sistema operativo dum programa.

Leia mais

Adino Américo Heimlich Almeida

Adino Américo Heimlich Almeida DESENVOLVIMENTO DE ALGORITMOS PARALELOS BASEADOS EM GPU PARA SOLUÇÃO DE PROBLEMAS NA ÁREA NUCLEAR Adino Américo Heimlich Almeida DISSERTAÇÃO SUBMETIDA AO PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA E TECNOLOGIA

Leia mais

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015 Sistemas de ficheiros: implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Descrever algunsdetalhes daimplementação deumsistema de ficheiros Discutir algoritmos

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Sistemas de Ficheiros. 1. Ficheiros 2. Directórios 3. Implementação de sistemas de ficheiros 4. Exemplos de sistemas de ficheiros

Sistemas de Ficheiros. 1. Ficheiros 2. Directórios 3. Implementação de sistemas de ficheiros 4. Exemplos de sistemas de ficheiros Sistemas de Ficheiros 1. Ficheiros 2. Directórios 3. Implementação de sistemas de ficheiros 4. Exemplos de sistemas de ficheiros Organização de um Sistema Operativo System Call Handler File System 1...

Leia mais

INSTITUTO MILITAR DE ENGENHARIA EDUARDO CAMARGO

INSTITUTO MILITAR DE ENGENHARIA EDUARDO CAMARGO MINISTÉRIO DA DEFESA EXÉRCITO BRASILEIRO DEPARTAMENTO DE CIÊNCIA E TECNOLOGIA INSTITUTO MILITAR DE ENGENHARIA CURSO DE MESTRADO EM SISTEMAS E COMPUTAÇÃO EDUARDO CAMARGO UMA FERRAMENTA DE VISUALIZAÇÃO CIENTÍFICA

Leia mais

Aspectos de Sistemas Operativos

Aspectos de Sistemas Operativos Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho Serviços de um sistema operativo Interface com o utilizador Chamadas ao sistema Programas de sistema

Leia mais

Capítulo 6 Sistemas de Arquivos

Capítulo 6 Sistemas de Arquivos Capítulo 6 Sistemas de Arquivos 6.1 Arquivos 6.2 Diretórios 6.3 Implementação do sistema de arquivos 6.4 Exemplos de sistemas de arquivos 1 Armazenamento da Informação a Longo Prazo 1. Deve ser possível

Leia mais

MEMÓRIA M.1 - HIERARQUIA DE MEMÓRIAS NUM COMPUTADOR DIGITAL

MEMÓRIA M.1 - HIERARQUIA DE MEMÓRIAS NUM COMPUTADOR DIGITAL MEMÓRIA M.1 - HIERARQUIA DE MEMÓRIAS NUM COMPUTADOR DIGITAL Quando se caminha no sentido da memória secundária encontramos memórias com maior capacidade, maior tempo de acesso e mais baixo custo/bit. Fig

Leia mais

Introdução à Engenharia ENG1000

Introdução à Engenharia ENG1000 Introdução à Engenharia ENG1000 Aula 14 Vetores, Matrizes e Tabelas 2016.1 Prof. Augusto Baffa Introdução Até agora nós temos usado variáveis simples para armazenar valores usados

Leia mais

Introdução à Programação com Classes em C++

Introdução à Programação com Classes em C++ 1 FEUP/LEEC/AED/2001-2002 Introdução à Programação com Classes em C++ João Pascoal Faria http://www.fe.up.pt/~jpf FEUP/LEEC/AED/ 2000-2001 Conceito de classe em C++ 2 Classe em sentido lato: tipo de dados

Leia mais

Roteiro. MC-102 Aula 01. Hardware e dispositivos. O que é um computador? Primeiro Semestre de 2008 3 A linguagem C

Roteiro. MC-102 Aula 01. Hardware e dispositivos. O que é um computador? Primeiro Semestre de 2008 3 A linguagem C Roteiro Introdução à Programação de Computadores 1 Instituto de Computação Unicamp 2 Primeiro Semestre de 2008 3 O que é um computador? Computador: o que computa, calculador, calculista. (dicionário Houaiss).

Leia mais

Gerenciamento Básico B de Memória Aula 07

Gerenciamento Básico B de Memória Aula 07 BC1518-Sistemas Operacionais Gerenciamento Básico B de Memória Aula 07 Prof. Marcelo Z. do Nascimento [email protected] Roteiro Introdução Espaço de Endereçamento Lógico vs. Físico Estratégias

Leia mais

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo [email protected].

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu. Programação Estruturada Linguagem C Fundamentos da Linguagem Prof. Luis Nícolas de Amorim Trigo [email protected] Sumário Estrutura Básica Bibliotecas Básicas Tipos de Dados Básicos Variáveis/Declaração

Leia mais

O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador.

O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador. Resumo 01 O que é um processador? O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador. Os processadores atualmente são encapsulados

Leia mais

Até o final de década de 70, os sistemas operacionais suportavam apenas processos com um único thread;

Até o final de década de 70, os sistemas operacionais suportavam apenas processos com um único thread; CAPÍTULO VI THREADS 6.1 INTRODUÇÃO Até o final de década de 70, os sistemas operacionais suportavam apenas processos com um único thread; O sistema operacional Toth, em 1979, foi o primeiro a implementar

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 05 Cadeias de Caracteres Edirlei Soares de Lima Caracteres Caracteres são representados através de códigos numéricos. Tabela de códigos: Define correspondência

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Arquitetura de Sistemas Operacionais

Arquitetura de Sistemas Operacionais rquitetura de Sistemas Operacionais Francis Berenger Machado Luiz Paulo Maia Complementado por Sidney Lucena (Prof. UNIRIO) Capítulo 11 Sistema de rquivos 11/1 Organização de rquivos Um arquivo é constituído

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

Leia mais