Programação introdutória em OpenCL e aplicações em realidade virtual e aumentada V3D
|
|
- Washington Quintanilha Martinho
- 7 Há anos
- Visualizações:
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), ×tep); 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 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 maisProgramaçã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 maisProgramaçã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 maisProgramaçã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 maisProgramaçã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 maisINE5645-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 maisProgramaçã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 maisParalelismo 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 maisAplicaçõ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 maisINE 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 maisIntroduçã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 maisTé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 maisFACULDADE 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 maisComparaçã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 maisMaterial 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 maisProgramaçã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 maisAndré 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 maisPatrí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 maisHierarquia 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 maisComputaçã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 maisProcessamento 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 maisIntroduçã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 maisINE 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 maisLinguagens 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 maisProgramaçã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 maisArquitetura 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 maisLinguagem 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 maisINE 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 maisParalelizaçã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 maisComputaçã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 maisAlocaçã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 maisExercí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 maisLinguagem 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 maisAlgoritmos 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 maisExercí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 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 maisUFRJ 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 maisEstruturas 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 maisLinguagens 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 maisTé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 maisIntel 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 maisANÁ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 maisParalelismo 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 maisRepresentaçã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 maisUniversidade 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 maisAlgoritmos 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 maisAlocaçã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 maisParadigmas 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 maisProgramaçã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 maisIntroduçã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 maisProgramaçã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 maisRelató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 maisProgramaçã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 maisProcessamento 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 maisWorking 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 maisLinguagens 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 maisGPU (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 maisParalelismo 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 maisProcessing 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 mais3 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 maisWhat 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 maisProgramaçã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 maisExercí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 maisDisciplina 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 maisProgramaçã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 maisFundamentos 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 maisLinguagem 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 maisEstruturas 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 maisCAP. 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 maisPROGRAMAS 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 maisALGORITMOS 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 maisRevisõ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 maisIntroduçã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 maisProgramaçã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 maisProgramaçã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 maisIntroduçã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 mais3. 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 maisInstituto 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 maisSlides 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 mais1.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 maisProcessamento 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 maisMé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 maisInformá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 maisArquiteturas 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 maisGPU 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 maisLinguagem 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 maisPonteiros 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 maisCompiladores 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 maisINE 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 maisInfra-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 maisGerê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 mais5 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 maisUniversidade 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 maisInfraestrutura 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 maisLinguagem 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 maisLaborató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 maisRevisã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 maisAlgoritmos 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 maisMCTA028 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