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

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

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

Transcrição

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

2 Edison Gustavo Muenz Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU Orientador: Dr. rer.nat. Aldo von Wangenheim BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO INE CENTRO TECNOLÓGICO UNIVERSIDADE FEDERAL DE SANTA CATARINA Florianópolis SC Agosto / 2008

3 Trabalho de conclusão de curso apresentado como parte dos requisitos para obtenção do grau de Bacharel em Ciências da Computação Prof. Dr. rer.nat. Aldo von Wangenheim Departamento de Informática e Estatística - INE - UFSC Orientador

4 Resumo Algoritmos de processamento de imagens muitas vezes caracterizam-se por tomarem uma considerável quantidade de tempo para serem executados. Isto os torna possíveis elementos computacionais carentes de otimização e de uma melhoria em seu tempo de execução, tornandoos aptos a atender exigências de certas aplicações, como as de tempo real. As alternativas tomadas até então consistiam em utilizar clusters de alto desempenho, no entanto, o alto custo destes inviabliza a utilização destes algoritmos em máquinas disponíveis comercialmente, como os PCs. Com a evolução da computação gráfica e a demanda por placas gráficas mais poderosas, ocorreu uma evolução destas mesmas, onde características úteis apareceram, viabilidando o seu uso para propósitos além da pura síntese de gráficos, mas também para propósitos gerais. Este trabalho de conclusão de curso consiste em implementar um algoritmo de processamento digital de imagens utilizando as placas gráficas (GPUs) de forma a melhorar o desempenho dos mesmos.

5 Sumário Introdução p. 5 1 Objetivos p Objetivos gerais p Objetivos específicos p. 7 2 Fundamentação teórica p GPU p Stream processing p Aplicações GPGPU p Framework CUDA p Motivação p Arquitetura de execução p Uma extensão da linguagem C p Ponteiros p Texturas p. 16 Apêndices p. 19

6 5 Introdução Processamento digital de imagens é o processo de a partir de uma imagem de entrada processar cada pixel desta, gerando resultados, o que em geral é uma imagem de saída. Este processo pode gerar imagens de diferentes formatos, aumentar e/ou diminuir a imagem. No entanto, uma característica marcante de alguns destes algoritmos, principalmente os de segmentação de imagens é a alta exigência computacional para execução. Isto pode impedir o seu uso em algumas aplicações como biometria, reconhecimento de padrões, processamento de vídeo, etc. Os clusters são uma das soluções que a comunidade científica adotou para resolver tais problemas, aumentando o poder computacional disponível, no entanto, estes são caros e impraticáveis para muitas aplicações e usos que poderiam ser dados a este campo. A evolução das GPUs com o seu poder computacional e programabilidade pode ser uma solução barata e eficiente para este problema computacional. Elas conseguem obter tempos de resposta muitas vezes superior às CPUs atuais graças à sua arquitetura, tendo em vista um modelo de execução em paralelo. As GPUs possuem uma grande quantidade de núcleos, com um grande número de ALUs e pequenas caches. Esta arquitetura diferenciada exige das aplicações que utilizam a GPU algumas premissas para executarem os algoritmos de forma eficiente, sendo a principal delas: independência dos dados. Alguns algoritmos de processamento de imagens estão aptos de forma direta para serem executados na GPU (ou seja, são em essência paralelos), já outros necessitam de uma adaptação para serem traduzidos para a GPU. Esta tradução é um grande problema para alguns algoritmos, pois estes devem ser modelados de forma diferente para garantir uma independência dos dados, sendo algumas vezes impraticável ou impossível (até a data presente) obter um modelo que consiga executar de forma eficiente o algoritmo. Algumas técnicas para evitar algumas insuficiências das GPUs estão descritas em (??). Como apontado por (??) e (??) uma das carências das GPUs era a ausência de linguagens de alto nível para a criação de programas para a GPU. Estes estavam restritos às linguagens

7 6 de Shaders, que eram basicamente utilizados em computação gráfica para obter efeitos gráficos mais realistas, mas para propósitos gerais, eram deficientes por incluirem um overhead das APIs gráficas, como OpenGL e Directx. Isto torna o código sujo e difícil de depurar, debugar e sempre é necessário trabalhar diretamente com texturas. Além disso, há também as limitações dos Shaders. A NVIDIA então disponibilizou o framework CUDA para permitir a criação de programas para suas placas de vídeo da série Esta possui muitas características úteis para a criação de aplicativos GPGPU, sem necessitar do overhead das apis gráficas, facilitando a escrita dos algoritmos.

8 7 1 Objetivos 1.1 Objetivos gerais Estudar e implementar sob o paradigma de programação paralela, que é imposto pela programação GPGPU, algoritmos de processamento de imagens, elaborando estratégias e resolvendo os problemas encontrados neste novo ambiente. 1.2 Objetivos específicos Estudar abordagens disponíveis para a programação de algoritmos sob o paradigma de programação paralela em GPUs Modelar e implementar o algoritmo de filtro de difusão anisotrópico e segmentação por funcional de Mumford&Shah Verificar particularidades nos modelos CPU e GPU dos algoritmos descritos Efetuar um estudo comparativo de performance e qualidade de resultados nos ambientes especificados

9 8 2 Fundamentação teórica 2.1 GPU A GPU (graphical processing unit) é o processador que das placas gráficas. Estas placas são compostas de diversos componentes, no entanto, assim como nos pcs (onde a CPU é o componente principal ), a GPU é o componente principal destas mesmas, onde ocorre o processamento de todas as instruções enviadas à placa de vídeo. O poder de processamento das GPUs atuais é imenso, se comparado ao processamento das CPUs modernas. Este poder chamou a atenção dos desenvolvedores e permitiu que os efeitos gráficos nunca vistos antes. Também fez com que olhássemos para a GPU com olhos não somente voltados ao processamento de gráficos, mas como um processador de propósito geral. As GPUs passaram a obter atenção dos desenvolvedores para propósito geral porque passaram a possuir estágios programáveis (atualmente com 2 estágios). Estes estágios permitem que sejam inseridos algoritmos que irão rodar dentro da GPU tratando os dados da forma que for necessário, tendo como objetivo efeitos gráfico e/ou algum outro propósito. Os 2 estágios programáveis da GPU são também chamados de shaders, estes são: vertex shader e pixel shader Stream processing Este é o modelo de programação que deve ser seguido quando escrevem-se algoritmos para a GPU. Isto ocorre porque a GPU possui processadores que funcionam desta forma. Este é um modelo de programação que incentiva o paralelismo, pois ele estabelece o modelo de execução SIMD (nos modelos da GPU atuais, embora existam outros modelos para Stream processing(??)). Este modelo é a sigla para Same instruction, multiple data, ditando que o mesmo código é executado sobre diferentes dados. Este modelo define o termo kernel, que é o código que será executado em cada trecho dos dados. Este kernel executando sobre este setor de dados define um stream.

10 9 Um código executando em CPU sobre um conjunto de dados data é o seguinte: void kernel() {... } int result; for (int i = 0; i < DATA_SIZE; ++i) { kernel(data[i], result); } No caso dessa execução ser feita no modelo Stream processing este código seria o seguinte: void kernel() {... } result = apply_kernel(kernel, data, DATA_SIZE); Ou seja, o método kernel() será aplicado a cada elemento do array data Aplicações GPGPU Existem várias particularidades ao escrevermos algortimos para a GPU, pois a arquitetura desta é diferente da arquitetura da CPU, introduzindo algumas dificuldades e limites. Por isto sempre que estes forem escritos, deve-se ter sempre em mente o funcionamento do pipeline gráfico, seus limites e particularidades. Algumas destas características são: Latência do barramento entre CPU e GPU - Existe uma latência para a troca de informações entre a CPU e a GPU que é limitado pelo slot AGP ou PCI-Express. Este tempo pode ser crítico quando há muita comunicação entre estes dois componentes. Portanto deve-se ter sempre em mente que é recomendável enviar instruções e dados suficientes, ou então que ocupem um tempo que justifique o processamento ser feito na GPU. Caso contrário, uma situação onde o resultado já poderia ter sido calculado pela CPU, mas a instrução ainda está trafegando pelo barramento até a GPU pode ocorrer. Dificuldades de programação - Como a GPU possui uma arquitetura altamente especializada, alguns comandos não são possíveis de serem executados em alguns estágios do pipeline, tornando alguns algoritmos de implementação trivial em CPU, difíceis de se

11 10 implementar em GPU. O algoritmo quicksort é um exemplo claro desta limitação, pois a operação scatter (escrita em algum endereço de memória) é limitado no vertex shader e desabilitado no pixel shader. Soluções para estas dificuldades existem, através da busca de algoritmos alternativos e/ou uma implementação diferenciada, que aproveita melhor o paralelismo e consegue rodar sobre as limitações do hardware da GPU. Gather Uma das maiores dificuldades com a maneira clássica de escrever algoritmos GPGPU (através de Shaders) são as limitações de gather e scatter. A operação Gather é o ato de obter dados a partir de um endereço de memória aleatório. Por exemplo: int dados = data[10]; Neste caso, estamos obtendo o dado a partir do endereço 10 do conjunto de dados data. Esta operação possui suporte total no Pixel Shader, mas é limitada no Vertex Shader. Scatter A operação Scatter é o ato de escrever dados em um endereço de memória. Por exemplo: data[10] = 5; Aqui está se escrevendo o valor 5 no conjunto de dados data. Esta operação não é suportada no Pixel Shader e pode ser feita no Vertex Shader. Isto apresenta limitações claras porque muitos algoritmos necessitam escrever em endereços de memória, tornando algumas vezes impossível alguns algoritmos serem escritos pela maneira clássica de GPGPU (shaders). 2.2 Framework CUDA O CUDA é um framework desenvolvido pela NVIDIA com o objetivo de facilitar a criação de aplicações para a GPU.

12 11 Ele pode ser interpretado como uma API com funções e formas de escrever código diretamente na GPU. Esta API é uma extensão do C, onde o compilador da NVIDIA (nvcc) compila o código relativo ao CUDA e deixa o compilador padrão da máquina (gcc, msvc) compilar o código C Motivação A forma (clássica) de se escrever código para a GPU é através da programação dos shaders, rodando no vertex shader, pixel shader ou geometry shader (a partir do Shader model 4.0). Este tipo de código é eficiente (no quesito praticidade) caso a aplicação não tenha o intuito de utilizar código GPGPU. No entanto, caso o código tenha um propósito geral (não diretamente relacionado ao uso de uma API 3D), há muito esforço desnecessário, como: Necessidade da utilização de APIs gráficas (como opengl e direct3d) Dificuldade em traduzir problemas computacionais para a GPU ausência de scatter/gather Este esforço diminui com o CUDA, pois o código não é mais escrito em linguagem de shaders, a necessidade de utilização de APIs gráficas desaparece, há suporte para scatter/gather em qualquer parte do código Arquitetura de execução Kernels, Grids e Blocos de threads O CUDA não foge ao modelo de programação de Streams(??) como há na programação de Shaders, pois a GPU é uma máquina com múltiplos processadores em paralelo, e é isto que a torna tão eficiente computacionalmente. Isto implica que há kernels, e estes irão rodar em paralelo sobre um conjunto de dados, mas cada instância deste kernel (thread) irá processar um dado diferente. Threads São a menor unidade de execução do kernel, onde cada uma executa parte do código do kernel. Estas estão organizadas em blocos, podendo estas compartilharem informações entre si através de uma memória de rápido acesso e sincronizarem sua execução para coordenar o acesso à memória.

13 12 Blocos Consiste em um agrupamento de threads que irão executar em um dos multiprocessadores disponíveis na GPU. Estes blocos são indepependentes entre si, ou seja, podem executar em uma ordem aleatória e não previamente conhecida. Um grande número de blocos garante um grande paralelismo (mantendo os multiprocessadores ocupados). Grids É o conjunto de todos os blocos que está executando um kernel. Quando um grid termina de executar significa que o kernel terminou sua execução. Memória A comunicação entre a CPU e a GPU é feita através de métodos da api, como cudamalloc() (aloca memória na GPU) e cudamemcpy() (transfere dados entre CPU e GPU). Estes métodos são otimizados pelo compilador para utilizar o chip DMA (Direct Memory Access) aumentando a velocidade de acesso. Uma thread possui acesso à memória da GPU através dos seguintes padrões: Read-write per-thread registers, Read-write per-thread local memory, Read-write per-block shared memory, Read-write per-grid global memory, Read-only per-grid constant memory, Read-only per-grid texture memory. Registradores Cada multiprocessador possui uma quantidade definida de registradores. Portanto, o número de threads por bloco é limitado ao hardware onde o programa está sendo executado. Memória compartilhada O CUDA disponibiliza uma memória compartilhada de alta velocidade de acesso ao programador. Esta memória pode ser utilizada para sincronia das threads entre os blocos, diminuindo o número de loads feitos da memória principal da GPU, aumentando a velocidade de execução do kernel. O tamanho desta memória é limitado a 16kb por bloco.

14 Uma extensão da linguagem C O CUDA faz uma extensão da linguagem C, adicionando alguns tipos e conceitos. Por ser uma extensão do C, a curva de aprendizado é menor devido às similaridades com o C, que é uma linguagem conhecida. Há a introdução de alguns conceitos básicos: Host - Executa o código compilado e controla os dispositivos (devices). Seria a CPU. Device - Executa código escrito especificamente para o dispositivo, a GPU. Funções e tipos que caracterizam vetores como já parte da linguagem (como float2). Este código é suportado tanto no host quanto no device. Qualificadores para métodos device Implica que um método será executado apenas no device. Chamado apenas pelo próprio device global Implica no ponto de entrada para um kernel Executado no device Chamado apenas pelo host host Executado no host Chamado apenas pelo host É equivalente declarar um método com este modificador e não declará-lo sem nenhum dos modificadores listados. No entanto, é possível declarar um método com ambos os modificadores device e host que dizem que um método será compilado para ser executado em ambos os ambientes.

15 14 Qualificadores para variáveis device Especifica que uma variável será armazenada no device. Os modificadores a seguir definem onde a variável será alocada. constant Uma variável declarada com este modificador possui as seguintes características Reside no espaço de memória de constantes Tem um tempo de vida igual à vida da aplicação É acessível a todas as threads do grid através da biblioteca runtime. shared Uma variável declarada com este modificador possui as seguintes características Reside no espaço de compartilhado de thread de um bloco (memória veloz mas pequena) Tem um tempo de vida igual à vida do bloco É acessível a todas as threads do bloco Este tipo de variável é suscetível à sincronia de threads, portanto, para sincronizar os reads e writes utiliza-se o comando syncthreads(), garantindo que as escritas de outras threads serão visíveis. Se nenhum destes modificadores for especificado, a variável terá a seguinte característica: Reside no espaço de memória global Tem um tempo de vida igual à vida da aplicação É acessível a todas as threads do grid através da biblioteca runtime. Chamando um kernel Quando declaramos um método com o modificador global e queremos chamá-lo para poder executar um kernel, este deve possuir um tipo de chamada especial, onde é especificado a dimensão do grid que irá executar aquele kernel. O formato desses parâmetros segue a forma <<< Dg, Db, Ns >>>, onde:

16 15 Dg é do tipo dim3 e especifica a dimensão e o tamanho do grid. Sendo Dg.x * Dg.y igual ao número de blocos. Db é do tipo dim3 e especifica a dimensão e o tamanho de cada bloco. Sendo Db.x * Db.y * Db.z igual ao número de threads por bloco. Ns é do tipo size t e especifica o número de bytes que serão alocados dinamicamente além dos bytes estáticos. Esta memória é utilizada por arrays declarados com o modificador extern. Este argumento é opcional e o seu valor padrão é 0. Por exemplo, se queremos chamar um kernel com 10 blocos, sendo 5 threads por bloco, podemos utilizar o seguinte programa C: global void kernel() {... } void main() { kernel<<<10, 5>>>(); } É válido lembrar que uma chamada de um kernel a partir do host é assíncrono, ou seja, o kernel pode não terminar sua execução antes que a próxima instrução do código do host seja chamado. Para que haja uma sincronização deste kernel é possível chamar o método cudathreadsynchronize() que garante o término de execução de todas as threads. O compilador nvcc Este é o compilador disponibilizado para poder compilar o código do CUDA. A diferença, é que este não é um compilador completo, ou seja, ele não se responsabiliza por código C, e sim apenas pelo código escrito em CUDA. Isto permite que o compilador utilizado para compilar o código C seja customizado, ou seja, pode ser o gcc, visual c++ compiler, etc. Modo de emulação O nvcc permite que o código escrito em cuda (os kernels) sejam executados em modo de emulação (na CPU) para debugar o código, permitindo chamadas a qualquer método de CPU dentro do kernel em si para debugação. Métodos como printf() podem ser chamados dentro do kernel apenas em modo de emulação. Para compilar em modo de emulação é passada a flag -deviceemu para o nvcc.

17 Ponteiros Ponteiros no CUDA são muito similares a ponteiros em C. Há algumas fórmulas básicas para utilizá-los, sendo o que os distingue dos ponteiros em C. É preciso diferenciar se um ponteiro está sendo alocado no host ou no device. Sendo os ponteiros do host os ponteiros C e os ponteiros device os ponteiros CUDA. Os ponteiros em C são alocados através de malloc(), os ponteiros em CUDA são alocados com cudamalloc(). Para popular os dados de cada ponteiro, em C geralmente utiliza-se um for sobre os dados populando conforme necessário. Em CUDA, os ponteiros possuem seus dados populados através de cudamemcpy() que copia os dados de um ponteiro C para um ponteiro CUDA (o método cudamemcpy() é análogo ao método memcpy()). Um trecho de código para alocar um ponteiro CUDA e popular seus dados: int * data = (int*)malloc(sizeof(int) * 10); for (int i = 0; i < 10; ++i) data[i] = 5; int * d_data; cudamalloc((void**)&d_data, sizeof(int) * 10); cudamemcpy(d_data, data, sizeof(int) * 10, cudamemcpyhosttodevice); Texturas O CUDA possui o tipo textura. Este tipo permite acesso à memória de texturas, que possui rápido acesso e é otimizada para armazenar estes tipos de dados. Para poder alocar memória para as texturas, utiliza-se o comando cudamallocarray() que irá alocar a imagem na memória para texturas. É possível também utilizar a memória global para alocar a textura, no entanto, isso geralmente implica em perda de desempenho. Além disso, o CUDA não oferece suporte a algumas operações com as texturas (como filtros) quando utiliza-se este modo. Uma textura alocada na memória global sofre das seguintes características: Pode ter apenas uma dimensão Não suporta filtro para as texturas

18 17 Pode ser acessada apenas por valores inteiros e não normalizados (não estando no intervalo [0,1)) Não suporta os variados modos de acesso disponíveis Utilizando texturas a partir de CUDA Arrays Deve-se declarar 5 variáveis, sendo 2 destas apenas descritores da textura em si, e não conterão dados pertinentes ao conteúdo da textura, as variáveis descritoras são: texture<type, Dim, ReadMode> texref; - Utilizada para declarar como a textura está sendo armazenada (tipo da variável), os filtros sendo aplicados, etc. cudachannelformatdesc - Contém uma descrição sobre a textura, em geral é criado com o método cudacreatechanneldesc<type>(); onde Type é o tipo da variável que irá conter cada pixel da textura (ex.: float, char, etc.) Então, na utilização das texturas, é necessário criar uma variável que irá conter a informação de cada pixel da textura e ser armazenada no lado do host. Como por exemplo: float * h texture; Esta variável é utilizada da mesma forma que utiliza-se para carregar texturas com OpenGL. A outra variável, é a correspondente à variável anterior, mas irá ser alocada no lado do device, ou seja, será enviada à GPU. É declarada da mesma forma, no entanto, sua alocação é dada pelo método cudamalloc(). Por exemplo: float * d_texture; cudamalloc( (void**) &d_texture, imagew * imageh * sizeof(float)); A próxima variável é do tipo cudaarray e será ela que irá transportar a informação para a GPU através da memória dedicada a texturas. O código abaixo mostra como ela deve ser usada: cudaarray * cu_array; cudamallocarray( &cu_array, &channeldesc, imagew, imageh ); cudamemcpytoarray( cu_array, 0, 0, h_data, imagew * imageh * sizeof(float), cudamemcpyhosttodevice); cudabindtexturetoarray( teximage, cu_array, channeldesc); Note que as variáveis teximage e channeldesc são os descritores citados anteriormente.

19 18 Invocação do kernel com texturas Para invocar um kernel que utiliza texturas, os passos da seção anterior são necessários para a declaração das variáveis para a utilização das texturas. O kernel deve então possuir um parâmetro onde ele poderá escrever o resultado do seu processamento. Ela terá o mesmo tipo que a textura que armazena a textura no lado do host, mas o ponteiro passado para o kernel será o da variável que é armazenada no lado do device. Veja o código abaixo: float * d_data; cudamalloc( (void**) &d_texture, imagew * imageh * sizeof(float));... global void grayscale(float * textura, int w, int h); //declaraç~ao do kernel... grayscale<<<grid, threads>>>(d_data, imagew, imageh); //invocaç~ao do kernel Obtenção dos resultados Para obter os resultados da invocação do kernel, é necessário copiar o resultado para uma variável local (no lado do host), isto é feito da seguinte forma: float * resultado = (image_t *)malloc(sizeof(float) * imageh * imagew); cudamemcpy( resultado, cu_array, sizeof(float) * imageh * imagew, cudamemcpydevicetohost); O resultado da computação feita pelo kernel pode ser manipulada da forma desejada através da variável resultado. Saída para várias texturas Foram feitos experimentos com a escrita do kernel em mais de uma textura, isto pode ser feito utilizando: Um cudaarray para cada textura Uma variável armazenada no dispositivo (sendo alocada com cudamalloc()) para cada textura Utilização dos mesmo descritores da textura (se a saída desejada for do mesmo tipo que a textura de entrada)

20 19 Apêndices Listing 2.1: Grayscale em CUDA 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <cutil.h> 4 #include <cuda runtime.h> 5 #include <FreeImagePlus.h> 6 7 typedef uint4 image t; 8 9 / Kernel para rodar na GPU / 10 texture <image t, 2, cudareadmodeelementtype> teximage; 11 cudachannelformatdesc channeldesc = cudacreatechanneldesc<image t>(); global void grayscale (image t textura, int w, int h) 14 { 15 const int ix = blockdim.x blockidx.x + threadidx.x; 16 const int iy = blockdim.y blockidx.y + threadidx.y; 17 // Add half of a texel to always address exact texel centers 18 const float x = ( float )ix + 0.5f ; 19 const float y = ( float )iy + 0.5f ; if (ix < w && iy < h){ 22 image t fresult = tex2d(teximage, x, y); 23 uint color = fresult.x fresult.y fresult. z 0.11; 24 textura [w iy + ix] = make uint4( color, color, color, fresult.w); 25 } 26 } 27 28

21 20 29 char arquivoentrada = entrada.bmp ; 30 char arquivosaida = saida.bmp ; int idivup(int a, int b) 33 { 34 return ((a % b)!= 0)? (a / b + 1) : (a / b); 35 } int main(int argc, char argv []) 38 { 39 if (argc > 1) { 40 arquivoentrada = argv [1]; 41 } 42 CUT DEVICE INIT(); fipimage img = new fipimage; 45 if (img >load(arquivoentrada) == 0) 46 { 47 printf ( [ERRO] Arquivo nao carregado!\n ); 48 return 1; 49 } if (img >convertto24bits() == 0) 52 { 53 printf ( [ERRO] Nao foi possivel converter a imagem para 24 bits ); 54 return 1; 55 } int width = img >getwidth(); 58 int height = img >getheight(); unsigned int memsize = sizeof(image t) width height ; image t h data = new image t[width height ]; 63

22 21 64 RGBQUAD pixelcolor; 65 for ( int i = 0; i < width; ++i) 66 { 67 for ( int j = 0; j < height ; ++j) 68 { 69 img >getpixelcolor(i,j, &pixelcolor); 70 h data [ i height + j ] = make uint4( 71 (unsigned int ) pixelcolor.rgbred, 72 (unsigned int ) pixelcolor.rgbgreen, 73 (unsigned int ) pixelcolor.rgbblue, 74 (unsigned int ) pixelcolor.rgbreserved 75 ); 76 } 77 } // agora a variavel h data possui os pixels da imagem, pode entao ser passada para a GPU pa 80 cudaarray cu array ; / Aloca memoria na GPU para o resultado / 83 image t d data = NULL; 84 CUDA SAFE CALL( cudamalloc( (void ) &d data, memsize) ); // transfere imagem para a GPU 87 cudachannelformatdesc channeldesc = cudacreatechanneldesc<image t>(); 88 CUDA SAFE CALL( cudamallocarray( &cu array, &channeldesc, width, height ) ); 89 CUDA SAFE CALL( cudamemcpytoarray( cu array, 0, 0, h data, memsize, cudamemcpyhosttode 90 CUDA SAFE CALL( cudabindtexturetoarray( teximage, cu array, channeldesc)); dim3 block(8, 8); 93 dim3 grid (idivup(width, block.x ), idivup(height, block.y ));; grayscale <<<grid, block>>>(d data, width, height ); 96 cudathreadsynchronize(); 97 CUT CHECK ERROR( Kernel execution failed ); 98

23 22 99 // allocate mem for the result on host side 100 image t resultado = new image t[memsize]; 101 // copy result from device to host 102 CUDA SAFE CALL( cudamemcpy( resultado, d data, memsize, cudamemcpydevicetohost) ); // cria uma nova imagem para poder salvar o resultado do kernel 105 fipimage outimg = new fipimage( img); for ( int i = 1; i < width 1; ++i) 108 { 109 for ( int j = 1; j < height 1; ++j) 110 { 111 int index = i height + j ; RGBQUAD pixel; 114 pixel.rgbreserved = (BYTE)resultado[index].w; 115 pixel.rgbred = (BYTE)resultado[index].x; 116 pixel.rgbgreen = (BYTE)resultado[index].y; 117 pixel.rgbblue = (BYTE)resultado[index].z; 118 if (outimg >setpixelcolor(i, j,&pixel ) == 0) 119 { 120 fprintf ( stderr, [ERRO] Problemas ao gravar as informacoes sobre a imagem de 121 return 1; 122 } 123 } 124 } 125 delete [] resultado ; if (outimg >save(arquivosaida) == 0) 128 { 129 fprintf ( stderr, [ERRO] Nao foi possivel gravar a imagem de saida em disco\n ); 130 return 1; 131 } CUDA SAFE CALL(cudaFree(d data));

24 CUDA SAFE CALL(cudaFreeArray(cu array)); 135 delete outimg; 136 delete img; 137 delete [] h data ; return 0; 140 }

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

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

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

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

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

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

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

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2010/2011 Programação em Paralelo CUDA N. Cardoso & P. Bicudo Física Computacional - MEFT 2010/2011 N. Cardoso & P. Bicudo Programação em Paralelo: CUDA 1 / 12 CUDA Parte 3 N. Cardoso & P. Bicudo Programação em

Leia mais

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Informática I Aula 5 http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador

Leia mais

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

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2010/2011 Programação em Paralelo CUDA N. Cardoso & P. Bicudo Física Computacional - MEFT 2010/2011 N. Cardoso & P. Bicudo Programação em Paralelo: CUDA 1 / 11 CUDA Parte 2 N. Cardoso & P. Bicudo Programação em

Leia mais

Memórias Prof. Galvez Gonçalves

Memórias Prof. Galvez Gonçalves Arquitetura e Organização de Computadores 1 s Prof. Galvez Gonçalves Objetivo: Compreender os tipos de memória e como elas são acionadas nos sistemas computacionais modernos. INTRODUÇÃO Nas aulas anteriores

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Experimentos com a memória cache do CPU

Experimentos com a memória cache do CPU Experimentos com a memória cache do CPU Alberto Bueno Júnior & Andre Henrique Serafim Casimiro Setembro de 2010 1 Contents 1 Introdução 3 2 Desvendando o cache 3 2.1 Para que serve o cache?.....................

Leia mais

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org Breve Histórico A linguagem de programação C foi criada na década de 70, por Dennis Ritchie, que a implementou,

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de I Organização Básica B de (Parte V, Complementar)

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br Conceito de Computador Um computador digital é

Leia mais

Sistemas Computacionais II Professor Frederico Sauer

Sistemas Computacionais II Professor Frederico Sauer Sistemas Computacionais II Professor Frederico Sauer Livro-texto: Introdução à Organização de Computadores 4ª edição Mário A. Monteiro Livros Técnicos e Científicos Editora. Atenção: Este material não

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores. 7.3.1.2 Registradores: São pequenas unidades de memória, implementadas na CPU, com as seguintes características:

Leia mais

7 Processamento Paralelo

7 Processamento Paralelo 7 Processamento Paralelo Yes, of course, who has time? Who has time? But then if we do not ever take time, how can we ever have time? (The Matrix) 7.1 Introdução Classificação de Sistemas Paralelos Diversas

Leia mais

Processos e Threads (partes I e II)

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

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor

Leia mais

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

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

ARQUITETURA DE COMPUTADORES - 1866 7 Unidade Central de Processamento (UCP): O processador é o componente vital do sistema de computação, responsável pela realização das operações de processamento e de controle, durante a execução de um

Leia mais

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados Tipo de dados, tipo abstrato de dados, estruturas de dados Termos parecidos, mas com significados diferentes Tipo de dado Em linguagens de programação

Leia mais

Aula 10 - Streams (Parte I)

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

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

for Information Interchange.

for Information Interchange. 6 Memória: 6.1 Representação de Memória: Toda a informação com a qual um sistema computacional trabalha está, em algum nível, armazenada em um sistema de memória, guardando os dados em caráter temporário

Leia mais

Sistema de Computação

Sistema de Computação Sistema de Computação Máquinas multinível Nível 0 verdadeiro hardware da máquina, executando os programas em linguagem de máquina de nível 1 (portas lógicas); Nível 1 Composto por registrados e pela ALU

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho 20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam

Leia mais

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis

Leia mais

Máquinas Multiníveis

Máquinas Multiníveis Infra-Estrutura de Hardware Máquinas Multiníveis Prof. Edilberto Silva www.edilms.eti.br edilms@yahoo.com Sumário Conceitos básicos Classificação de arquiteturas Tendências da tecnologia Família Pentium

Leia mais

Aula 26: Arquiteturas RISC vs. CISC

Aula 26: Arquiteturas RISC vs. CISC Aula 26: Arquiteturas RISC vs CISC Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Arquiteturas RISC vs CISC FAC 1 / 33 Revisão Diego Passos

Leia mais

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

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

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 3 Software Prof.: Edilberto M. Silva http://www.edilms.eti.br SO - Prof. Edilberto Silva Barramento Sistemas Operacionais Interliga os dispositivos de E/S (I/O), memória principal

Leia mais

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva Arquitetura de Computadores - Arquitetura RISC por Helcio Wagner da Silva Introdução RISC = Reduced Instruction Set Computer Elementos básicos: Grande número de registradores de propósito geral ou uso

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Introdução aos Computadores

Introdução aos Computadores Os Computadores revolucionaram as formas de processamento de Informação pela sua capacidade de tratar grandes quantidades de dados em curto espaço de tempo. Nos anos 60-80 os computadores eram máquinas

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

5 Entrada e Saída de Dados:

5 Entrada e Saída de Dados: 5 Entrada e Saída de Dados: 5.1 - Arquitetura de Entrada e Saída: O sistema de entrada e saída de dados é o responsável pela ligação do sistema computacional com o mundo externo. Através de dispositivos

Leia mais

Estruturas do Sistema de Computação

Estruturas do Sistema de Computação Estruturas do Sistema de Computação Prof. Dr. José Luís Zem Prof. Dr. Renato Kraide Soffner Prof. Ms. Rossano Pablo Pinto Faculdade de Tecnologia de Americana Centro Paula Souza Estruturas do Sistema de

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

INSTITUTO DE EMPREGO E FORMAÇÃO PROFISSIONAL, I.P.

INSTITUTO DE EMPREGO E FORMAÇÃO PROFISSIONAL, I.P. INSTITUTO DE EMPREGO E FORMAÇÃO PROFISSIONAL, I.P. Centro de Emprego e Formação Profissional da Guarda Curso: Técnico de Informática Sistemas (EFA-S4A)-NS Trabalho Realizado Por: Igor_Saraiva nº 7 Com

Leia mais

Fundamentos de Hardware

Fundamentos de Hardware Fundamentos de Hardware Curso Técnico em Informática SUMÁRIO PLACAS DE EXPANSÃO... 3 PLACAS DE VÍDEO... 3 Conectores de Vídeo... 4 PLACAS DE SOM... 6 Canais de Áudio... 7 Resolução das Placas de Som...

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência de processos Controle e descrição de processos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Representação e controle de processos pelo SO Estrutura

Leia mais

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Sistemas Operacionais Gerência de Dispositivos

Sistemas Operacionais Gerência de Dispositivos Universidade Estadual de Mato Grosso do Sul UEMS Curso de Licenciatura em Computação Sistemas Operacionais Gerência de Dispositivos Prof. José Gonçalves Dias Neto profneto_ti@hotmail.com Introdução A gerência

Leia mais

Sistemas Operacionais Processos e Threads

Sistemas Operacionais Processos e Threads Sistemas Operacionais Processos e Threads Prof. Marcos Monteiro, MBA http://www.marcosmonteiro.com.br contato@marcosmonteiro.com.br 1 Estrutura de um Sistema Operacional 2 GERÊNCIA DE PROCESSOS Um processo

Leia mais

CISC RISC Introdução A CISC (em inglês: Complex Instruction Set Computing, Computador com um Conjunto Complexo de Instruções), usada em processadores Intel e AMD; suporta mais instruções no entanto, com

Leia mais

Capítulo 8 Arquitetura de Computadores Paralelos

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

Leia mais

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy) Capítulo 4 João Lourenço Joao.Lourenco@di.fct.unl.pt Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente

Leia mais

Arquitetura de Von Neumann e os Computadores Modernos

Arquitetura de Von Neumann e os Computadores Modernos Arquitetura de Von Neumann e os Computadores Modernos Arquitetura de Computadores e Software Básico Aula 5 Flávia Maristela (flaviamsn@ifba.edu.br) Arquitetura de Von Neumann e as máquinas modernas Onde

Leia mais

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução Arquitetura e Organização de Computadores Capítulo 0 - Introdução POR QUE ESTUDAR ARQUITETURA DE COMPUTADORES? 2 https://www.cis.upenn.edu/~milom/cis501-fall12/ Entender para onde os computadores estão

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

Leia mais

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

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre Cap. 01 Fundamentos de Computadores Sumário : Conceitos básicos: computador,

Leia mais

MEMÓRIA. 0 e 1 únicos elementos do sistema de numeração de base 2

MEMÓRIA. 0 e 1 únicos elementos do sistema de numeração de base 2 MEMÓRIA CONCEITO Bit- 0 1 Essência de um sistema chamado BIESTÁVEL Ex: Lâmpada 0 apagada 1 acesa 0 e 1 únicos elementos do sistema de numeração de base 2 A que se destina a memória: Armazenamento das instruções

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 5 Estrutura de Sistemas de Computação Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Introdução a POO. Introdução a Linguagem C++ e POO

Introdução a POO. Introdução a Linguagem C++ e POO Introdução a POO Marcio Santi Linguagem C++ Introdução a Linguagem C++ e POO Programação Orientada a Objetos (POO) e C++ Recursos C++ não relacionados às classes Incompatibilidades entre C e C++ Classes

Leia mais

1. CAPÍTULO COMPUTADORES

1. CAPÍTULO COMPUTADORES 1. CAPÍTULO COMPUTADORES 1.1. Computadores Denomina-se computador uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Os primeiros eram capazes

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

Leia mais

Disciplina: Introdução à Informática Profª Érica Barcelos

Disciplina: Introdução à Informática Profª Érica Barcelos Disciplina: Introdução à Informática Profª Érica Barcelos CAPÍTULO 4 1. ARQUITETURA DO COMPUTADOR- HARDWARE Todos os componentes físicos constituídos de circuitos eletrônicos interligados são chamados

Leia mais

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

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

Leia mais

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

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

Leia mais

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

Manual do Desenvolvedor Criptografia de Arquivos do WebTA Manual do Desenvolvedor Criptografia de Arquivos do WebTA Versão 1.4 Índice 1. Objetivo..3 2. Processo..3 3. API de Criptografia - Biblioteca Java..4 3.1 WEBTACryptoUtil..4 3.1.1 decodekeyfile..4 3.1.2

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira jfabio@amprnet.org.br (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,

Leia mais

Visão Geral de Sistemas Operacionais

Visão Geral de Sistemas Operacionais Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Continuando as aulas sobre os fundamentos

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Prof. Jó Ueyama Apresentação baseada nos slides da Profa. Kalinka Castelo Branco, do Prof. Dr. Antônio Carlos Sementille e da Profa. Dra. Luciana A. F. Martimiano e nas transparências

Leia mais

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA 8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

Hardware de Computadores

Hardware de Computadores Placa Mãe Hardware de Computadores Introdução Placa-mãe, também denominada mainboard ou motherboard, é uma placa de circuito impresso eletrônico. É considerado o elemento mais importante de um computador,

Leia mais

Bruno Pereira Evangelista. www.brunoevangelista.com

Bruno Pereira Evangelista. www.brunoevangelista.com Bruno Pereira Evangelista www.brunoevangelista.com 2 Introdução Shaders Pipeline de Renderização Evolução dos Shaders Como Programar Shaders Programando Shaders com XNA Ferramentas Conclusões 3 Durante

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO.

UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO. UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA INE BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO Xen Hypervisor Glauco Neves 07132022 Guilherme Pacheco 07232063 INE 5412-0432

Leia mais

Curso de Instalação e Gestão de Redes Informáticas

Curso de Instalação e Gestão de Redes Informáticas ESCOLA PROFISSIONAL VASCONCELLOS LEBRE Curso de Instalação e Gestão de Redes Informáticas PROCESSADORES DE 64 BITS X PROCESSADORES DE 32 BITS José Vitor Nogueira Santos FT2-0749 Mealhada, 2009 Introdução

Leia mais

Unidade 13: Paralelismo:

Unidade 13: Paralelismo: Arquitetura e Organização de Computadores 1 Unidade 13: Paralelismo: SMP e Processamento Vetorial Prof. Daniel Caetano Objetivo: Apresentar os conceitos fundamentais da arquitetura SMP e alguns detalhes

Leia mais

Sistema Operacional Correção - Exercício de Revisão

Sistema Operacional Correção - Exercício de Revisão Prof. Kleber Rovai 1º TSI 22/03/2012 Sistema Operacional Correção - Exercício de Revisão 1. Como seria utilizar um computador sem um sistema operacional? Quais são suas duas principais funções? Não funcionaria.

Leia mais

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução Arquitetura e Organização de Computadores Capítulo 0 - Introdução POR QUE ESTUDAR ARQUITETURA DE COMPUTADORES? 2 https://www.cis.upenn.edu/~milom/cis501-fall12/ Entender para onde os computadores estão

Leia mais

Arquitetura e Organização de Computadores I

Arquitetura e Organização de Computadores I Arquitetura e Organização de Computadores I Interrupções e Estrutura de Interconexão Prof. Material adaptado e traduzido de: STALLINGS, William. Arquitetura e Organização de Computadores. 5ª edição Interrupções

Leia mais

Escalonamento no Linux e no Windows NT/2000/XP

Escalonamento no Linux e no Windows NT/2000/XP Escalonamento no Linux e no Windows NT/2000/XP 1 Escalonamento no Linux Os requisitos do escalonador do Linux eram: Apresentar boa performance em programas interativos, mesmo com carga elevada; Distribuir

Leia mais

INTRODUÇÃO BARRAMENTO PCI EXPRESS.

INTRODUÇÃO BARRAMENTO PCI EXPRESS. INTRODUÇÃO BARRAMENTO EXPRESS. O processador se comunica com os outros periféricos do micro através de um caminho de dados chamado barramento. Desde o lançamento do primeiro PC em 1981 até os dias de hoje,

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8 ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8 Índice 1. A Organização do Computador - Continuação...3 1.1. Processadores - II... 3 1.1.1. Princípios de projeto para computadores modernos... 3 1.1.2. Paralelismo...

Leia mais

Gerência de Memória RAM em Computadores com Mais de 4GB O sistema Windows x86 (32bits) não tem capacidade de reconhecer, fisicamente, mais que 3,X GB de RAM, a não ser que seja ativado, manualmente, o

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário

Leia mais

Edeyson Andrade Gomes

Edeyson Andrade Gomes Sistemas Operacionais Conceitos de Arquitetura Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Máquinas de Níveis Revisão de Conceitos de Arquitetura 2 Máquina de Níveis Máquina de níveis Computador

Leia mais

AULA 1. Informática Básica. Gustavo Leitão. gustavo.leitao@ifrn.edu.br. Disciplina: Professor: Email:

AULA 1. Informática Básica. Gustavo Leitão. gustavo.leitao@ifrn.edu.br. Disciplina: Professor: Email: AULA 1 Disciplina: Informática Básica Professor: Gustavo Leitão Email: gustavo.leitao@ifrn.edu.br Estudo de caso Empresa do ramo de seguros Presidência RH Financeiro Vendas e Marketing TI CRM Riscos Introdução

Leia mais

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 04 - Concorrência. Cursos de Computação

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 04 - Concorrência. Cursos de Computação Cursos de Computação Sistemas Operacionais Prof. M.Sc. Sérgio Teixeira Aula 04 - Concorrência Referência: MACHADO, F.B. ; MAIA, L.P. Arquitetura de Sistemas Operacionais. 4.ed. LTC, 2007. Mono x Multiprogramação

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D) Universidade Federal de Ouro Preto - UFOP Instituto de Ciências Exatas e Biológicas - ICEB Departamento de Computação - DECOM INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E 33 2015-2 1 AULA TEÓRICA 2

Leia mais

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web

Manual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web Manual do Publicador Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web Sumário Painel de Administração... 3 1 - Inserção de post... 5 2 Publicação de post com notícia na área headline (galeria de

Leia mais