Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada V3D

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

Download "Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada V3D"

Transcrição

1 Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada César Leonardo Blum Silveira Prof. Dr. Luiz Gonzaga da Silveira Jr. V3D 24 de maio de 2010

2 Soluções em visualização e visão computacional contato@v3d.com.br

3 Introdução Motivação Breve ilustração Arquitetura OpenCL Linguagem OpenCL C API OpenCL OpenCL na prática Exemplos em Realidade Virtual e Aumentada Otimização com OpenCL Considerações finais

4 Introdução OpenCL TM (Open Computing Language) é um padrão aberto para programação em ambientes computacionais heterogêneos Escrita de código para execução em CPUs, GPUs, DSPs e outros dispositivos Criado pela Apple, entregue ao Khronos Group para padronização Mantido por conjunto de empresas da área Aberto, royalty-free

5 Introdução Padrão descreve Arquitetura Camada de plataforma Runtime Linguagem API

6 Introdução Objetivos deste mini-curso Apresentar a arquitetura OpenCL Introduzir conceitos de programação em OpenCL C Exemplificar aplicações em Realidade Virtual e Aumentada Discutir aspectos de otimização

7 Motivação CPUs Ganho de desempenho com o aumento do clock Limite atingido Solução: adicionar mais cores Ganho de desempenho deixou de ser gratuito Técnicas e ferramentas para programação paralela

8 Motivação GPUs Processadores paralelos no pipeline gráfico Shaders Toolkits de acesso aos recursos de processamento CUDA (NVIDIA) Streaming SDK (ATI)

9 Motivação Problemas CPUs e GPUs programadas de formas distintas Acesso ao hardware gráfico diferente para cada fabricante Solução: OpenCL Programação baseada na escrita de kernels Código a ser executado por unidade da solução Distribuição das tarefas é abstraída

10 Breve ilustração Código sequencial void ArrayDiff(const int* a, const int* b, int* c, int n) { for (int i = 0; i < n; ++i) { c[i] = a[i] - b[i]; } }

11 Breve ilustração Kernel OpenCL kernel void ArrayDiff( global const int* a, global const int* b, global int* c) { int id = get_global_id(0); c[id] = a[id] - b[id]; }

12 Arquitetura OpenCL Abstração de baixo-nível do hardware Diversos conceitos Inspirados no hardware gráfico Camada de plataforma e runtime

13 Arquitetura OpenCL Aplicação Kernels API OpenCL C OpenCL Platform Layer OpenCL runtime Driver Hardware (GPU,CPU,...) Figura: Camadas de uma aplicação OpenCL

14 Arquitetura OpenCL Modelo de plataforma Device Dispositivo que suporta OpenCL CPU, GPU, DSP, etc. Possui uma ou mais compute units Possuem um ou mais processing elements

15 Arquitetura OpenCL Modelo de plataforma Device Computer Unit Computer Unit Processing Element Memória local Processing Element Memória local Memória privada Memória privada Memória global e memória constante Device Figura: Modelos de plataforma e de memória da arquitetura OpenCL

16 Arquitetura OpenCL Modelo de plataforma Host Sistema que agrega vários devices Coordena Inicialização Compilação de kernels Distribuição da computação Recuperação de resultados

17 Arquitetura OpenCL Kernel Também kernel function ou compute kernel Instruções a serem executadas em um device Compilados a partir de programas OpenCL C

18 Arquitura OpenCL Modelo de execução Work-item Instância de um kernel Associado a processing element Work-group Grupo de work-items Associado a compute unit

19 Arquitura OpenCL Modelo de execução NDRange (N-dimensional range) Espaço de índices Até 3 dimensões Work-items recebem índices globais e locais em cada dimensão Work-groups também recebem um índice em cada dimensão

20 Arquitetura OpenCL Modelo de execução Figura: Exemplo de espaço de índices de duas dimensões

21 Arquitetura OpenCL Modelo de programação Data parallel: um kernel, múltiplos work-items Task-parallel: um kernel, um work-item

22 Arquitetura OpenCL Program object Encapsula o código de um ou mais kernels e outras funções Criado a partir do código-fonte ou binário pré-compilado

23 Arquitetura OpenCL Memory object Alocação e acesso à memória dos devices Entrada e saída de dados em kernels Duas categorias: buffers e images

24 Arquitetura OpenCL Buffer object Armazenamento sequencial Qualquer tipo de dado Acessível por ponteiro

25 Arquitetura OpenCL Image object Textura Ponto-flutuante ou inteiro vetorial Acessível através de samplers Não suportado por todas as implementações

26 Arquitetura OpenCL Command queue Fila de comandos para um device I/O, execução de kernels, sincronização Comandos iniciados em ordem Término fora de ordem Event objects permitem aguardar pelo término de comandos específicos

27 Arquitetura OpenCL Context Ambiente de execução para kernels Gerencia devices, program objects, kernels, memory objects e command queues

28 Arquitetura OpenCL Modelo de memória Memória global Compartilhada por todos os work-items Escrita e leitura Memória local Compartilhada em um work-group Escrita e leitura

29 Arquitetura OpenCL Modelo de memória Memória privada Restrita a cada work-item Escrita e leitura Memória constante Compartilhada por todos os work-items Somente leitura

30 Arquitetura OpenCL Modelo de memória Device Computer Unit Computer Unit Processing Element Memória local Processing Element Memória local Memória privada Memória privada Memória global e memória constante Device Figura: Modelos de plataforma e de memória da arquitetura OpenCL

31 Arquitetura OpenCL Modelo de memória Desempenho Na prática, latências variam para cada categoria Dependente de fabricante

32 Arquitetura OpenCL Modelo de memória Consistência de memória Garantia da leitura correta da memória após escrita Work-item: consistência de escrita e leitura Lê último valor escrito Work-group: consistência após sincronização Não há sincronização entre work-groups Impossível garantir consistência

33 Linguagem OpenCL C Baseada na especificação ISO C99 Extensões e restrições

34 Linguagem OpenCL C Tipos de dados escalares Vazio: void Booleano: bool Inteiros: [u]char, [u]short, [u]int, [u]long Ponto-flutuante: float, half Outros: size_t, image2d_t, image3d_t, sampler_t, event_t

35 Linguagem OpenCL C Tipos de dados vetoriais Representação de vetores <tipo escalar><# de componentes> Exemplos: int2, float4, long8 Não são permitidos: bool, half, size_t e void

36 Linguagem OpenCL C Tipos de dados vetoriais Permitem 1, 2, 4, 8 ou 16 componentes Acesso: x, y, z, w Ou: <variável>.s[0-f]* Exemplos: vec.s05af, vec.s0123, vec.s22, vec.se0 Atribuições entre vetores de dimensões diferentes float2 v = (float2)(1.0f,2.0f); float4 u = v.s0011; float4 s = (float4)(10.0f,20.0f,30.0f,40.0f); float2 t = s.xy;

37 Linguagem OpenCL C Tipos de dados definidos pelo usuário struct union

38 Linguagem OpenCL C Qualificador kernel Definição de kernels kernel void f(...) {... }

39 Linguagem OpenCL C Qualificadores de espaço de endereçamento global, local, private e constant private assumido por default Exemplos global int* arr global const float * data local uchar * ldata

40 Linguagem OpenCL C Qualificadores de espaço de endereçamento - Restrições Argumentos ponteiros de um kernel devem ser global, local ou const Legal kernel void f( global int* in, global int* out) {... } Ilegal kernel void f(int* in, int* out) {... }

41 Linguagem OpenCL C Qualificadores de espaço de endereçamento - Restrições Somente são permitidas atribuições entre ponteiros de um mesmo espaço de endereçamento Legal kernel void f( global int* in, global int* out) { global int* pin = in;... } Ilegal kernel void f( global int* in, global int* out) { local int* pin = in;... }

42 Linguagem OpenCL C Operadores Mesmos operadores da linguagem C99 Aritméticos binários: +, -, *, /, % Aritméticos unários: +, -, ++, - Relacionais: >, >=, <, <=, ==,!= Lógicos binários: &&, Lógicos unários:! Bit-a-bit: &,, ^, ~, <<, >> Atribuição: =, +=, -=, *=, /=, %=, &=, =, ^=, >>=

43 Linguagem OpenCL C Operadores - Semântica Operações entre escalares e vetores Retornam vetores com operação aplicada sobre cada componente Exemplo // (int4)(3, 4, 5, 6) int4 v = (int4)(1, 2, 3, 4) + 2; Escalar deve ser do mesmo tipo ou de menor tamanho que o vetor // Erro, tipo de n maior que short long n = 10; short4 v = (short4)(1, 2, 3, 4) + n;

44 Linguagem OpenCL C Operadores - Semântica Operações unárias sobre vetores Retornam vetores com operação aplicada sobre cada componente Exemplo // (char4)(-1, -2, -3, -4) char4 v = -(char4)(1, 2, 3, 4); // (uchar2)(0xff, 0x00) uchar4 v = ~(uchar4)(0x00, 0xff);

45 Linguagem OpenCL C Operadores - Semântica Operações entre vetores Vetores devem ter o mesmo número de componentes Exemplo float2 v = (float2)(2.0f, 4.0f); float2 u = (float2)(3.0f, 5.0f); float4 a = (float4)(1.0f, 1.0f, 1.0f, 1.0f); // (float2)(6.0f, 20.0f) float2 t = v * u; // Erro, vetores de tamanhos diferentes! float4 r = a + t;

46 Linguagem OpenCL C Operadores - Semântica Operações lógicas e relacionais com operando vetorial Retornam vetor do mesmo tipo com operação aplicada componente-a-componente Resultado 0 é falso, -1 é verdadeiro Exemplo // (int4)(-1, 0, 0, 0) int4 v = 2 > (int2)(1, 3, 5, 7); // (short2)(-1, 0) short2 u = (short2)(1, 10) < (5, 7);

47 Linguagem OpenCL C Restrições Não são permitidos Ponteiros para funções Escrita em ponteiros ou arrays cujo tipo tenha tamanho inferior a 32 bits // Escritas invalidas char arr[10]; arrc[0] = a ; char* p = arr; p[1] = b ; Argumentos para kernels que sejam ponteiros para ponteiros // Ilegal kernel void f( global int** a) {... }

48 Linguagem OpenCL C Restrições Não são suportados Recursão Funções e macros com número variável de argumentos Qualificadores extern, static e auto structs e unions com elementos em espaços de endereçamento distintos Mesmo qualificador para todos elementos

49 API OpenCL API de suporte para kernels Auxílio para o programador

50 API OpenCL Categorias de funções Funções de identificação Funções matemáticas Raíz quadrada, potência, trignométricas, arredondamento, produtos vetorial e escalar, mínimo, máximo, etc. Funções utilitárias Clamping, conversões Funções de acesso a image objects Funções de Sincronização

51 API OpenCL Funções de identificação size_t get_global_id(uint dimindx) size_t get_local_id(uint dimindx) size_t get_group_id(uint dimindx) Retornam posição no espaço de índices na dimensão informada

52 API OpenCL Funções de identificação size_t get_global_size(uint dimindx) size_t get_local_size(uint dimindx) Retornam tamanho global e local (work-group) da dimensão informada

53 API OpenCL Funções de identificação size_t get_num_groups() Retorna número de work-groups em execução uint get_work_dim() Retorna número de dimensões do espaço de índices

54 API OpenCL Sincronização void barrier(cl_mem_fence_flags flags) Barreira de sincronização Execução só continua após todos work-items de um work-group atingirem a barreira Barreira garante consistência de memória Flags CLK_LOCAL_MEM_FENCE CLK_GLOBAL_MEM_FENCE

55 API OpenCL Sincronização - Exemplo kernel void akernel( global float* in, global float* out) { // Indice global e local do work-item int gid = get_global_id(0); int lid = get_local_id(0); int lsize = get_local_size(0); // Array compartilhado pelo work-group local float a[lsize];

56 API OpenCL Sincronização - Exemplo // Carrega dados no array local a[lid] = in[gid]; // Consistencia no array local barrier(clk_local_mem_fence); // Escreve saida na memoria global out[gid] = a[(lid + 4) \% lsize] * 2; // Consistencia na memoria global barrier(clk_global_mem_fence); }...

57 API OpenCL Sincronização - Exemplo Work-items lêem dados escritos por outros work-items do mesmo work-group Sem barriers, valores lidos na sequência podem ser incorretos

58 OpenCL na prática Código do host Exemplo: diferença entre arrays

59 OpenCL na prática Cabeçalho Mac OS X #include <OpenCL/opencl.h> Demais sistemas #include <CL/opencl.h>

60 OpenCL na prática Código-fonte do kernel const char* source = " kernel void ArrayDiff( \ global const int* a, \ global const int* b, \ global int* c) \ { \ int id = get_global_id(0); \ c[id] = a[id] - b[id]; \ }";

61 OpenCL na prática Obtenção do device cl_platform_id platformid; clgetplatformids( 1, // No. de IDs desejados &platformid, // Onde armazenar IDs NULL // No. de IDs retornados ); cl_device_id deviceid; clgetdeviceids( platformid, // Platform ID CL_DEVICE_TYPE_GPU, // Tipo de dispositivo 1, // No. de IDs desejados &deviceid, // Onde armazenar IDs NULL // No. de IDs encontrados );

62 OpenCL na prática Obtenção do device - alternativa cl_device_id deviceid; clgetdeviceids( NULL, // Platform ID CL_DEVICE_TYPE_GPU, // Tipo de dispositivo 1, // No. de IDs desejados &deviceid, // Onde armazenar IDs NULL // No. de IDs encontrados ); Não funciona em todas as implementações!

63 OpenCL na prática Criação do context cl_context context = clcreatecontext( 0, // Propriedades do context 1, // No. de devices no context &deviceid, // Array de IDs de devices NULL, // Funcao de notificacao NULL, // Dado p/ funcao de notificacao NULL, // Codigo de erro );

64 OpenCL na prática Criação da command queue cl_command_queue queue = clcreatecommandqueue( context, deviceid, 0, // Propriedades da command queue NULL // Codigo de erro );

65 OpenCL na prática Criação do program object cl_program program = clcreateprogramwithsource( context, 1, // No. de strings no array &source, // Array de strings do fonte NULL, // Array de tamanhos de strings NULL, // Codigo de erro );

66 OpenCL na prática Compilação do program object clbuildprogram( program, 0, // No. de devices p/ os quais compilar // 0 p/ todos devices do context NULL, // IDs dos devices; NULL p/ todos NULL, // Opcoes do compilador NULL, // Funcao de notificacao NULL // Dados p/ funcao de notificacao );

67 OpenCL na prática Criação do kernel cl_kernel kernel = clcreatekernel( program, "ArrayDiff", // Nome da funcao kernel NULL // Codigo de erro );

68 OpenCL na prática Criação dos buffer objects #define ARRAY_LENGTH #define BUFSIZE (ARRAY_LENGTH * sizeof(int)) cl_mem bufa = clcreatebuffer( context, CL_MEM_READ_WRITE, // Flags BUFSIZE, // Tamanho NULL, // Dados iniciais NULL // Codigo de erro ); Outras flags CL_MEM_READ_ONLY CL_MEM_WRITE_ONLY

69 OpenCL na prática Criação dos buffer objects cl_mem bufb = clcreatebuffer(...); cl_mem bufc = clcreatebuffer(...);

70 OpenCL na prática Transferência das entradas int* hosta =...; int* hostb =...; clenqueuewritebuffer( queue, bufa, CL_TRUE, // Bloquear ate terminar 0, // Offset BUFSIZE, // Tamanho hosta, // Ponteiro para dados no host 0, // No. de eventos a aguardar NULL, // Lista de eventos NULL // Evento retornado );

71 OpenCL na prática Transferência das entradas clenqueuewritebuffer(... bufb,... hostb,... );

72 OpenCL na prática Configuração dos argumentos do kernel clsetkernelarg( kernel, 0, // Posicao sizeof(cl_mem), // Tamanho &bufa // Ponteiro p/ dados no host ); clsetkernelarg(kernel, 1, sizeof(cl_mem), &bufb); clsetkernelarg(kernel, 2, sizeof(cl_mem), &bufc);

73 OpenCL na prática Argumentos para kernels - outros tipos Kernel exemplo kernel void f( global int* a, int n) {... } Configuração dos argumentos no host cl_kernel k; cl_mem buf; int n; clsetkernelarg(k, 0, sizeof(cl_mem), &bufa); clsetkernelarg(k, 1, sizeof(int), &n);

74 OpenCL na prática Execução do kernel size_t globalsize[1] = { ARRAY_LENGTH }; cl_event event; clenqueuendrangekernel( queue, kernel, 1, // No. de dimensoes NULL, // Offset indices (nao suportado) globalsize, // Dimensoes do espaco de indices NULL, // Dimensoes dos work-groups 0, // No. de eventos a aguardar NULL, // Lista de eventos &event // Evento retornado );

75 OpenCL na prática Execução do kernel Dimensões do work-group devem dividir inteiramente dimensões do espaço de índices

76 OpenCL na prática Sincronização clwaitforevents( 1, // No. de eventos &event // Array de eventos );

77 OpenCL na prática Sincronização - alternativa Execução do kernel clenqueuendrangekernel(... NULL // Evento retornado ); Sincronização // Aguarda termino de todos os comandos clfinish(queue);

78 OpenCL na prática Leitura dos resultados clenqueuereadbuffer( queue, bufc, CL_TRUE, // Bloquear host ate terminar 0, // Offset BUFSIZE, // Tamanho hostc, // Onde armazenar dados 0, // No. de eventos a aguardar NULL, // Eventos NULL // Evento retornado );

79 OpenCL na prática Liberação de recursos clreleasememobject(bufc); clreleasememobject(bufb); clreleasememobject(bufa); clreleasekernel(kernel); clreleaseprogram(program); clreleasecommandqueue(queue); clreleasecontext(context);

80 Exemplos em Realidade Virtual e Aumentada Foco de OpenCL está no desempenho da computação Auxílio em Algoritmos de base Simulações Processamento de dados diversos Offload de parte da computação

81 Exemplos em Realidade Virtual e Aumentada Realidade Virtual OpenCL interopera com OpenGL Processamento de dados para visualização Exemplo: animação de malha 3D

82 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Definir propriedades para um context para interoperação Linux cl_context_properties props[] = { CL_GL_CONTEXT_KHR, (cl_context_properties)glxgetcurrentcontext(), CL_GLX_DISPLAY_KHR, (cl_context_properties)glxgetcurrentdisplay(), CL_CONTEXT_PLATFORM, (cl_context_properties)cpplatform, 0 };

83 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Windows cl_context_properties props[] = { CL_GL_CONTEXT_KHR, (cl_context_properties)wglgetcurrentcontext(), CL_WGL_HDC_KHR, (cl_context_properties)wglgetcurrentdc(), CL_CONTEXT_PLATFORM, (cl_context_properties)cpplatform, 0 };

84 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Mac OS X CGLContextObj kcglcontext = CGLGetCurrentContext(); CGLShareGroupObj kcglsharegroup = CGLGetShareGroup(kCGLContext); cl_context_properties props[] = { CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kcglsharegroup, 0 };

85 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Criar o context cl_device_id deviceid;... cl_context context = clcreatecontext( props, // Propriedades 1, &deviceid, NULL, NULL, NULL );

86 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Criar um VBO (Vertex Buffer Object) OpenGL // Dimensoes da malha unsigned int m_width, m_height; // Tamanho do VBO unsigned int size = m_width * m_height * 4 * sizeof(float); GLuint vbo; glgenbuffers(1, vbo); glbindbuffer(gl_array_buffer, *vbo); glbufferdata( GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);

87 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Criar um buffer object OpenCL a partir do VBO cl_mem vbo_cl = clcreatefromglbuffer( context, CL_MEM_WRITE_ONLY, *vbo, NULL );

88 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Kernel kernel void sine_wave( global float4* pos, uint width, uint height, float time) { uint x = get_global_id(0); uint y = get_global_id(1); float u = x / (float) width; float v = y / (float) height; u = u*2.0f - 1.0f; v = v*2.0f - 1.0f;

89 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Kernel float freq = 4.0f; float w = sin(u*freq + time) * cos(v*freq + time) * 0.5f; } pos[y*width+x] = (float4)(u, w, v, 1.0f);

90 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Configurar argumentos fixos do kernel clsetkernelarg( kernel, 0, sizeof(cl_mem), (void *) &vbo_cl); clsetkernelarg( kernel, 1, sizeof(unsigned int), &m_width); clsetkernelarg( kernel, 2, sizeof(unsigned int), &m_height);

91 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Loop Atualizar timestep Executar acquire no VBO Executar kernel Executar release no VBO

92 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Atualizar timestep float timestep = 0.0f; // Funcao executada periodicamente pelo host void updatefunc() { timestep += 0.1f;... }

93 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Executar acquire no VBO clenqueueacquireglobjects( queue, 1, // No. de objetos OpenGL &vbo_cl, // Array de objetos NULL, // No. de eventos a aguardar NULL, // Array de eventos NULL // Evento retornado );

94 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Configurar argumento time do kernel e executá-lo size_t globalsize[2] = { m_width, m_height }; clsetkernelarg( kernel, 3, sizeof(float), &timestep); clenqueuendrangekernel( queue, kernel, 2, NULL, globalsize, NULL, NULL, NULL, NULL );

95 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Executar release no VBO clenqueuereleaseglobjects( queue, 1, // No. de objetos OpenGL &vbo_cl, // Array de objetos NULL, // No. de eventos a aguardar NULL, // Array de eventos NULL // Evento retornado );

96 Exemplos em Realidade Virtual e Aumentada Realidade Virtual - Exemplo: malha 3D Demonstração

97 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada Processamento de imagens e visão computacional Algoritmos computacionalmente custosos Operações por pixel Exemplo: detecção de bordas com Laplace

98 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada - Detecção de bordas Operador de Laplace calcula segunda derivada Invariante a rotações Figura: Operador de Laplace

99 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada - Detecção de bordas Convolução

100 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada - Detecção de bordas Kernel kernel void Laplacian( global const int* image, global int* laplacian) { int x = get_global_id(0); int y = get_global_id(1); int width = get_global_size(0); int height = get_global_size(1);

101 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada - Detecção de bordas Kernel } if (x > 0 && x < width - 1 && y > 0 && y < height - 1) { laplacian[y * width + x] = -4 * image[y * width + x] + image[(y - 1) * width + x] + image[(y + 1) * width + x] + image[y * width + (x - 1)] + image[y * width + x + 1]; } else laplacian[y * width + x] = 0;

102 Exemplos em Realidade Virtual e Aumentada Realidade Aumentada - Detecção de bordas Executar kernel em espaço de índices de duas dimensões Dimensões iguais às da imagem Opera sobre imagem em escala de cinza

103 Otimização com OpenCL Identificação de problemas paralelizáveis Tarefas independentes Resultados independentes na mesma tarefa

104 Otimização com OpenCL Identificação de problemas paralelizáveis Exemplos Paralelizável for (int i = 0; i < N; ++i) { data[x] = work(x); } Não-paralelizável for (int i = 1; i < N; ++i) { // dependencia data[x] = work(data[x - 1], x); }

105 Otimização com OpenCL Otimização de kernels Dependente de fabricante Alguns aspectos Uso de local Dados float Vetores Image objects

106 Otimização com OpenCL Exemplo de ganho de desempenho

107 Otimização com OpenCL Links recomendados NVIDIA Developer Zone - OpenCL AMD Developer Central - OpenCL Zone Exemplos e guias

108 Considerações finais OpenCL é uma abordagem multiplataforma para processamento paralelo Espera-se crescimento da adoção do padrão

109 Considerações finais ATI adotou OpenCL no Streaming SDK NVIDIA provavelmente manterá CUDA e OpenCL paralelamente OpenCL roda sobre CUDA Porém CUDA oferece algumas vantagens adicionais Dispositivos móveis

110 Considerações finais Disponibilização do material A partir da próxima semana

111 Considerações finais Contato com os autores

112 Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada César Leonardo Blum Silveira Prof. Dr. Luiz Gonzaga da Silveira Jr. V3D 24 de maio de 2010

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 08 de novembro de 2010 cesar@v3d.com.br

Leia mais

Programação Paralela em OpenCL

Programação Paralela em OpenCL Programação Paralela em OpenCL César L. B. Silveira cesar@v3d.com.br 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 contato@v3d.com.br

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 1, Luiz G. da Silveira Jr. 1, Gerson Geraldo H. Cavalheiro 2 1 V3D Labs Av. Unisinos, 950, Prédio Unitec, Sala

Leia mais

Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada

Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada Capítulo 3 Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada César Leonardo Blum Silveira V3D Studios cesar@v3d.com.br Luiz Gonzaga da Silveira Jr V3D Studios gonzaga@v3d.com.br

Leia mais

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome Para paralelizar códigos de programas, tudo que necessitamos é de uma construção sintática denominada kernel. Seja o kernel: kernel void

Leia mais

Programação em OpenCL: Uma introdução prática

Programação em OpenCL: Uma introdução prática Programação em OpenCL: Uma introdução prática César L. B. Silveira 1, Luiz G. da Silveira Jr. 2, Gerson Geraldo H. Cavalheiro 3 1 V3D Labs São Leopoldo, RS, Brasil 2 Universidade do Vale do Rio dos Sinos

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center

Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center Aplicações em CUDA Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center Roteiro l Introdução l Eventos l Aspectos históricos l Operações atômicas l Introdução sobre

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

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

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

FACULDADE FARIAS BRITO

FACULDADE FARIAS BRITO FACULDADE FARIAS BRITO CIÊNCIA DA COMPUTAÇÃO ALBERTO ANTUNES BEZERRA MARTINS TECNOLOGIAS DE PROCESSAMENTO PARALELO GPGPU: UM ESTUDO DE CASO USANDO O ALGORITMO DE CONVOLUÇÃO Fortaleza 2013 ALBERTO ANTUNES

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

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C#

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C# Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina POO -2017 Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C# http://www1.univap.br/~wagner Prof.

Leia mais

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem

Leia mais

André Luiz Rocha Tupinambá. DistributedCL: middleware de processamento distribuído em GPU com interface da API OpenCL

André Luiz Rocha Tupinambá. DistributedCL: middleware de processamento distribuído em GPU com interface da API OpenCL Universidade do Estado do Rio de Janeiro Centro de Tecnologia e Ciências Faculdade de Engenharia André Luiz Rocha Tupinambá DistributedCL: middleware de processamento distribuído em GPU com interface da

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

Hierarquia de memória:

Hierarquia de memória: INE5645 Programação Paralela e Distribuída Aluno Modelo de Execução CUDA - A execução do programa controlado pela CPU pode lançar kernels, que são trechos de código executados em paralelo por múltiplas

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 hussamaibrahim@ufam.edu.br Notas de Aula Baseado nas Notas de

Leia mais

Processamento de áudio em tempo real utilizando dispositivos não convencionais:

Processamento de áudio em tempo real utilizando dispositivos não convencionais: Processamento de áudio em tempo real utilizando dispositivos não convencionais: Processamento paralelo com Pure Data e GPU. André Jucovsky Bianchi ajb@ime.usp.br Departamento de Ciência da Computação Instituto

Leia mais

Introdução ao OpenCL p. 1

Introdução ao OpenCL p. 1 Introdução ao OpenCL Douglas Adriano Augusto douglas@lncc.br Semana Massivamente Paralela 2012 LNCC Introdução ao OpenCL p. 1 Conteúdo Introdução ao OpenCL p. 2 Conteúdo 1. Introdução & contextualização

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) Sockets são abstrações utilizadas nos protocolos de comunicação UDP e TCP,

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Linguagem de Programação. Thiago Leite Francisco Barretto

Linguagem de Programação. Thiago Leite Francisco Barretto Linguagem de Programação Thiago Leite Francisco Barretto SCHILDT, H. C Completo e Total. 3ª Edição. São Paulo: Makron, 1997. Bibliografia Ementa

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO Prof. Bosco 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) Sockets são abstrações utilizadas nos protocolos de comunicação

Leia mais

Paralelização de Aplicações para Realidade Aumentada em CUDA e OpenCL

Paralelização de Aplicações para Realidade Aumentada em CUDA e OpenCL Capítulo 1 Paralelização de Aplicações para Realidade Aumentada em CUDA e OpenCL Denise Stringhini 1 e Luciano Silva 1,2 1 Laboratório de Sistemas Distribuídos 2 Laboratório de Processamento Gráfico e

Leia mais

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa Computação Eletrônica Tipos de dados, constantes, variáveis, operadores e expressões Prof: Luciano Barbosa Site da disciplina: www.cin.ufpe.br/~if165/ Recapitulando num cubo = n * n * n cubo Algoritmo

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Algoritmos II prof. Daniel Oliveira

Algoritmos II prof. Daniel Oliveira Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional

Leia mais

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,

Leia mais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

#include <stdio.h> Void main() { printf( Cheguei!\n); } INTRODUÇÃO A LINGUAGEM C #include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que

Leia mais

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos UFRJ IM - DCC Sistemas Operacionais I Unidade IV Gerência de Recursos Entrada e Saída 02/12/2014 Prof. Valeria M. Bastos 1 ORGANIZAÇÃO DA UNIDADE Gerência de Entrada e Saída Fundamentos Evolução Estrutura

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas

Leia mais

Técnicas de Nuvens de Pontos para Aplicações de Realidade Virtual e Aumentada

Técnicas de Nuvens de Pontos para Aplicações de Realidade Virtual e Aumentada Capítulo 1 Técnicas de Nuvens de Pontos para Aplicações de Realidade Virtual e Aumentada Luciano Silva Laboratório de Processamento Gráfico e Mídias Digitais Faculdade de Computação e Informática, Universidade

Leia mais

Intel Thread Building Blocks (TBB)

Intel Thread Building Blocks (TBB) Intel Thread Building Blocks (TBB) MCZA020-13 - Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Disclaimer

Leia mais

ANÁLISE COMPARATIVA DO DESEMPENHO DE UNIDADES DE PROCESSAMENTO GRÁFICO

ANÁLISE COMPARATIVA DO DESEMPENHO DE UNIDADES DE PROCESSAMENTO GRÁFICO UNIVERSIDADE DO ESTADO DO AMAZONAS - UEA ESCOLA SUPERIOR DE TECNOLOGIA ENGENHARIA DE COMPUTAÇÃO DARLISSON MARINHO DE JESUS ANÁLISE COMPARATIVA DO DESEMPENHO DE UNIDADES DE PROCESSAMENTO GRÁFICO Manaus

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

Representação de Dados Arrays e Structs

Representação de Dados Arrays e Structs Representação de Dados Arrays e Structs Noemi Rodriguez Ana Lúcia de Moura http://www.inf.puc-rio.br/~inf1018 Representação de Arrays C usa uma implementação bastante simples alocação contígua na memória

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Alocação Dinâmica. Introdução à Computação

Alocação Dinâmica. Introdução à Computação Alocação Dinâmica Introdução à Computação Alocação de memória Uso da memória: uso de variáveis globais (e está>cas): O espaço reservado para uma variável global existe enquanto o programa es>ver sendo

Leia mais

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

Leia mais

Programação em Paralelo OpenMP

Programação em Paralelo OpenMP Programação em Paralelo OpenMP N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: OpenMP 1 / 15 Introdução Potencial do GPU vs CPU Cálculo: 367

Leia mais

Introdução ao CUDA. Material elaborado por Davi Conte.

Introdução ao CUDA. Material elaborado por Davi Conte. Introdução ao CUDA Material elaborado por Davi Conte. O objetivo deste material é que o aluno possa iniciar seus conhecimentos em programação paralela, entendendo a diferença da execução de forma sequencial

Leia mais

Programação científica C++

Programação científica C++ Programação científica C++ NIELSEN CASTELO DAMASCENO Slide 2 Expressões Combinação de dados e operadores que resulta em um valor. expressão x = 2 * y + 4; variável operador constante Memória do computador

Leia mais

Relatório de Atividades Desenvolvidas. Uso de GPU para Aceleração de Simulações Atmosféricas com o Modelo CCATT BRAMS.

Relatório de Atividades Desenvolvidas. Uso de GPU para Aceleração de Simulações Atmosféricas com o Modelo CCATT BRAMS. Relatório de Atividades Desenvolvidas Uso de GPU para Aceleração de Simulações Atmosféricas com o Modelo CCATT BRAMS. 1 Cezar Augusto Contini Bernardi 2 Haroldo Fraga de Campos Velho Coordenador Bolsista

Leia mais

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio

Leia mais

Processamento de áudio em tempo real em dispositivos computacionais de alta disponibilidade e baixo custo

Processamento de áudio em tempo real em dispositivos computacionais de alta disponibilidade e baixo custo Processamento de áudio em tempo real em dispositivos computacionais de alta disponibilidade e baixo custo André J. Bianchi 21/10/2013 1 / 33 1 Introdução 2 Metodologia 3 Arduino 4 GPU 5 Android 6 Conclusão

Leia mais

Working 03 : Conceitos Básicos I

Working 03 : Conceitos Básicos I Working 03 : Conceitos Básicos I Objetivos: Dominar os conceitos básicos da linguagem de programação C; Aprender a utilizar o compilador, identificando os erros de sintaxe do código fonte; Prazo de Envio:

Leia mais

Linguagens de Programação Classificação

Linguagens de Programação Classificação Classificação Classificação A proximidade que a linguagem de programação tem com a humana determina sua classe (o nível): Linguagem de máquina (primeira geração) Linguagem assembly - de montagem (segunda

Leia mais

GPU (Graphics Processing Unit) Bruno Padilha Gregory De Bonis Luciana Kayo

GPU (Graphics Processing Unit) Bruno Padilha Gregory De Bonis Luciana Kayo GPU (Graphics Processing Unit) Bruno Padilha - 5745282 Gregory De Bonis - 6431180 Luciana Kayo - 6430992 O que é? O que é? - Processador auxiliar responsável principalmente por operações de ponto flutuante

Leia mais

Paralelismo em Computadores com Tecnologia Multicore

Paralelismo em Computadores com Tecnologia Multicore IFRN - Pau dos Ferros Pau dos Ferros/RN, 25 de fevereiro de 2016 O minicurso Descrição: Para se utilizar os vários núcleos de processamento disponíveis nos computadores atuais de forma eficiente, faz necessário

Leia mais

Processing Aula 2. Prof. Wallace Lages

Processing Aula 2. Prof. Wallace Lages Processing Aula 2 Prof. Wallace Lages Aula 2 Computadores e lógica digital Variáveis Condicionais Computador ou calculadora? Computador Máquina programável capaz de realizar automaticamente uma sequência

Leia mais

3 Computação de Propósito Geral em Unidades de Processamento Gráfico

3 Computação de Propósito Geral em Unidades de Processamento Gráfico 3 Computação de Propósito Geral em Unidades de Processamento Gráfico As Unidades de Processamento Gráfico (GPUs) foram originalmente desenvolvidas para o processamento de gráficos e eram difíceis de programar.

Leia mais

What is? Eduardo Viola Nicola Disciplina de IPPD

What is? Eduardo Viola Nicola Disciplina de IPPD What is? Eduardo Viola Nicola evnicola@inf.ufpel.edu.br Disciplina de IPPD Sumário 1)Introdução 2)Princípio Geral de Funcionamento 3)Exemplos de Aplicações 4)Modelo de Programação 5)Linguagens Suportadas

Leia mais

Programação Orientada a Objetos para Redes de Computadores. Arrays. Arrays

Programação Orientada a Objetos para Redes de Computadores. Arrays. Arrays Programação Orientada a Objetos para Redes de Computadores Elias Mitre http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Arrays e Ponteiros Arrays Arrays Estruturas de dados que contêm itens

Leia mais

Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída

Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída Nome: Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída 1. A gerência de dispositivos de entrada e saída é uma das principais e mais complexas funções de um sistema

Leia mais

Disciplina de Algoritmos e Programação

Disciplina de Algoritmos e Programação Disciplina de Algoritmos e Programação Aula Passada 1º Programa: olamundo.c #include // biblioteca padrão de E/S /* Programa Olá Mundo */ int main(void) { printf( Olá mundo\n ); //exibe Olá mundo

Leia mais

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Arrays e Ponteiros Arrays Estruturas de dados que

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação ET42G Aula 21 Prof. Daniel Cavalcanti Jeronymo Conversão de tipos. Alocação dinâmica de memória. Recursão. Criação de bibliotecas, arquivos de cabeçalhos e variáveis globais.

Leia mais

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS Linguagem C Introdução à Programação C Introdução à Ciência da Computação I Prof. Denis F. Wolf Origem de C está associada ao sistema Unix Histórico: 1970: Ken Thompson desenvolve B, baseada em BCPL, para

Leia mais

Estruturas de Sistemas Operacionais

Estruturas de Sistemas Operacionais Estruturas de Sistemas Operacionais Sistemas Operacionais - Tópicos Componentes do Sistema Serviços de Sistemas Operacionais Chamadas ao Sistema Estrutura do Sistema Máquinas Virtuais Chamadas ao Sistema

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia Calculo da área de um triângulo Algoritmo Área Var base,

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos

Leia mais

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Revisões de PG (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Compilar e executar programas em Java Ficheiro fonte (Prog.java) Ficheiro

Leia mais

Introdução à Ciência da Computação. Prof. Dr. Rogério Vargas

Introdução à Ciência da Computação. Prof. Dr. Rogério Vargas Introdução à Ciência da Computação Prof. Dr. Rogério Vargas http://rogerio.in O que é dado? - Defino dado como uma sequência de símbolos quantificados ou quantificáveis. - Letras são símbolos quantificados.

Leia mais

Programação em Sistemas Computacionais

Programação em Sistemas Computacionais Programação em Sistemas Computacionais Linguagem C Introdução, tipos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Jorge Martins (jmartins@isel.pt) baseado no slides de Pedro Pereira Enquadramento

Leia mais

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02 Programação 1 Atribuição, operadores aritméticos, entrada de dados Técnico em Eletrônica Semestre 5 02 Armazenando na memória tipo de variável #include #include main() { int ano; Declaração

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Engenharia de CONTROLE e AUTOMAÇÃO Introdução à Linguagem C Aula 02 DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria beltrame@mail.ufsm.br

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Instituto Tecnológico de Aeronáutica. Prof. Carlos Henrique Q. Forster Sala 121 IEC. Luiz Felipe Simões Hoffmann

Instituto Tecnológico de Aeronáutica. Prof. Carlos Henrique Q. Forster Sala 121 IEC. Luiz Felipe Simões Hoffmann CCI 36 Computação Gráfica OpenGL Parte 1 Instituto Tecnológico de Aeronáutica Prof. Carlos Henrique Q. Forster Sala 121 IEC Luiz Felipe Simões Hoffmann Tópicos da Aula - OpenGL - Histórico - OpenGL Moderno

Leia mais

Slides trabalhados durante a quinta aula

Slides trabalhados durante a quinta aula Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um

Leia mais

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador 1 Introdução 1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador possa resolver problemas de forma automática

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

Métodos Computacionais

Métodos Computacionais Métodos Computacionais Objetivos da Disciplina e Introdução a Linguagem C Construções Básicas Objetivos da Disciplina Objetivo Geral Discutir técnicas de programação e estruturação de dados para o desenvolvimento

Leia mais

Informática básica. Professor: Francisco Ary

Informática básica. Professor: Francisco Ary Informática básica Professor: Francisco Ary O que vimos na ultima aula: O que é informática? O que é um computador? Evolução; Computadores eletrônicos: Válvulas; Transistor; Circuito integrado;e Microprocessador;

Leia mais

Arquiteturas de Computadores

Arquiteturas de Computadores Arquiteturas de Computadores Computadores vetoriais Fontes dos slides: Livro Patterson e Hennessy, Quantitative Approach e site do curso EE 7722, GPU Microarchitecture do Prof. David Koppelman Graphical

Leia mais

GPU Computing. GeForce and Radeon OpenCL Test. OpenCL

GPU Computing. GeForce and Radeon OpenCL Test. OpenCL GPU Computing GeForce and Radeon OpenCL Test Publicado em 15.jan.2010 em www.geeks3d.com - Tradução por Luiz Gustavo TURATTI http://www.geeks3d.com/20100115/gpu-computing-geforce-and-radeon-opencl-test-part-1/

Leia mais

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Sabemos construir algoritmos que tenham: Variáveis Comandos sequenciais Entrada e saída

Leia mais

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ Ponteiros em C Adriano Joaquim de Oliveira Cruz 21 de julho de 2017 Instituto de Matemática Departamento de Ciência da Computação UFRJ 1 Resumo da Seção Introdução Declaração Incrementando e Decrementando

Leia mais

Compiladores Geração de Código

Compiladores Geração de Código Compiladores Geração de Código Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

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

Leia mais

Infra-Estrutura de Software

Infra-Estrutura de Software Infra-Estrutura de Software Entrada / Saída 2º. EE: 21/06 Próximas Datas http://www.cin.ufpe.br/~cagf/if677/2016-1/ slides/ Revisão de notas: 28/06 FINAL: 30/06 Diversidade de dispositivos Hardware de

Leia mais

Gerência de Dispositivos. Adão de Melo Neto

Gerência de Dispositivos. Adão de Melo Neto Gerência de Dispositivos Adão de Melo Neto 1 Gerência de Dispositivos Gerência de Dispositivos Dispositivos de E/S Device Drivers Controladores Subsistema de E/S 2 Gerência de Dispositivos A gerência de

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

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Profa Rosana Braga 1º semestre de 2010 1 Arquivo-FONTE /*******************************/ /* Primeiro exemplo arq exemplo1.c

Leia mais

Infraestrutura de Hardware. Funcionamento de um Computador

Infraestrutura de Hardware. Funcionamento de um Computador Infraestrutura de Hardware Funcionamento de um Computador Computador: Hardware + Software Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é

Leia mais

Linguagem de Montagem Assembly

Linguagem de Montagem Assembly Linguagem de Montagem Assembly Especificações O programa em Assembly Fica sobre a camada do Sistema Operacional Efetua chamadas ao Sistema Operacional O montador Chama-se Assembler Traduz a linguagem de

Leia mais

Laboratório de Programação II

Laboratório de Programação II Laboratório de Programação II Aula 02 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Na aula passada vimos... Na aula passada vimos... 01 Introdução à linguagem C;

Leia mais

Revisão Linguagem C Parte 1

Revisão Linguagem C Parte 1 Revisão Linguagem C Parte 1 Comentários: Os comentários aparecem em verde e podem iniciados com /* e encerrados com */ quando utilizase várias linhas ou coloca-se // quando forem colocados em apenas uma

Leia mais

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de dados Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores

Leia mais

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação Prof. João Henrique Kleinschmidt Material elaborado pelo Prof. Jesús P. Mena-Chalco 3Q-2018 Linguagens de programação

Leia mais