Edison Gustavo Muenz. Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU
|
|
- Maria Laura Azeredo de Sintra
- 8 Há anos
- Visualizações:
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 Agenda Primeiras Placas de Vídeo Primeira GPU Arquitetura da GPU NVIDIA Arquitetura
Leia maisUNIVERSIDADE 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 maisPARALELIZAÇÃ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 maisHardware (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 maisProgramaçã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 maisInformá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 maisO 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 maisProgramaçã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 maisMemó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 maisLP 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 maisOrientaçã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 maisExperimentos 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 maisEstrutura 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 maisOrganizaçã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 maisFACULDADE 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 maisSistemas 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 maisCapacidade = 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 maisEsta 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 maisNotas 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 maisTais 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 mais7 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 maisProcessos 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 maisSistemas 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 maisPROGRAMAÇÃ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 maisINTRODUÇÃ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 maisARQUITETURA 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 maisTipos 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 maisAula 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 maisArquiteturas 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 maisfor 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 maisSistema 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 maisAlgoritmos 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 maisCapí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 maisSISTEMAS 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 maisMá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 maisAula 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 maisEdison 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 maisSistemas 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 maisArquitetura 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 maisProf. 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 maisIntroduçã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 maisIFPE. 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 mais5 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 maisEstruturas 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 maisSistemas 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 maisINSTITUTO 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 maisFundamentos 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 maisSistemas 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 maisA 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 mais3/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 maisIntroduçã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 maisSistemas 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 maisSistemas 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 maisCISC 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 maisCapí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 maisCapí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 maisDAS5102 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 maisArquitetura 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 maisArquitetura 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 mais3. 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 maisProgramaçã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 maisMEMÓ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 maisSistemas 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 maisIntroduçã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 mais1. 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 maisComponentes 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 maisUnidade 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 maisDisciplina: 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 maisBACHARELADO 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 maisProgramaçã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 maisManual 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 maisFundamentos 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 maisVisã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 maisDadas 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 maisLinguagem 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 maisSistemas 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 maisCAPÍ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 maisBARRAMENTO 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 maisHardware 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 maisBruno 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 maisUNIVERSIDADE 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 maisCurso 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 maisUnidade 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 maisSistema 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 maisArquitetura 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 maisArquitetura 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 maisEscalonamento 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 maisINTRODUÇÃ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 maisORGANIZAÇÃ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 maisGerê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 maisSistemas 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 maisEdeyson 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 maisAULA 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 maisSistemas 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 maisNotas 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 maisINTRODUÇÃ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 maisManual 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