3 Representação e Reconstrução de ADFs em GPU
|
|
- José Álvares Galindo
- 6 Há anos
- Visualizações:
Transcrição
1 3 Representação e Reconstrução de ADFs em GPU A estrutura clássica de uma ADF [24, 17] consiste de uma octree baseada em ponteiros, que armazena oito voxels por célula. Cada voxel corresponde a um valor de distância amostrado em um dos vértices da célula. Esta abordagem tem dois grandes problemas para uma implementação em GPU: 1. Uma vez que cada vértice da octree é compartilhado por várias células, a estrutura acaba por armazenar muitos voxels redundantes. Como a memória das GPUs é bastante limitada, redundâncias podem impedir que uma ADF caiba em memória de vídeo. 2. Percorrer octrees baseadas em ponteiros na GPU é complexo e ineficiente. Visto que as GPUs não têm suporte a recursão e nem operações de escrita livre em memória, é impraticável utilizar uma pilha para percorrer a octree. Mesmo que fosse viável implementar uma pilha, provavelmente o desempenho viria a sofrer por conta da baixa coerência do algoritmo. Para extrair o máximo do poder de processamento paralelo das GPUs, as próximas seções propõem soluções para reduzir a redundância de voxels e permitir que a octree seja percorrida sem uma pilha. 3.1 A Textura de Voxels A replicação de voxels pode fazer com que ADFs minimamente complexas excedam a capacidade de memória das GPUs modernas (em torno de 768 MB). Para controlar a redundância, é preciso desacoplar o armazenamento de voxels da estrutura da octree. Há várias soluções possíveis para este problema, com variados níveis de complexidade e eficiência. Uma solução muito simples que elimina toda redundância foi sugerida por Bærentzen [2]: utilizar uma tabela de dispersão 3-D para armazenar os voxels indexados pela posição do vértice. Porém, nessa solução cada célula acessada exigiria oito consultas à tabela de dispersão, o que afligiria o desempenho da estrutura e provavelmente tornaria seu uso inviável em aplicações interativas. Como o acesso aos voxels tem papel /crucial/ no desempenho, ele deve ser tão simples e coerente quanto possível.
2 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 30 Este trabalho propõe uma abordagem alternativa: armazenar os voxels em uma textura separada da octree, e fazer com que as células guardem ponteiros para os seus voxels. Apesar de soar como uma solução óbvia, na realidade é muito difícil empacotar todos os voxels em uma textura compacta sem replicá-los. Naturalmente, não faz sentido armazenar oito ponteiros em cada célula, já que os ponteiros tomariam quase tanta memória quanto oito amostras de distância. Para que esta abordagem faça sentido, os voxels pertencentes a uma célula precisam ser organizados em blocos contíguos, de maneira que cada célula possa guardar apenas um ponteiro (para o bloco) ao invés de oito. Em última análise, busca-se nesta abordagem: 1. Empacotar todos os voxels em uma textura 3-D compacta, com um único componente do tipo float. 2. Garantir que os voxels pertencentes à mesma célula estejam adjacentes em um bloco de texels. 3. Minimizar a replicação de voxels sempre que possível, empacotando juntos os voxels vizinhos de mesmo nível. A construção de uma textura de voxels pelos critérios acima não é uma tarefa trivial. Apesar de existirem algoritmos baseados em heurísticas capazes de produzir resultados com pouca redundância, encontrar a solução ótima é notoriamente um problema combinatorial NP-difícil, uma vez que o problema se trata de uma variante complexa do problema da mochila (0, 4) (1, 4) (3, 4) (4, 4) (0, 3) (1, 3) (3, 3) (4, 3) (0, 0) (1, 0) Textura de Voxels Voxel único. Voxel replicado. Figura 3.1: Uma quadtree (esquerda) e a sua textura de voxels (direita). Por simplicidade, a solução adotada nesta dissertação elimina apenas a redundância entre células irmãs. Isto é feito facilmente, armazenando os voxels de cada grupo de oito células irmãs em um bloco de 3x3x3 texels.
3 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 31 Uma vez que as octrees das ADFs são árvores cheias, todas as células, exceto a raiz, pertencem a um grupo de oito irmãs. As redundâncias permanecem entre outros tipos de células adjacentes (e.g. células primas) e entre células descendentes, mas esta solução simples reduz consideravelmente (em 57%) o tamanho da textura de voxels, e é suficiente para permitir que ADFs razoavelmente complexas caibam em memória de vídeo. Além disso, já que os voxels das células são organizados em blocos de 2x2x2 texels, é possível explorar a unidade de filtragem de textura das GPUs para obter praticamente de graça valores de distância interpolados trilinearmente. A Figura 3.1 ilustra esta solução em 2-D, com uma quadtree e a sua textura de voxels correspondente. Os voxels são numerados de um a dezoito, e voxels replicados são sombreados em cinza. A posição do bloco de voxels correspondente de cada célula é indicada entre parênteses, no centro das células. 3.2 Visão Geral da Representação das ADFs O espaço de uma ADF é um cubo unitário com o primeiro vértice na origem, como ilustrado na Figura 3.2. A reconstrução do campo de distância e o endereçamento de células é sempre feito neste espaço. A mesma convenção é usada para o espaço local das células da octree. y 1 x Bloco de Voxels Espaço da ADF z Célula Interna Espaços das Células Filhas Voxels para as Oito Células Filhas Figura 3.2: Visão geral da representação de ADF utilizada neste trabalho. As ADFs propostas neste trabalho são representadas em memória de vídeo através de três texturas tridimensionais: Textura de Voxels: armazena os voxels de cada grupo de oito células irmãs em blocos de 3x3x3 texels, como detalhado na Seção 3.1. A textura garante que os oito voxels de cada célula estão sempre juntos, em blocos de 2x2x2 texels.
4 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 32 Textura de Células: armazena cada célula da ADF em um texel. Cada texel guarda duas informações: o identificador da célula, e o endereço para o bloco de voxels da célula, na textura de voxels. Textura de Dispersão: descreve a hierarquia das células. As Seções 3.3 e 3.4 fornecem mais detalhes sobre esta textura. Como as octrees de ADFs são árvores cheias, as células-folha podem ser mantidas implícitas, o que reduz drasticamente (em até 87%) o tamanho da textura de células. Neste esquema, a textura de células armazena somente as células não-folha. Cada célula, ao invés de guardar um ponteiro para seu próprio bloco de voxels, passa a guardar um ponteiro para um bloco de 3x3x3 texels, que contém os voxels dos seus oito filhos (Figura 3.2). 3.3 Octrees Baseadas em Dispersão Espacial Tipicamente, as octrees de ADFs são implementadas com ponteiros. Porém, na arquitetura atual das GPUs, percorrer octrees com ponteiros é complexo e ineficiente. Para superar estas limitações, propõe-se o uso de uma octree que permita acesso aleatório às células. Dado um nível l da octree e um ponto p pertencente ao domínio, a célula de nível l que contém o ponto p deve ser obtida em tempo constante. Esta representação permite que a octree seja percorrida sem uma pilha, e com maior coerência. A solução baseia-se na idéia de uma octree definida implicitamente em uma textura 3-D. Semelhante à maneira como uma árvore binária completa pode ser representada implicitamente em um vetor 1-D, uma octree completa pode ser representada implicitamente em um vetor 3-D. É possível, então, formular uma função que calcula em tempo O (1) a posição de qualquer célula dentro do vetor 3-D. Evidentemente, o custo para se representar ADFs com octrees completas é impraticável, já que as ADFs são inerentemente esparsas e o espaço tomado pelas octrees completas é exponencial na altura da árvore. Como solução, um mecanismo de dispersão espacial 3-D é usado para compactar o vetor 3-D esparso onde a octree implícita é definida. Dados uma octree completa no cubo C = [0, 1) 3, um nível l e um ponto p C, a função S(l, p) = 2 l + 2 l p (3-1) retorna o índice 3-D da célula de nível l que contém o ponto p, e assim define implicitamente a octree no espaço U N 3 U = [ 1, 2 (sup l+1) 1 ] 3 (3-2)
5 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 33 onde sup l é o nível máximo da octree. Uma octree baseada em dispersão espacial é criada combinando-se a função S(l, p) com uma função de dispersão tridimensional H(k U). O acesso a uma célula é sempre feito em dois passos: 1. A função S(l, p) é usada para gerar uma chave k = S(l, p) para a célula que deseja-se acessar. 2. A função H(k) recebe como entrada a chave e calcula o endereço real da célula em um vetor compacto, usando como base um algoritmo de dispersão espacial. Esta função também pode indicar um erro, caso a chave não corresponda a nenhuma célula da octree. Já que a função S(l, p) é claramente O(1), o acesso às células poderá ser feito em tempo constante se H(k) também for O(1). A Seção 3.4 mostra como é possível garantir que a função de dispersão espacial seja de fato O(1). A Figura 3.3 ilustra os passos necessários para que os voxels nos vértices de uma célula sejam acessados. Inicialmente, a função S(l, p) gera uma chave k U, que identifica a célula de nível l que contém o ponto p. Esta chave é passada à função de dispersão 3-D H(k), que utiliza uma textura de dispersão auxiliar para calcular a posição real da célula em uma textura de células compacta. A partir do texel da célula obtém-se a posição v do bloco de voxels da célula na textura de voxels. Finalmente, o acesso aos voxels é representado na figura pela função A(v). S(l, p) Textura de Dispersão q Textura de Voxels k H(k) Domínio U v Textura de Células A(v) A(H(S(l, p))) Figura 3.3: Ilustração em 2-D do acesso aos voxels nos vértices de uma célula de uma octree baseada em dispersão espacial. Qualquer algoritmo que precise percorrer a octree deve trabalhar com o conceito de uma posição p e um nível l correntes. Através da função S(l, p), esses valores indicam qual é a célula corrente. Desse modo, cada passo de um algoritmo de percorrimento pode:
6 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 34 a) Pular para uma célula adjacente, somando-se ±2 l a um ou mais componentes do vetor 3-D p. b) Subir ou descer na hierarquia através do decremento ou incremento de l, respectivamente. Por exemplo, a chamada S ( l, p + ( 2 l, 0, 0) ) fornece a chave para a célula à esquerda da célula corrente. 3.4 Dispersão Espacial Perfeita A escolha do algoritmo de dispersão 3-D é determinante na eficiência de uma octree baseada em dispersão espacial. Infelizmente, os algoritmos de dispersão tradicionais são inapropriadas para arquiteturas SIMD (Single- Instruction, Multiple-Data) como as GPUs. No artigo [20], Lefebvre e Hoppe apontam que os algoritmos de dispersão costumam resolver colisões realizando uma seqüência de acessos (probes) na tabela de dispersão. O número desses acessos pode variar para cada consulta, em função do número de colisões ocorridas para cada chave. Este tipo de tratamento para as colisões é ineficiente nas GPUs, porque o paralelismo SIMD faz com que todos os dados de um mesmo bloco esperem sempre pelo maior número de acessos. Por exemplo, em um bloco de 16 chaves que devem ser consultadas, se 15 das 16 consultas fizerem menos de 3 acessos e apenas uma consulta fizer 10 acessos, todas as 16 consultas levarão o tempo de 10 acessos. Nas GPUs, o paralelismo SIMD ocorre no processamento de fragmentos, após a rasterização. Geralmente a tela é dividida em blocos com tamanhos que variam entre 4x4 até 16x16 fragmentos, e cada bloco é processado de forma independente por um grupo de processadores. Até a introdução das GeForce 8, no final de 2006, todas as GPUs eram equipadas com processadores vetoriais especializados no processamento de fragmentos. Desde então, as novas GPUs abandonaram os processadores vetoriais e adotaram uma arquitetura escalar baseada em processadores de fluxo (stream processors) [18]. A nova arquitetura traz um aumento de desempenho de até dez vezes, ao permitir maior paralelismo. No entanto, o modelo de processamento para fragmentos continua sendo SIMD. Para tirar bom proveito do paralelismo SIMD, todas as consultas devem realizar o mesmo número de acessos à tabela de dispersão. Isto pode ser conseguido se uma função de dispersão for pré-calculada de forma a garantir
7 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 35 que não existam colisões entre as chaves de uma octree. Neste caso, todas as consultas seriam feitas com um único acesso, através de uma função de dispersão perfeita. As funções de dispersão perfeitas são funções injetoras para um certo domínio (e.g. conjunto de chaves). Quando a cardinalidade do contradomínio (a tabela de dispersão) é igual à cardinalidade do domínio, a função de dispersão perfeita é mínima. Infelizmente, as funções de dispersão perfeitas mínimas são extremamente raras. Por isso, na prática utilizam-se funções não-mínimas com um contradomínio de tamanho aceitável, que desperdice pouca memória. Este trabalho utiliza dispersão 3-D perfeita para representar octrees através da técnica exposta na Seção 3.3. Neste esquema, a função H(k) é gerada para um conjunto estático de células, de forma que cada chave k seja mapeada para um texel diferente da textura de células. As subseções seguintes oferecem uma visão geral de como as funções de dispersão 3-D perfeitas são geradas, e como elas são utilizadas em GPU Função de Dispersão Espacial Perfeita O esquema de dispersão espacial perfeita utilizado neste trabalho é baseado no método proposto por Lefebvre e Hoppe [20]. Este método, projetado especialmente para GPUs, permite armazenar um conjunto de dados esparsos em uma textura compacta através de uma função de dispersão 2-D ou 3-D. A função funciona com um número fixo de operações aritméticas e um único acesso a textura, o que a torna extremamente eficiente. No artigo [20], Lefebvre e Hoppe relatam que o método é capaz de compactar elementos espalhados por uma textura de em uma textura densa de As funções de dispersão espacial são definidas em um domínio U uma grade d-dimensional com u = ū d elementos, denotada por Z d ū = [0, ū 1] d. Toda função de dispersão perfeita h(p) é restrita a um subconjunto S U de n elementos, onde cada posição p S possui um valor associado D(p). O objetivo da função de dispersão é mapear o conjunto de valores esparsos D(p) em uma textura compacta H[h(p)], onde: A textura H é um vetor d-dimensional, de tamanho m = m d n, que contém todos os valores {D(p) : p S}. A função h(p) : U H é injetora quando restrita a S. Ou seja, cada ponto p S é mapeado para uma posição única em H.
8 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 36 A função de dispersão espacial perfeita proposta por Lefebvre e Hoppe [20] é dada por onde: h(p) = (h 0 (p) + Φ [h 1 (p)]) mod m (3-3) A textura Φ, denominada textura de solução, é um vetor d-dimensional, de tamanho r = r d, que contém vetores d-dimensionais. A função h 0 (p) mapeia o ponto p do domínio U para a textura H, utilizando apenas endereçamento modular (p mod m). A função h 1 (p) mapeia o ponto p do domínio U para a textura Φ, também utilizando endereçamento modular (p mod r). Para que este método de dispersão espacial funcione, é preciso encontrar uma textura Φ de tamanho r = r d que resolva todas as colisões de h(p), p S. Como ilustrado na Figura 3.4 (à direita), cada elemento de Φ guarda uma translação que é aplicada aos pontos {h 1 1 (q) S}. Para uma textura Φ suficientemente grande, essa translação pode resolver todas as colisões da função de dispersão. A idéia é que o tamanho m da textura H seja sempre o menor possível para acomodar os n elementos de S, mas que a textura Φ possa crescer até um tamanho que permita uma solução para todas as colisões. Como um texel de Φ tem normalmente um custo de memória menor que um texel de H, é geralmente preferível que r cresça, e não m. Não obstante, quase sempre a textura Φ permanece menor que H. p p S U S = n Domínio U (tamanho u = u d ) h h 1 (p) 1 q Textura de Solução Ф (tamanho r = r d ) h 1 Ф[q] h h 0 (p) 0 + D(p) = H[h(p)] s = h(p) Textura H (tamanho m = m d ) 1 h 1 (q) S U Domínio U h 0 Ф[q] q Textura H Textura Ф Figura 3.4: Método de dispersão perfeita proposto por Lefebvre e Hoppe [20]. A implementação da função de dispersão h(p) em GPU requer um número fixo de instruções e um único acesso a textura. Todas as operações de módulo podem vir de graça se as texturas forem configuradas para o modo de endereçamento wrap. Observe que, neste esquema, a textura de células referida na Seção 3.3 seria H, enquanto que a textura de dispersão seria Φ. Apesar de funcionar relativamente bem para a compactação de texturas onde os domínios são geralmente menores que este método não
9 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 37 escala bem para domínios maiores, que possam conter qualquer inteiro. Em particular, esta limitação compromete o uso do método para a representação de octrees (Seção 3.3), já que o domínio de uma octree baseada em dispersão espacial cresce muito rápido e.g para uma octree de altura 10 e para uma octree de altura 12. A razão da baixa escalabilidade da função de dispersão proposta por Lefebvre e Hoppe é que, sempre que dois pontos p 1, p 2 S forem divisíveis simultaneamente por m e r, não existirá instância de Φ com tamanho r que torne a função injetora. Nesses casos, a estratégia proposta seria aumentar r, mas para domínios grandes e com muitos elementos, é comum que não exista valor de r aceitável que satisfaça este critério. Lefebvre e Hoppe mencionam no trabalho [20] que domínios grandes, onde ū > m r, podem gerar problemas; mas argumentam que, na prática, r é sempre grande o suficiente para que ū m r. No entanto, este problema foi observado na prática ao se tentar gerar funções de dispersão perfeitas para octrees esparsas de altura superior a 8. Para a grande maioria das octrees, o algoritmo despendia horas procurando uma instância válida de Φ, sem sucesso. Esta dissertação propõe duas alterações simples na função h(p), para permitir que ela funcione mesmo quando duas chaves p 1, p 2 S forem simultaneamente divisíveis por m e r. A saber: A textura de solução Φ passa a armazenar um valor w (escalar) a mais por texel. No caso 3-D, a textura passaria a ter quatro canais. A função h 0 (p), responsável por mapear p U em H utilizando (p mod m), é substituída pela operação (p mod w). Com as alterações, a função fica da seguinte forma: h(p) = ((p mod w) + (x, y, z)) mod m, onde (x, y, z, w) = Φ [h 1 (p)] Esta nova função concede um grau de liberdade adicional para o mecanismo de dispersão. A chance de encontrar uma função injetora aumenta consideravelmente, enquanto que o custo da função mantém-se praticamente o mesmo. Quando dois pontos p 1, p 2 S forem simultaneamente divisíveis por m e r, o valor w pode ser escolhido de forma que p 1 e p 2 não colidam. Com este novo método, o tempo médio de geração para as funções de dispersão perfeitas das octrees baixou, de horas, para menos de um minuto.
10 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica Geração da Função de Dispersão Espacial Perfeita A geração de uma função de dispersão espacial perfeita pelo método descrito na Seção envolve encontrar tamanhos m e r, e valores adequados para a textura Φ, de maneira a tornar a função h(p) injetora quando restrita a S. Naturalmente, deseja-se que m e r sejam tão pequenos quanto possível. A estratégia sugerida por Lefebvre e Hoppe [20] é que H seja sempre a menor textura regular capaz de comportar os n elementos de S; ou seja, o menor tamanho m tal que m = m d n. Já o tamanho da textura Φ é estabelecido como o menor valor r para o qual o algoritmo de geração (da função de dispersão perfeita) consegue encontrar uma função injetora. O problema de encontrar valores para a textura Φ é equivalente ao problema de compressão de matrizes esparsas, que é NP-completo. Por isso, o algoritmo proposto por Lefebvre e Hoppe [20] baseia-se em uma heurística gulosa e probabilística. A geração de uma textura Φ de tamanho r pode requerer várias tentativas, especialmente quando r é próximo do tamanho ótimo. Uma abordagem possível para a geração da textura Φ consiste em começar com um valor de r pequeno, fazer múltiplas tentativas para cada r, e caso uma textura de solução válida não seja encontrada, selecionar um valor de r maior e repetir o processo. O algoritmo guloso sugerido por Lefebvre e Hoppe [20] para preencher a textura Φ ainda sem considerar o componente adicional w, proposto nesta dissertação segue aos seguintes passos: 1. Uma grade d-dimensional Φ, com o mesmo tamanho da textura Φ, é criada. Cada célula guarda uma lista de pontos e uma translação. 2. Todos os pontos p S são mapeados para Φ através da função h 1 (p). 3. As células da grade Φ são ordenadas de acordo com o número de pontos mapeados para cada uma delas; ou seja, h 1 1 (q). 4. Uma grade d-dimensional H, com o mesmo tamanho da textura H, é criada. Cada célula guarda um booleano que indica se ela já foi ocupada. Todas as células são inicialmente marcadas vazias. 5. Para cada célula de Φ, em ordem decrescente de pontos mapeados, busca-se uma translação t que, quando aplicada ao pontos {h 1 1 (q)} através da função h(p), mapeie-os para células vazias de H. A busca começa por um t aleatório e depois prossegue linearmente.
11 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 39 Caso uma translação válida seja encontrada, ela é salva na célula. As células de H ocupadas pelos pontos são marcadas ocupadas. Caso nenhuma translação seja válida, o algoritmo falha. 6. A textura Φ é preenchida com as translações salvas em Φ. A idéia deste algoritmo guloso é tentar resolver os casos mais difíceis primeiro; ou seja, achar valores para as células de Φ que têm mais pontos. No último estágio, quando h 1 1 (q) = 1, a solução é trivial e o algoritmo não pode mais falhar. Esta heurística aumenta consideravelmente as chances de sucesso, apesar de o algoritmo ainda depender da sorte para que as translações escolhidas nos primeiros passos se encaixem. Observe que, em geral, ao aumentar r, o número de pontos mapeados em cada célula de Φ diminui, e a chance de sucesso do algoritmo aumenta. Quando o componente w é adicionado à textura Φ, um novo passo precisa ser acrescentado ao algoritmo que gera Φ. Para que as translações de Φ sejam calculadas, as células já devem ter um valor de w associado. Por isso, o novo passo deve ser introduzido imediatamente após o passo 3. Para cada célula, o valor de w deve ser determinado pelo seguinte algoritmo: Algoritmo 3.1 Cálculo do componente w da textura Φ. 1: function compute w(c Φ ) calcula w para uma célula C Φ 2: if not contain collisions(c Φ, m) then testa um w neutro 3: return m a célula não contém colisões 4: end if 5: w 1 procura por um valor de w que resolva as colisões 6: repeat 7: w next coprime(w, m, r) 8: if w > m then 9: error( nenhum valor de w pode resolver as colisões ) 10: end if 11: until not contains collisions(c Φ, w) 12: return w 13: end function A função contains collisions(c Φ, w) testa se, utilizando um certo valor de w na função de dispersão, uma certa célula de Φ contém colisões. Já a função next coprime(c, a, b) retorna o primeiro número maior que c que não seja divisível nem por a nem por b. Os valores de w que podem resolver as colisões dentro de uma célula são sempre co-primos de m e r; por isso, a função só testa valores que satisfaçam este critério.
12 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica Reconhecimento de Células Inexistentes A função de dispersão espacial h(p), definida na Seção 3.4.1, é injetora somente quando restrita ao conjunto de pontos para o qual ela foi gerada. Caso a função seja usada com qualquer outro ponto v / S, o mapeamento é feito para a posição de um ponto p S aleatório. Este esquema é suficiente quando se tem garantia de que as chaves consultadas serão sempre válidas. Porém, na implementação de uma octree baseada em dispersão espacial, deve ser possível consultar se uma determinada célula da octree existe ou não. Infelizmente, a função h(p) não dispõe de informação suficiente para gerar esta resposta. Este problema pode ser solucionado de forma simples se os elementos do domínio forem armazenados no contradomínio da função. Ou seja, se os pontos p S forem armazenados nos texels correspondentes da textura H. Desta forma, é possível verificar se um ponto p consultado pertence ou não a S, testando se o texel H[h(p)] contém p. Na implementação de uma octree baseada em dispersão espacial, a solução análoga seria armazenar as chaves das células, geradas pela função S(l, p), na textura de células. Porém, para poupar memória, ao invés de armazenar as chaves diretamente, a solução adotada armazena identificadores que são gerados a partir das chaves das células. Esta técnica requer 4 bytes por célula da octree, ao invés dos 12 necessários para armazenar uma chave. 3.5 Reconstrução do Campo de Distância O primeiro passo no sentido de reconstruir o campo de distância em um certo ponto p é encontrar a menor célula da ADF que contenha p. Uma vez encontrada esta célula, o valor de distância no ponto pode ser obtido trivialmente através de interpolação trilinear com os voxels da célula. Esta interpolação pode ser feita praticamente de graça, pela GPU, se a opção de filtragem trilinear estiver habilitada para a textura de voxels. Encontrar a menor célula da ADF que contenha p envolve uma busca na octree. Graças à representação baseada em dispersão espacial que permite acesso aleatório às células esta busca pode ser feita de múltiplas formas. Em todos os casos, a função S(l, p) é usada para obter a célula de nível l que contém p. O objetivo é encontrar o maior valor de l para o qual exista uma célula. Três alternativas foram testadas: 1. Busca linear. 2. Busca binária.
13 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica Busca linear com coerência. Abaixo encontram-se pseudo-códigos para estes algoritmos. Por questões de simplicidade, os códigos desprezam o fato de que as células-folha da octree são mantidas implicitamente. Busca Linear: começa pelo primeiro nível da octree (l = 1) e vai descendo um nível de cada vez, até encontrar a menor célula que contenha p. 1: function query(p) busca a menor célula que contém p 2: v menor célula encontrada até o momento 3: for l 1, do 4: k S(l, p) chave para a célula de nível l que contém p 5: v H(k) acesso à textura de células 6: if not exists(v, k) then verifica se a célula existe 7: break caso não existam mais células, pára 8: end if 9: v v atualiza a menor célula 10: end for 11: return v retorna a menor célula 12: end function Este é o mais simples dos três algoritmos testados. Alternativamente, este algoritmo poderia começar a busca pelo nível máximo da octree, e retornar a primeira célula encontrada de baixo para cima. Busca Binária: realiza uma busca binária entre o primeiro nível e o nível máximo da octree, em busca do nível da menor célula. 1: function query(p) busca a menor célula que contém p 2: v menor célula encontrada até o momento 3: l min 1 menor nível válido da ADF 4: l max maxlevel maior nível válido da ADF 5: while l min l max do 6: l 1(l 2 min + l max ) 7: k S(l, p) chave para a célula de nível l que contém p 8: v H(k) acesso à textura de células 9: if exists(v, k) then verifica se a célula existe 10: v v célula existe; atualiza a menor célula 11: l min l + 1 busca por células abaixo do nível l 12: else nenhuma célula encontrada neste nível 13: l max l 1 busca por células acima do nível l 14: end if
14 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 42 15: end while 16: return v retorna a menor célula 17: end function A busca binária pode oferecer bom desempenho para árvores muito altas. Porém, como as ADFs dificilmente ultrapassam o nível 12, constatou-se que não há vantagem na busca binária. Testes com ADFs de nível 8 mostraram que, em CPU, a busca binária é tão rápida quanto a busca linear. Em GPU, porém, a busca binária foi mais lenta que a linear. Busca Linear com Coerência: realiza uma busca linear a partir de um nível l qualquer. Se uma célula existir no nível l, a busca continua a descer até encontrar a menor célula. Caso contrário, a busca sobe nível a nível e retorna a primeira célula encontrada de baixo para cima. 1: function query(p, l) 2: k S(l, p) chave para célula de nível l que contém p 3: v H(k) acesso à textura de células 4: if exists(v, k) then verifica se a célula existe 5: while l < maxlevel do a célula existe; tenta descer mais 6: k S(l + 1, p) tenta obter a célula um nível abaixo 7: v H(k) 8: if exists(v, k) then 9: l l + 1 atualiza último nível válido 10: v v atualiza menor célula 11: else 12: break não existem mais células abaixo 13: end if 14: end while 15: else a célula não existe 16: while l > 0 do busca a menor célula de baixo para cima 17: l l 1 tenta obter uma célula um nível acima 18: k S(l, p) 19: v H(k) 20: if exists(v, k) then 21: break menor célula encontrada 22: end if 23: end while 24: end if 25: return v, l retorna a menor célula e o último nível válido 26: end function
15 Campos de Distância Amostrados Adaptativamente com Aceleração por Placa Gráfica 43 Esta técnica permite que os algoritmos explorem coerência espacial. Por exemplo, considere um algoritmo de lançamento de raios para visualização volumétrica que precise amostrar o campo de distância em intervalos regulares ao longo de um raio. Este algoritmo pode guardar o nível da célula utilizada em cada passo, e no passo seguinte recomeçar a busca a partir desse nível. Para ADFs de nível 9, esta estratégia mostrou ser em torno de 30% mais rápida que uma busca linear comum. A implementação real desta função é feita em GLSL (OpenGL Shading Language) e encontra-se disponível nos apêndices. As funções acima retornam o endereço v do bloco de voxels da menor célula que contém um ponto p. Esse endereço é um vetor 3-D, e indica a posição central do primeiro texel do bloco de voxels da célula. Com a opção de filtragem trilinear habilitada para a textura de voxels, o seguinte comando GLSL pode ser utilizado para reconstruir o valor de distância no ponto p: ( ) v + p cell texture3d voxelt exture, voxeltexturedim (3-4) onde p cell é o ponto p transformado para o espaço local da célula, e voxeltexturedim são as dimensões da textura de voxels.
Matemática Discreta 12
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação Matemática Discreta 12 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br - www.univasf.edu.br/~jorge.cavalcanti 1 Introdução
Leia maisFUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5. Cristina Boeres
FUNDAMENTOS DE ARQUITETURAS DE COMPUTADORES MEMÓRIA CACHE CAPÍTULO 5 Cristina Boeres Introdução! Diferença de velocidade entre Processador e MP O processador executa uma operação rapidamente e fica em
Leia maisOrganização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Memória Cache Slide 1 Introdução Tamanho Função de Mapeamento Política de Escrita Tamanho da Linha Número de Memórias Cache Cache em Níveis Slide 2 Introdução
Leia maisMemória. Memória Cache
Memória Memória Cache Revisão - Memória Principal Memória que armazena os dados e programas em linguagem de máquina em execução corrente Razoavelmente barata Tempo de acesso da ordem de nano-segundos a
Leia maisSUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca
ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização
Leia mais6 Resultados Estratégias Consideradas
Resultados 38 6 Resultados Este capítulo mostra algumas estratégias consideradas antes de chegarmos ao sistema proposto, mostra também os resultados obtidos ilustrados por diversos experimentos computacionais,
Leia maisLinguagem de Maquina II. Visão Geral
Linguagem de Maquina II Visão Geral Revisão A linguagem de máquina é composta de seqüências binárias (1's e 0's) São interpretadas como instruções pelo hardware A linguagem de montagem e a linguagem de
Leia maisEndereçamento Aberto
Endereçamento Aberto ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 11/2008 Material baseado em slides
Leia maisTabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou
Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou também denominada de tabela hashing com endereçamento aberto.
Leia maisPrincípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade
Memória Cache Princípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade Temporal Um item referenciado tende a
Leia maisHashing: conceitos. Hashing
Hashing: conceitos hashing é uma técnica conhecida como espalhamento, mapeamento ou randomização que tenta distribuir dados em posições aleatórias de uma tabela (array) associa cada objeto (de um determinado
Leia maisLinguagens de Programação Aula 11
Linguagens de Programação Aula 11 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Uma definição de subprograma descreve as ações representadas pelo subprograma Subprogramas podem ser funções
Leia maisÁrvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo
PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó
Leia maisÁRVORES E ÁRVORE BINÁRIA DE BUSCA
ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática
Leia maisProf. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca
Dispositivos de Saída e SCC0250 - Computação Gráca Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade
Leia maisEdital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome
Leia maisTransformação de Chave. (Hashing)
UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Transformação de Chave (Hashing) e Gomes da Costa yandre@din.uem.br 1 Transformações de Chave, ou Tabela Hash, ou Tabelas de Dispersão; Hashing
Leia maisESTRATÉGIAS DE ALOCAÇÃO AULA 11 Sistemas Operacionais Gil Eduardo de Andrade
ESTRATÉGIAS DE ALOCAÇÃO AULA 11 Sistemas Operacionais Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro do Prof. Dr. Carlos Alberto Maziero, disponível no link: http://dainf.ct.utfpr.edu.br/~maziero
Leia maisA inserção da chave 6 da árvore acima resulta na árvore abaixo.
149 Árvores B+ As operações nas árvores B+ não são muito diferentes das operações das árvores B. Inserir uma chave em uma folha que ainda tenha algum espaço exige que se coloque as chaves desta folha em
Leia maisMatrizes esparsas: definição
Matrizes esparsas: definição o objetivo é mostrar os métodos de armazenamento e manipulação de matrizes esparsas esparsidade de uma matriz é a relação entre o número de elementos nulos de uma matriz e
Leia maisPIPELINE. Introdução ao Pipeline. PIPELINE Ciclo de Instruções. PIPELINE Ciclo de Instruções. PIPELINE - Exemplo. PIPELINE Considerações
Arquitetura de Computadores Introdução ao Pipeline PIPELINE Linha de Montagem A produção é dividida em várias etapas Produtos em etapas distintas podem ser desenvolvidos separadamente Pode ser Aplicado
Leia maisModelagem Geométrica. André Tavares da Silva. Capítulo 12 do Foley Capítulo 4 de Azevedo e Conci Capítulo 11 de Mortenson
Modelagem Geométrica André Tavares da Silva andre.silva@udesc.br Capítulo 12 do Foley Capítulo 4 de Azevedo e Conci Capítulo 11 de Mortenson Representações Decomposição Espacial Quadtrees Octrees BSPtree
Leia maisÁrvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo
PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó
Leia maisArquitetura de Computadores. Processamento Paralelo
Arquitetura de Computadores Processamento Paralelo 1 Multiprogramação e Multiprocessamento Múltiplas organizações de computadores Single instruction, single data stream - SISD Single instruction, multiple
Leia mais4 Impostores com Relevo
63 4 Impostores com Relevo I just wish... I wish I knew what I'm supposed to do. That's all. I just wish I knew. (The Matrix) 4.1 Introdução Os objetos modelados por texturas com relevo, por corrigirem
Leia maisDicionários. Prof. César Melo
Dicionários Prof. César Melo Definição Estruturas que permitem a recuperação da informação a partir do seu valor; Contrasta com filas e pilhas que é posicional; Três operações: Inserção(k, d), chave k;
Leia mais4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos
46 4 Modelos Propostos para Otimização de Planejamentos com Restrições de Precedência 4.1 Representação com Algoritmos Genéticos Para definir a representação de um modelo para problemas de planejamento
Leia maisComputação Gráfica. Representação e Modelagem
Computação Gráfica Representação e Modelagem Professora: Sheila Cáceres Baseado nos slides da Prof. Soraia Musse Modelagem Área da Computação Gráfica que estuda a criação de modelos dos objetos reais.
Leia maisOrganização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I BARRAMENTO Slide 1 Sumário Introdução Componentes de Computador Funções dos Computadores Estruturas de Interconexão Interconexão de Barramentos Slide 2 Introdução
Leia maisINTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ACESSO, ATRIBUTOS E OPERAÇÕES COM ARQUIVOS PROFESSOR CARLOS MUNIZ
INTRODUÇÃO À TECNOLOGIA DA OPERAÇÕES COM ARQUIVOS PROFESSOR CARLOS MUNIZ INTRODUÇÃO O Sistema de Arquivos é o modo como as informações são armazenadas nos dispositivos físicos de armazenamento, exemplo
Leia maisÁrvores & Árvores Binárias
Árvores & Árvores Binárias Problema Implementações do TAD Lista Linear Lista encadeada eficiente para inserção e remoção dinâmica de elementos, mas ineficiente para busca Lista seqüencial (ordenada) Eficiente
Leia maisTransformação de Chave - Hashing
UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Transformação de Chave (Hashing) e Gomes da Costa yandre@din.uem.br 1 Transformações de Chave, ou Tabela Hash, ou Tabelas de Dispersão; Hashing
Leia maisTabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:
Tabelas Hash Tabelas Hash O uso de listas ou árvores para organizar informações é interessante e produz bons resultados. Porem, em nenhuma dessas estruturas se obtém o acesso direto a alguma informação,
Leia maisESTRUTURA DE DADOS E ALGORITMOS. Hashing (Tabela de Dispersão) Cristina Boeres
ESTRUTURA DE DADOS E ALGORITMOS Hashing (Tabela de Dispersão) Cristina Boeres Motivação! Os métodos de pesquisa vistos até agora buscam informações armazenadas com base na comparação de suas chaves! Para
Leia maisSSC0611 Arquitetura de Computadores
SSC0611 Arquitetura de Computadores 5ª e 6ª Aulas Revisão de Hierarquia de Memória Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br 1 Memória Memória Todo componente capaz de armazenar bits de informação
Leia maisFundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 6 Gerenciamento de Memória Prof. Galvez Considerações Gerais Multiprogramação implica em manter-se vários processos em memória Memória necessita ser alocada de
Leia maisTabelas de Hash MBB. Novembro de Algoritmos e Complexidade LEI-LCC
Tabelas de Hash Algoritmos e Complexidade LEI-LCC 2010-2011 MBB Novembro de 2010 Tabelas e Acesso a Informação As estruturas de dados apresentadas anteriormente têm como objectivo o armazenamento de informação,
Leia maisIntrodução Métodos de Busca Parte 1
Introdução Métodos de Busca Parte 1 SCC-201 Introdução à Ciência da Computação II Rosane Minghim 2009 Importância em estudar busca Busca é uma tarefa muito comum em computação? Vários métodos e estruturas
Leia maisQUESTÕES DE PROVAS ANTIGAS
CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus
Leia maisAcesso Sequencial Indexado
Acesso Sequencial Indexado Utiliza o princípio da pesquisa seqüencial cada registro é lido seqüencialmente até encontrar uma chave maior ou igual a chave de pesquisa. Providências necessárias para aumentar
Leia maisÁrvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura
Árvores B Prof. Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Fonte: Material da Prof a Ana Eliza Lopes Moura Situação Problema Memória Principal Volátil e limitada Aplicações Grandes
Leia maisCapítulo 11 Sistemas de Arquivos
Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo Sistemas de s Introdução O armazenamento e a recuperação de informações
Leia maisTabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?
Tabelas Hash O Que é uma Tabela Hash? Nesta aula são discutidos modos de armazenar informações em um vetor, e depois procurar por uma informação Tabelas Hash constituem uma abordagem comum para o problema
Leia maisTabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I
Tabelas Hash Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa
Leia maisCapítulo 8: Memória Principal. Operating System Concepts 8 th Edition
Capítulo 8: Memória Principal Silberschatz, Galvin and Gagne 2009 Objetivos Fornecer uma descrição detalhada das várias formas de organizar a memória do computador Discutir várias técnicas de gerenciamento
Leia maisCONJUNTO DE INSTRUÇÕES
CONJUNTO DE INSTRUÇÕES 1 CARACTERÍSTICAS DE INSTRUÇÕES DE MÁQUINA Quando um programador usa uma linguagem de alto-nível, como C, muito pouco da arquitetura da máquina é visível. O usuário que deseja programar
Leia maisCaracterização de Sistemas Distribuídos
Caracterização de Sistemas Distribuídos Roteiro Conceitos de Hardware Conceitos de Software Classificação de Flynn Classificação baseada no acesso a memória 2 Conceitos de HW Múltiplas CPUs Diferentes
Leia maisArquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Desenvolvimento de Aplicações Paralelas
Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano Desenvolvimento de Aplicações Paralelas (gec.di.uminho.pt/lesi/ap10203/aula06aplicaçõespar.pdf) João Luís Ferreira Sobral Departamento
Leia maisBuscas Informadas ou Heurísticas - Parte III
Buscas Informadas ou Heurísticas - Parte III Prof. Cedric Luiz de Carvalho Instituto de Informática - UFG Mestrado em Ciência da Computação / 2006 BUSCA SMA* (Simplified Memory-Bounded A*) BUSCA SMA* (Simplified
Leia maisOrganização de Computadores
Organização de Computadores Aula 25 Conjunto de Instruções: Modos de Endereçamento e Formatos Rodrigo Hausen 11 de novembro de 2011 http://cuco.pro.br/ach2034 1/26 Apresentação 1. Bases Teóricas 2. Organização
Leia maisEA075 Memória virtual
EA075 Memória virtual Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1 Motivação Problema: programas cujos tamanhos ultrapassavam
Leia maisCorreção de Erros. Erros de memória de semicondutores podem ser:
Correção de Erros Erros de memória de semicondutores podem ser: Erros graves que constitui um defeito físico permanente; Erros moderados, onde a(s) célula(s) não são capazes de armazenar os dados ou fazem
Leia maisGerência de Memória. Paginação
Gerência de Memória Paginação Endereçamento Virtual (1) Espaço de endereçamento dos processos não linearmente relacionado com a memória física Cada vez que são usados, os endereços virtuais são convertidos
Leia maisindexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016
indexação e hashing Construção de Índices e Funções Hash Diego Gomes Tomé - MSc. Informática Orientador: Prof. Dr. Eduardo Almeida October 13, 2016 Universidade Federal do Paraná indexação e hashing Índices
Leia maisSistemas Operacionais
Sistemas Operacionais GERÊNCIA da MEMÓRIA MACHADO/MAIA: CAPÍTULO 09 Prof. Pedro Luís Antonelli Anhanguera Educacional Gerenciamento da Memória Programas precisam ser trazidos para a memória para serem
Leia maisProgramação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Árvores Dados organizados de maneira hierárquica Exemplos: arquivos em diretórios, subdivisão de espaço 2D em um
Leia maisClassificação e Pesquisa de Dados. Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos
Classificação e Pesquisa de Dados Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos UFRGS INF1124 Arquivo indexado - AI Indicação de uso Baixa freqüência de acessos seqüenciais
Leia maisIntrodução Paradigmas
Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens
Leia maisACH2025. Laboratório de Bases de Dados Aula 8. Indexação e Hashing Parte 1. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO
ACH2025 Laboratório de Bases de Dados Aula 8 Indexação e Hashing Parte 1 Professora: Fátima L. S. Nunes Conceitos básicos Boa parte das consultas a BD referem-se a apenas uma parte pequena dos registros.
Leia maisDicionários. TAD Orientado a conteúdo
Dicionários TAD Orientado a conteúdo Dicionários efinição: Tipo abstrato de dados orientado a onteúdo. Contrasta com as PILHAs e FILAs que são orientadas a posição. perações implementadas: Inserir(d,x)
Leia maisÁrvores & Árvores Binárias
SCE 182 SCC122 Algoritmos Estruturas e Estruturas de Dados de Dados I Árvores & Árvores Binárias Prof. Material Original: Walter Aoiama Nagai; Maria das Graças Volpe Nunes; Definições Árvore T é um conjunto
Leia maisComputadores e Programação (DCC/UFRJ)
Computadores e Programação (DCC/UFRJ) Aula 3: 1 2 3 Abstrações do Sistema Operacional Memória virtual Abstração que dá a cada processo a ilusão de que ele possui uso exclusivo da memória principal Todo
Leia maisAmbiente de tempo de Execução Cap. 7
Ambiente de tempo de Execução Cap. 7 Introdução Subdivisão da memória usada pelo programa em tempo de execução Segmento de Código Segmento Estático (segmento de dados) Pilha Área de memória livre Heap
Leia maisAlgoritmos de pesquisa. Tabelas de dispersão/hash
Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor. Se o vetor não está ordenado, a pesquisa requer O(n) de complexidade.
Leia maisGerência de Memória. Gerência de Memória Introdução e Particionamento. Novo capítulo. Aulas anteriores. Plano da aula. Memória lógica & física
Aulas anteriores Gerência de Memória Introdução e Particionamento Marcelo Johann Ciclo de Compilação, ligação e carga INF - Sistemas Operacionais I N - Marcelo Johann - 9/ Aula : Slide INF - Sistemas Operacionais
Leia maisCapítulo 5 Livro do Mário Monteiro Conceituação. Elementos de projeto de memória cache
Capítulo 5 Livro do Mário Monteiro Conceituação Princípio da localidade Funcionamento da memória cache Elementos de projeto de memória cache Mapeamento de dados MP/cache Algoritmos de substituição de dados
Leia maisGerência de memória III
Gerência de memória III Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Maio, 2016 1 / 45 Sumário 1 Memória Virtual Segmentação Paginação 2 Alocação de páginas
Leia maisArquitetura de Computadores Unidade Central de Processamento CPU
Arquitetura de Computadores Unidade Central de Processamento CPU CPU Funções realizadas pelo processador: Função controle Responsável pela busca, interpretação e controle da execução das instruções, bem
Leia maisOrganização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Slide 1 Memória Virtual os primeiros computadores (início dos anos 60) tinham memória principal muito reduzida O PDP-1 funcionava com uma memória de 4096 palavras
Leia mais1 Introdução. I know because I must know. It's my purpose. It's the reason I'm here. (The Matrix) 1.1 Objetivos do trabalho
1 Introdução I know because I must know. It's my purpose. It's the reason I'm here. (The Matrix) 1.1 Objetivos do trabalho Os hardwares gráficos atualmente podem ser considerados como verdadeiros processadores
Leia maisTGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher
TGR BCC Representação Computacional de Grafos Prof. Ricardo José Pfitscher Cronograma Representação Matriz de djacências Lista de djacências Matriz de Incidências Representação Como podemos representar
Leia maisSistemas de Computação. Gerenciamento de memória
Gerenciamento de memória Localização de processos Um programa fica armazenado em disco como um arquivo executável binário e tem que ser colocado na memória para começar a ser executado Os processos podem
Leia mais25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de
Arquitetura de Computadores Conjuntos de Instruções: modos de endereçamento e formatos Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Endereçamento Normalmente, os campos de endereço são
Leia maisSequência 17 Organização e Hierarquia de Memória
Arquitetura de Computadores Os cincos componentes clássicos do computador Sequência 17 Organização e Hierarquia de Memória Seq.17 Memórias - conceitos 1 Seq.17 Memórias - conceitos 2 Memória A memória
Leia maisTecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)
Tecnólogo em Análise e Desenvolvimento de Sistemas Sistemas Operacionais (SOP A2) Conceitos de Hardware e Software Referências: Arquitetura de Sistemas Operacionais. F. B. Machado, L. P. Maia. Editora
Leia maisLista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)
Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501) Prof. Moacir P. Ponti Jr. 24 de novembro de 2010 1 Hashing 1. Suponha uma tabela hash de tamanho 10 com endereçamento aberto para
Leia maisMC3305 Algoritmos e Estruturas de Dados II. Aula 02 Hashing. Prof. Jesús P. Mena-Chalco.
MC3305 Algoritmos e Estruturas de Dados II Aula 02 Hashing Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 Sobre a busca de dados/chaves 2 Busca em tabelas (vetores/arrays) Para se resolver
Leia maisÁrvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich
Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic
Leia maisSistemas Operacionais. Prof. André Y. Kusumoto
Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Implementação são implementados através da criação, para cada arquivo no sistema, de uma estrutura de dados Descritor de arquivo
Leia maisTabelas de dispersão/hash
Tabelas de dispersão/hash 1 Tabelas de dispersão/hash 1. Considere uma tabela de hash de tamanho m = 1000 e a função de hash h(k)= [m.(k.a % 1)], com A=( 5-1)/2. Calcule os valores de hash das chaves 61,
Leia maisSistemas Operacionais. - Gerência de Memória -
Sistemas Operacionais - Gerência de Memória - Gerenciamento de Memória A organização e a gerência de memória são fatores importantes no projeto de sistemas operacionais Um dos objetivos é desenvolver um
Leia maisGrafos - Representação
Grafos - Representação É importante salientar outra diferença relevante entre a representação de matriz de adjacência e a representação ligada de grafos. Na representação de matriz está implícita a possibilidade
Leia maisProva Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade
Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Gustavo E.A.P.A. Batista 25 de janeiro de 2005 1 Contextualização 2 Caminhos Mínimos Caminhos Mínimos de uma Origem
Leia maisProcessamento digital de imagens
Processamento digital de imagens Agostinho Brito Departamento de Engenharia da Computação e Automação Universidade Federal do Rio Grande do Norte 23 de novembro de 2016 Compressão de imagens engloba técnicas
Leia maisÁrvores Conceitos gerais
http://www.mysticfractal.com/ FractalImaginator.html Árvores Conceitos gerais 9/11 Nesta aula veremos conceitos e definições sobre árvores Diferentemente das estruturas de pilhas, filas e listas que são
Leia maisCompressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:
Compressão de Textos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM O volume
Leia maisMemória Virtual. Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII
Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII Permitir o compartilhamento seguro e eficiente da memória entre vários programas Remover os transtornos de programação de uma quatidade pequena e limitada
Leia maisGeração Procedural de Terrenos em GPU
Geração Procedural de Terrenos em GPU Felipe Gomes Sampaio Universidade Federal de Juiz de Fora Departamento de Ciência da Computação Orientadora: Jesuliana Nascimento Ulysses Agenda Introdução GPU Terrenos
Leia maisBacktracking. Túlio Toffolo Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada
Backtracking Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 10 Algoritmos e Programação Avançada Backtracking Backtracking é um refinamento do algoritmo de busca
Leia maisCOMUNICAÇÃO DIGITAL INTRODUÇÃO À TEORIA DE INFORMAÇÃO
COMUNICAÇÃO DIGITAL INTRODUÇÃO À TEORIA DE INFORMAÇÃO Evelio M. G. Fernández - 2011 Introdução à Teoria de Informação Em 1948, Claude Shannon publicou o trabalho A A Mathematical Theory of Communications.
Leia maisGerência de memória II
Gerência de memória II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Maio, 2017 1 / 48 Sumário 1 Memória Virtual Segmentação Paginação 2 Alocação de páginas
Leia maisÁrvores Auto-ajustadas
Árvores Árvores Auto-ajustadas As árvores binárias de pesquisa são projetadas para um acesso rápido à informação. A velocidade das operações de inserção, remoção e busca realizadas sobre as árvores é mais
Leia maisPaginação e Segmentação. Memória Principal
Paginação e Segmentação Memória Principal Paginação Memória Principal Paginação A paginação é um recurso gerenciado por Hardware; Ela divide a memória física em várias partes de tamanho igual, chamados
Leia maisEstruturas de Dados 2
Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Força Bruta IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/36 Técnica de Projeto de Algoritmos por Força
Leia maisTÉCNICAS DE CODIFICAÇÃO DE SINAIS
TÉCNICAS DE CODIFICAÇÃO DE SINAIS COMPRESSÃO SEM PERDAS Evelio M. G. Fernández - 2010 Exemplo Símbolo Prob I II III IV A 1/2 00 0 0 0 B 1/4 01 11 10 01 C 1/8 10 00 110 011 D 1/8 11 01 1110 0111 Entropia
Leia maisSeminário de Robótica Bruno de Abreu Silva
Seminário de Robótica Bruno de Abreu Silva 1 Introdução Conceitos gerais Métodos de planejamento de rotas 2 Dadas as configurações inicial e final de um robô, descobrir uma sequência de movimentos a ser
Leia maisINF Fundamentos da Computação Gráfica Professor: Marcelo Gattass Aluno: Rogério Pinheiro de Souza
INF2608 - Fundamentos da Computação Gráfica Professor: Marcelo Gattass Aluno: Rogério Pinheiro de Souza Trabalho 02 Visualização de Imagens Sísmicas e Detecção Automática de Horizonte Resumo Este trabalho
Leia maisProf. Leonardo Augusto Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Aula 2 Estrutura de um processador Prof. Leonardo Augusto Casillo Arquitetura de Von Neumann: Conceito de programa armazenado; Dados
Leia maisProblema do Caminho Hamiltoniano
Universidade de São Paulo Escola de Artes, Ciências e Humanidades Bacharelado em Sistemas de Informação Introdução à Ciência da Computação II Professores Luciano Digiampietri e Fábio Nakano Data de entrega:
Leia mais