UNIVERSIDADE TÉCNICA DE LISBOA

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

Download "UNIVERSIDADE TÉCNICA DE LISBOA"

Transcrição

1 UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO Optimização e Avaliação de Aplicações de Simulação Numérica João Nuno de Oliveira e Silva (Licenciado) Dissertação para obtenção do grau de Mestre em Engenharia Informática e de Computadores Orientador: Doutor Paulo Jorge Pires Ferreira Presidente: Doutor Paulo Jorge Tavares Guedes Vogais: Doutor João Luís Ferreira Sobral Doutor Paulo Jorge Pires Ferreira Setembro 2002

2

3 Dissertação realizada sob a orientação do Prof. Doutor Paulo Jorge Pires Ferreira Professor Auxiliar do Departamento de Engenharia Informática do Instituto Superior Técnico da Universidade Técnica de Lisboa

4

5 Nome: João Nuno de Oliveira e Silva Título: Optimização e Avaliação de Aplicações de Simulação Numérica Palavras-chave: Simulação Numérica, optimização, paralelização, Memória Paralela e Distribuída Keywords: Numerical Simulation, Code Optimization, Paralelization, Distributed Shared Memory

6

7 Resumo A simulação numérica é, cada vez mais, usada na substituição de experiências físicas. Na indústria naval, as simulações de modelos de embarcações em tanques de ensaio é passível de ser substituída por simulações numéricas. Com um esforço, adicional ao desenvolvimento desses programas, consegue-se obter uma redução dos tempos de simulação, tornando-os aplicáveis em todo o processo de desenho de embarcações. A aplicação analisada é um simulador do comportamento hidrodinâmico de carenas de embarcações. A necessidade de optimizar esta aplicação advêm de uma das características desejadas ser a avaliação rápida dos cascos, cujos resultados influenciam alterações futuras no seu desenho. Para optimizar esta aplicação utilizaram-se diversas técnicas. Ao código que resolvia os vários sistemas de equações, e que não manipulava estruturas dinâmicas, aplicaram-se optimizações dependentes da arquitectura dos computadores. O código que manipulava estruturas dinâmicas apenas foi optimizado aplicando técnicas dependentes do processador (alteração do algoritmo). Para além das optimizações, também se realizou a sua paralelização de algum código, usando-se threads e Memória Partilhada e Distribuída. Com estas optimizações também se conseguiu comparar a eficiência de diversas tecnologias de suporte à execução paralela de aplicações: threads, PVM e Memória Partilhada e Distribuída. Ao longo deste trabalho usaram-se diversas técnicas de avaliação de desempenho. Em resumo, para além de termos conseguido tornar a aplicação de simulação mais usável, reduzindo-lhe o tempo de execução, também se consegui experimentar e avaliar os ganhos obtidos com a aplicação de várias técnicas sobre código com características distintas. i

8

9 Abstract Numerical simulation became a good substitution of physical experiences. In Naval industry, ship hull numerical simulation may be used instead of ship hull towing tank experiment. With an additional effort, by reducing simulation time, we can apply these numerical simulations to all the ship design and analysis process. The analyzed application simulates the ship behavior in a towing tank experience. This application must be optimized due to the fact that the results produced should be used in subsequent phases of the ship design process. In order to optimize this application we used several optimization techniques. In the equation systems solver witch didn t handle any dynamic structure we used machinelevel optimization. On the other hand, the code that handled dynamic structures was optimized using application-level optimizations (algorithm changes). Besides the optimizations, we also parallelized some of its code using threads and Distributed Shared Memory. With these optimizations we also managed to compare the efficiency of some parallel execution support platforms: threads. PVM and Distributed Shared Memory. During this work we also used some performance evaluation techniques. With this work we not only managed to make the simulation application more usable, by reducing the execution time, but also experienced and evaluate several optimization techniques applied to distinct codes. iii

10

11 Agradecimentos Ao Professor Dr. Paulo Guedes pela orientação inicial na execução do trabalho aqui descrito e ao Professor Dr. Paulo Ferreira pela orientação final e acompanhamento na escrita deste documento. A todos os elementos do Grupo de Sistemas Distribuídos que ao longo destes anos se interessaram pelo trabalho por mim realizado e pelas ideias com eles discutidas. Ao Professor Dr. Paulo Ferreira, Engº João Garcia e Engº Alfonso Sandoval pela leitura atenta que fizeram a este documento. Ao Eng. David Matos e Drª Luísa Coheur pelas consultas de orientação profissional gratuitas dadas ao longo destes últimos anos. À malta do Aikido (Engº Artur Caetano, João Almeida e Isabel Bentes) pelas horas de descontracção partilhadas e pela descoberta de algo novo. Finalmente, mas não menos sentido, aos meus Pais e Irmãos, pelo longo acompanhamento e imprescindível apoio dado durante toda a minha educação e formação. João Nuno Silva Lisboa, 1 de Setembro de 2002 v

12

13 Para quem ler vii

14

15 Índice Resumo... i Abstract... iii Agradecimentos... v Índice... ix Índice de Figuras... xiii Índice de Tabelas... xv 1 Introdução Motivação Enquadramento Contribuições Estrutura do Documento Trabalho Relacionado Introdução Técnicas de Optimização de Código Sequencial Optimizações não dependentes da plataforma Optimizações dependentes da plataforma Arquitectura do Pentium II Optimizações aplicáveis a Pentium II Paralelização Arquitectura de Sistemas Paralelos Comunicação entre tarefas em multiprocessadores Memória Partilhada Infra-estrutura de passagem de mensagens Distributed Shared Memory...32 ix

16 Optimização e Avaliação de Aplicações de Simulação Numérica High Performance Fortran (HPF) Optimizações aplicáveis a código paralelo Lei de Amdahl Técnicas de avaliação de desempenho Timers Relógio do sistema Contadores de alta precisão Contadores dos processadores Contadores do S.O Polling vs. Instrumentação Software de profiling Gprof Etch Vtune Resumo e enquadramento Enquadramento Descrição do Projecto Flash Arquitectura do sistema Aplicação de simulação Ambiente de execução Participação do INESC Realização Optimização do Solver (Conjugate gradient) Função Solve Função Atimes Função Asolve Paralelização do Solver (Conjugate gradient) Paralelização usando threads Paralelização usando DSM Optimização do simulador (aplicação FLASH) Paralelização do simulador (aplicação FLASH) Servidor para execução de tarefas remotas (TreadMark) Avaliação de desempenho das versões série...74 x

17 Índice Driver para leitura de contadores Avaliação de desempenho das versões paralelas Resumo Avaliação Ambiente de teste Optimização do Solver (Conjugate gradient) Paralelização do Solver (conjugate gradient) Optimização do simulador (aplicação FLASH) Paralelização do simulador (aplicação FLASH) Conclusões...93 Apêndice A Matrizes esparsas Apêndice B Conjugate Gradient Bibliografia Glossário xi

18

19 Índice de Figuras Fig. 2.1 Micro-arquitectura dos processadores da família P6 com Advance Transfer Cache (cache de nível 2)...12 Fig. 2.2 Unidade de Execução...15 Fig. 2.3 Exemplo de uso não optimizado da cache...19 Fig. 2.4 Exemplo de uso optimizado da cache...20 Fig. 2.5 Alteração do acesso a vectores de modo a permitir a utilização de registos...21 Fig. 2.6 Arquitectura de multiprocessadores de memória partilhada com ligações...23 Fig. 2.7 Exemplo da arquitectura de um computador multiprocessador vectorial...24 Fig. 2.8 Exemplo da arquitectura de um computador massivamente paralelo...25 Fig. 2.9 Configuração de um cluster formando dois sistemas paralelos independentes.27 Fig Desempenho máximo de uma aplicação paralela segundo lei de Amdahl...36 Fig. 3.1 Arquitectura geral da plataforma de desenvolvimento e simulação das embarcações...49 Fig. 3.2 Vista conceptual do simulador (versão série)...50 Fig. 3.3 Diagrama de classes simplificado do simulador...51 Fig. 3.4 Exemplo de uma iteração da simulação...52 Fig. 4.1 Optimização da função solve...56 Fig. 4.2 Implementação original da função atimes...58 Fig. 4.3 Versão optimizada da função atimes...60 Fig. 4.4 Implementação original da função asolve...61 Fig. 4.5 Versão paralela dum produto interno...64 Fig. 4.6 Multiplicação de uma matriz por um vector (versão série)...64 Fig. 4.7 Multiplicação de uma matriz por um vector (versão paralela)...65 xiii

20 Optimização e Avaliação de Aplicações de Simulação Numérica Fig. 4.8 Criação de um vector em memória partilhada e distribuída Fig. 4.9 Conversão para matriz esparsa (versão não optimizada) Fig Conversão para matriz esparsa (versão optimizada) Fig Envio dos dados necessário à criação do sistema de equações (comunicação entre processos usando PVM) Fig Envio dos dados necessário à criação do sistema de equações (comunicação entre processos usando DSM) Fig Envio da solução do sistema de equações (comunicação entre processos usando DSM) Fig Inicialização de um contador do processador Pentium Fig Leitura de um contador do processador Pentium Fig Programação necessária à leitura dos contadores do Windows Fig Leitura de um valor contabilizado num contador do Windows Fig. 5.1 Tempos de execução da versão paralela usando TreadMarks Fig. 5.2 Dados transmitidos e enviados pelo nó mestre nas versões paralelas usando PVM e TreadMarks Fig. A.1 Representação esparsa de uma matriz xiv

21 Índice de Tabelas Tab. 2.1 Eventos contabilizáveis com Performance-Monitoring counters...40 Tab. 2.2 Contadores contabilizáveis com Performance counters do Windows...41 Tab. 3.1 Sistemas usados pelo parceiros para execução do código de simulação...53 Tab. 4.1 Dados manipulados na função solve e suas dependências...63 Tab. 5.1 Características dos computadores usados nos testes de desempenho...82 Tab. 5.2 Análise estática do solver...83 Tab. 5.3 Número total de acessos à memória numa execução típica do solver...85 Tab. 5.4 Número total de cache misses no acesso à memória numa execução típica do solver...86 Tab. 5.5 Tempos de execução da versões serial do solver numa execução típica do solver...86 Tab. 5.6 Resultados da paralelização do solver usando threads e TreadMarks...87 Tab. 5.7 Tempos de execução da aplicação de simulação...89 Tab. 5.8 Speedups expectáveis e obtidos com a versão paralela usando TreadMarks...91 Tab. 5.9 Comparação dos tempos de execução das versões paralelas usando PVM e TreadMarks (DSM)...91 xv

22

23 1 Introdução 1.1 Motivação Desde há várias décadas que têm vindo a ser realizadas simulações de fenómenos físicos usando computadores. Nos primeiros tempos, as simulações eram realizadas em computadores especialmente construídos para o efeito. Com o desenvolvimento da electrónica e das arquitecturas de processadores, nasceu um mercado para supercomputadores unicamente dedicados ao cálculo numérico. O preços dos supercomputadores sempre limitou o seu uso às grande empresas e grandes centros de investigação. As pequenas e médias empresas nunca tiveram possibilidade de efectuar simulações dos seus produtos devido ao custo proibitivo dos supercomputadores e do seu tempo de processamento. Nos últimos anos, verificou-se um aumento de desempenho considerável nos computadores pessoais, já suplantando o desempenho dos supercomputadores de alguns anos atrás. Aliado a este aumento de desempenho, a possibilidade de usar vários computadores ligados numa rede para a realização de cálculos em paralelo, tornou o cálculo numérico intensivo mais acessível. Para as pequenas e médias empresas, o uso de computadores pessoais tornou-se uma alternativa viável à aquisição de supercomputadores. O desempenho dos computadores pessoais está ao nível do das estações de trabalho. Também é possível, com custo mínimo, usar vários computadores em paralelo formando um cluster. As empresas já usam abun- 1

24 Optimização e Avaliação de Aplicações de Simulação Numérica dantemente os computadores pessoais na sua operação normal, podendo estes computadores ser usados em conjunto na simulação de produtos. Para além da fácil criação de um cluster, também a sua escalabilidade os torna atraentes: o aumento do desempenho é conseguido substituindo os computadores existentes por outros mais rápidos ou, mais simplesmente, adicionando novos computadores ao conjunto já existente. Para tirar partido da existência de vários computadores, é necessário alterar o código sequencial, paralelizando-o. Um programa, depois de paralelizado, pode ser executado em simultâneo em vários processadores ou computadores. O tempo de execução dos programas consegue ser reduzido aumentando o número de computadores participantes no cálculo. O desenvolvimento destes programas de simulação é útil mas, com algum esforço adicional, é possível aumentar o desempenho destas aplicações. Este aumento do desempenho permite que o tempo despendido na simulação dos produtos se reduza, permitindo a avaliação de soluções distintas para o mesmo produto ou uma afinação iterativa dos mesmos. A solução mais óbvia para a aceleração das aplicações é a aquisição de computadores mais rápidos. Os ganhos podem ser substanciais, mas os custos podem tornar esta solução inviável para muitas empresas. A optimização do código é a solução com custos mais reduzidos, se executada durante a produção do software de simulação, visto não obrigar à aquisição de computadores mais rápidos. A optimização consiste na alteração do código do programa de modo a que este se execute mais rapidamente no tipo de computadores a usar na simulação. Este passo nem sempre é realizado, visto as aplicações serem desenvolvidas por especialistas no domínio da simulação, mas sem conhecimentos de arquitectura de computadores. 1.2 Enquadramento O trabalho apresentado nesta tese desenvolveu-se no âmbito dum projecto europeu. Este projecto, FLASH HPCN Tools for Enhanced Hydrodynamic Design of Fast Ships on Parallel Computing Platforms, tinha como objectivo o desenvolvimento de um pacote de software para desenho de embarcações, que integrasse ferramentas de CAD, com software de simulação do comportamento dos cascos das embarcações. Após a avaliação dos meios computacionais existentes nas instalações dos participantes, foi decidido que a plataforma de execução dos programas desenvolvidos consistiria em 2

25 Introdução computadores pessoais. Também se constatou que havia a possibilidade de executar código paralelo, quer em várias máquinas quer em multiprocessadores de memória partilhada. O trabalho por nós desenvolvido neste projecto, centrou-se na melhoria do desempenho do código de simulação produzido por um dos parceiros, recorrendo-se à optimização do código sequencial e do código paralelizado. Numa primeira fase, tendo apenas acesso a uma versão preliminar do simulador, optou- -se por efectuar primeiramente a sua optimização sem preocupações de execução num ambiente paralelo: Observou-se inicialmente onde era despendido mais tempo durante a execução; Realizaram-se optimizações, primeiro da ordenação das instruções de modo a reduzir os tempos perdidos pelo processador e, depois, dos algoritmos usados, para reduzir as instruções executadas. Durante esta primeira fase também se observaram as possibilidades de paralelização de partes deste código. Após a optimização do código sequencial, decidiu-se efectuar alterações à versão paralela desenvolvida por um dos parceiros. Esta primeira versão paralela usava passagem de mensagens (PVM[Gei94]) para efectuar a comunicação entre os computadores. Constatou- -se o fraco desempenho desta versão paralela. O trabalho por nós realizado prendeu-se com a tentativa de, usando outra tecnologia de comunicação (memória partilhada e distribuída), optimizar a versão paralela e permitir uma fácil instalação clusters de computadores pessoais. Alterou-se a implementação paralela para passar a usar memória partilhada e distribuída, usando-se o sistema TreadMarks[Kel94], tentando-se com esta opção reduzir a comunicação entre os vários computadores. Um outro factor que se teve em conta no desenvolvimento desta última tarefa, foi o público alvo da aplicação. Uma preocupação constante foi a facilidade de uso das aplicações paralelas. Para tal alterámos o sistema de lançamento remoto das tarefas do TreadMarks. 1.3 Contribuições A primeira e mais evidente contribuição é a optimização das várias versões do simulador. Foram por nós desenvolvidas duas versões optimizadas do simulador: 3

26 Optimização e Avaliação de Aplicações de Simulação Numérica Protótipo para execução em monoprocessador, optimizado e com desempenho superior à versão original; Protótipo paralelo para execução em rede de computadores pessoais, com desempenho superior às versões originais (série e paralela) ; Também ao nível de software de suporte, foram realizadas implementações que deverão ser referidas: Software para medição da ocorrência de eventos de processador associados ao desempenho de aplicações Alteração do modo de iniciação de tarefas no sistema TreadMarks; Paralelamente, pode-se considerar este documento como referência interessante a futuras optimizações. São aqui descritas as várias técnicas de optimização por nós aplicadas a software de simulação, com a apresentação dos ganhos reais obtidos. 1.4 Estrutura do Documento Este documento está dividido em 6 capítulos. Neste primeiro capítulo apresenta-se uma introdução ao trabalho realizado e descrito nesta dissertação. No segundo capítulo apresentam-se as várias técnicas de avaliação e optimização de código existente. Descrevem-se, não só, as técnicas de optimização aplicáveis a código executado em um só processador, mas também se apresentam várias tecnologias de suporte à execução de código em vários processadores. Nos dois capítulos seguintes apresenta-se uma descrição do projecto onde este trabalho se inseriu (capítulo Enquadramento ) e o trabalho por nós aí realizado (capítulo Realização ). Os resultados de desempenho são apresentadas no capítulo Avaliação ; as conclusões do nosso trabalho são descritas no último capítulo. 4

27 2 Trabalho Relacionado São apresentadas neste capítulo, técnicas que permitem o aumento de desempenho de aplicações de simulação numérica. São apresentadas optimizações que dependem da arquitectura de execução e outras das quais se obtêm resultados independentemente da arquitectura. São descritas algumas técnicas de optimização de código e tecnologias que permitem a execução paralela de código em vários processadores ou computadores. A escolhas das técnicas de optimização aqui apresentadas foi realizada ao longo do desenvolvimento do projecto, sendo representativas das várias técnicas existentes e possíveis de aplicar em aplicações de simulação numérica. Em relação aos sistemas computacionais paralelos, apresentamos uma resenha histórica, com indicação dos sistemas actualmente em uso. Também descrevemos as várias possibilidades existentes no campo de sistemas de suporte à programação paralela. No fim deste capítulo, apresentamos várias ferramentas de análise do desempenho existentes e investigadas antes do início do projecto, assim como algumas características dos computadores e sistemas operativos actuais usadas na avaliação concreta da nossa aplicação de simulação. 2.1 Introdução Existem duas características que se desejam do software de simulação: exactidão e rapidez. Como os resultados a obter devem ser o mais próximos possíveis da realidade, a exactidão é característica importante. A outra característica, a rapidez, também é importante, 5

28 Optimização e Avaliação de Aplicações de Simulação Numérica visto os resultados das simulações serem dados importantes para decisões futuras e necessários em tempo útil. Neste capítulo, serão apresentadas técnicas cuja aplicação permitem a melhoria do desempenho de aplicações de simulação numérica. Também são apresentadas metodologias de avaliação de programas, a fim de identificar o código cuja alteração introduz maiores ganhos de desempenho. Existem duas tarefas que se podem realizar e que permitem o aumento do desempenho dos programas: optimização do código que se executa de forma sequencial num único processador; paralelização do código para ser executado em vários processadores (multiprocessadores ou rede de PC's). Enquanto que, com a optimização do código, se altera o programa para que execute o mínimo de instruções e o mais rapidamente possível, com a paralelização, divide-se o trabalho a realizar por vários processadores ou computadores, reduzindo-se o tempo total de execução à medida que se aumenta o número de processadores envolvidos nos cálculos. A optimização do código sequencial necessita de acesso ao código dos programas de simulação, e com um custo muito inferior ao da aquisição de novo hardware conseguem-se obter ganhos significativos nos tempos de execução. A optimização de código sequencial segue duas fases: Avaliação do programa Aplicação de técnicas de optimização Para se concluir quais as instruções duma aplicação que demoram mais tempo, é necessário medir com exactidão o tempo de execução de cada função. Um modo de conseguir isso, consiste em alterar o código do programa a observar, introduzindo as chamadas às funções de temporização no início e fim de cada função, ou em blocos pais pequenos. Em seguida é apenas necessário avaliar os tempos medidos. As modificações podem ser realizadas automaticamente por um programa externo ou manualmente pelo programador. A inclusão das funções explicitamente por um programador permite a medição do tempo de execução do código com maior precisão. Outro modo consiste em usar técnicas de amostragem. Com uma determinada frequência avalia-se qual o código que se executa, traçando um gráfico aproximado do tempo 6

29 Trabalho Relacionado despendido na execução de cada módulo e função. As técnicas básicas de optimização sequencial consistem em alterar porções de código de modo a reduzir o número de instruções executadas. Este tipo de optimização não necessita de conhecimento da arquitectura computacional usada. Basta apenas observar o código que permite melhores ganhos e alterar o algoritmo aí usado de modo a reduzir o número de instruções executadas. Existem também outras técnicas de optimização em que o conhecimento da arquitectura é necessário. Quando se pretende, por exemplo, reduzir o tempo de espera do processador devido a determinados encadeamentos de instruções, é necessário conhecer a arquitectura interna do processador. Neste caso, não é suficiente saber onde se despende mais tempo, mas também é necessário saber com exactidão porque ocorrem estas perdas de desempenho dependentes do processador utilizado. Para efectuar a paralelização de código, também é necessário avaliar quais as partes do programa que permitem maiores ganhos. É necessário, depois, decidir qual o tipo de distribuição dos dados entre os vários nós de processamento e que tecnologia usar para efectuar a comunicação entre os vários nós. Dependendo do tipo de computadores existentes, assim diferentes tecnologias de comunicação devem ser utilizadas. Se o código paralelizado vai ser executado em multiprocessadores de memória partilhada, é mais atractivo utilizar o paradigma de memória partilhada[bro97]. Nos computadores multiprocessadores de memória distribuída, já é mais natural usar uma infra-estrutura de passagem de mensagens[sun90], [Sni96]. Caso se deseje utilizar vários computadores ligados por uma rede para executarem código paralelo, pode-se usar passagem de mensagens ou memória partilhada e distribuída, como se apresentará mais adiante. 2.2 Técnicas de Optimização de Código Sequencial Os compiladores actuais efectuam optimizações ao código dependentes do processador de destino. Embora tais optimizações sejam válidas e eficientes, existem alguns casos onde a observação do código e sua alteração pelo programador pode trazer ganhos adicionais; em particular, quando: o número de instruções é elevado, havendo um modo mais eficiente de codificar o problema; a sequência dos acessos aos dados provoca atrasos nos acessos; 7

30 Optimização e Avaliação de Aplicações de Simulação Numérica o encadeamento das instruções provoca atrasos na sua execução. O primeiro problema apontado advém do uso de algoritmos não optimizados. Muitas vezes, a descrição dos algoritmos, devido a requisitos de legibilidade e compreensão, não é a óptima. Os dois problemas seguintes são causados pelo facto dos processadores não executarem de modo óptimo algumas sequências de instruções. Devido ao uso de caches, também a ordem pela qual os dados são acedidos, pode provocar atrasos, como se verá na secção Estes problemas podem ser resolvidos por duas acções distintas mas complementares. Primeiro, é necessário alterar a implementação dos algoritmos de modo a reduzir o número de instruções realizadas, verificando depois se essas instruções executam do modo mais eficiente, em termos de acesso aos dados e encadeamento de instruções, na arquitectura escolhida para a execução do programa Optimizações não dependentes da plataforma O primeiro tipo de optimização que se deve tentar realizar é a que for independente da arquitectura. Este tipo de optimizações pode-se realizar logo após a identificação das rotinas que demoram mais tempo a executar. Normalmente estas optimizações limitam-se a alterar as instruções usadas de modo a reduzir o seu número; por exemplo, reduzir o número de iterações de um ciclo, reduzir o número de operações aritméticas e reduzir o número de comparações. Em casos extremos, este tipo de optimizações pode-se traduzir na alteração de todo o algoritmo por um outro mais eficiente. As optimizações apresentadas podem ser realizadas sem preocupações relacionadas com a arquitectura de execução se o código for executado em computadores do tipo monoprocessador não vectorial. No caso de computadores vectoriais ou multiprocessadores (secção 2.3.1), algumas alterações poderão reduzir o desempenho, visto não possibilitarem a utilização das capacidades dos processadores[dow98]. Com efeito, os computadores vectoriais e os multiprocessadores aproveitam a estrutura dos dados e o modo como o código lhes acede para executar em paralelo várias instruções. Apresentamos de seguida algumas optimizações não dependentes da arquitectura de execução aplicáveis a código de cálculo numérico. Estas optimizações prendem-se com a eliminação de instruções repetidas, expressões complexas ou condições. Também se apresenta o loop unrolling que tenta reduzir os custos de avaliação da condição de terminação dos ciclos. 8

31 Trabalho Relacionado Eliminação de sub-expressões Uma das situações onde se pode obter algum ganho de desempenho é na redução de cálculos duplicados. 1 c = a + b + d 2 e = q + a + b Observa-se no exemplo anterior que se duplica o cálculo da expressão a + b. Consegue-se optimizar este código usando uma variável auxiliar onde ficará guardado o resultado da expressão em causa. 3 temp = a + b 4 c = temp + d 5 e = q + temp Os ganhos desta optimização aumentam com a complexidade da expressão desnecessariamente calculada. Uma optimização semelhante é a eliminação de cálculos invariantes dentro de um ciclo. 1 for (i = 0 ; i < N ; i++){ 2 a[i] = a[i] / sqrt(x*x + y*x); 3 } Ao exemplo anterior retirar-se-á a expressão sqrt(x*x + y*x) de dentro do ciclo, reduzindo os cálculos efectuados. 1 temp = sqrt( x*x +y*x); 2 for (i = 0 ; i < N ; i++){ 3 a[i] = a[i] / temp; 4 } Alguns compiladores efectuam a eliminação de sub-expressões simples. No entanto, quando as sub-expressões contêm chamadas a funções, os compiladores não efectuam esta optimização. Como as funções invocadas podem ter efeitos paralelos no estado do programa, só o programador sabe se pode substituir as várias chamadas às funções por uma única. Eliminação de condições dentro de ciclos A existência de condições dentro de um ciclo aumenta os atrasos causados por este tipo de instrução. Quando se verifica que estas condições são a causa de grandes tempos de execução, é necessário eliminá-las. Quando, dentro de um ciclo, o teste depende do seu índice, é possível com o conhecimento prévio que se tem dos dados, eliminar essas condições. No exemplo seguinte, em cada iteração do ciclo interior, comparam-se os índices i e j. 9

32 Optimização e Avaliação de Aplicações de Simulação Numérica 1 for (i = 0; i < N; i++){ 2 for (j = 0; j < N; i++){ 3 if (j <= i) 4 a[i][j] = a[i][j] + b[i][j] * c; 5 else 6 a[i][j] = 0; 7 } 8 } A condição testada N*N vezes durante a execução do código apresentado pode ser eliminada: 1 for (i = 0; i < N; i++){ 2 for (j = 0; j <= i; i++){ 3 a[i][j] = a[i][j] + b[i][j] * c; 4 } 5 for ( ; j < N; i++){ 6 a[i][j] = 0; 7 } 8 } Loop unrolling Existem situações em que o peso da avaliação da guarda de um ciclo é superior ao das operações executadas em cada iteração. Nestes casos, o loop unrolling permite obter ganhos significativos. Com efeito, com o loop unrolling tenta-se reduzir o número de testes executados, aumentando o número de instruções a executar em cada iteração. 1 for (i = 0 ; i < N; i++){ 2 a[i] = A[i] +b[i] * c; 3 } Se no exemplo anterior N for múltiplo de 4, pode-se aplicar loop unrolling, passando-se, em cada iteração, a executar 4 atribuições. Considere-se o exemplo seguinte: 1 for (i = 0 ; i < N; i += 4){ 2 a[i] = A[i] +b[i] * c; i++; 3 a[i] = A[i] +b[i] * c; i++; 4 a[i] = A[i] +b[i] * c; i++; 5 a[i] = A[i] +b[i] * c; i++; 6 } Com a aplicação desta técnica, reduz-se o tempo despendido na execução das instruções de controle do ciclo. Caso o número de iterações seja constante e predefinido, aquando da compilação, é possível eliminar completamente o ciclo, substituindo-o por uma simples sequência de operações. 10

33 Trabalho Relacionado Optimizações dependentes da plataforma A arquitectura dos processadores e computadores usados no cálculo no tempo de execução do código. Estas arquitecturas são desenvolvidas de modo a reduzir o tempo de execução das instruções mas, devido à arquitectura interna dos processadores e aos tipos de cache usados, existem determinadas combinações de operações e acessos aos dados que não são executadas tão eficientemente quanto possível. Descrevem-se de seguida as características arquitecturais do processador Pentium II relevantes para as possíveis optimizações a realizar. Apresentam-se depois as optimizações possíveis. A escolha deste processador (Pentium II) prendeu-se com sua grande implantação e ser este o processador usado nos computadores que executam o simulador optimizado. O facto da sua arquitectura ser semelhante à de outros processadores disponíveis também teve influência na sua escolha, tornando-o um bom exemplo. Este processador apresenta toda as técnicas de aumento de desempenho presentes em todos os outros processadores de alto desempenho: arquitectura super-escalar; execução de instruções for a de ordem; existência de pipeline de execução predição da execução dos saltos Arquitectura do Pentium II Os processadores Pentium II e Pentium III[Int01a] são implementações da arquitectura de 32 bits da Intel (IA-32). Estes processadores têm uma arquitectura de execução dinâmica que fornece as seguintes características que influenciam o desempenho das execuções de aplicações: Execução de instruções fora de ordem para aproveitar paralelismo Arquitectura super-escalar para aproveitar paralelismo Pipeline de execução para aproveitar paralelismo Predição de saltos para reduzir atrasos de execução Caches nível 1 de dados e instruções internas ao processador Embora estes processadores tenham algumas inovações em relação ao processador 11

34 Optimização e Avaliação de Aplicações de Simulação Numérica Pentium Pro, a arquitectura básica é a mesma, pertencendo todos à mesma família, que se referencia a partir daqui como P6[Int98]. O pipeline desta família de processadores é formado por 3 partes: Fetch & Decode Unit Dispatch / Execute Unit Retirement Unit Na Fig. 2.1 mostra-se o esquema geral desta arquitectura e os fluxos de dados entre os vários componentes. System Bus Bus Unit 2 nd Level Cache 1 st Level Data Cache 1 st Level Instruction Cache Fetch/Decode Execution Retirement Instruction Pool/reorder buffer BTBs/Branch Prediction Fig. 2.1 Micro-arquitectura dos processadores da família P6 com Advance Transfer Cache (cache de nível 2) A unidade de fetch/decode é responsável por traduzir as instruções assembly em µoperações que serão executadas na unidade de execução. Para garantir que a unidade de execução não espera pela descodificação de instruções, a unidade de descodificação deve garantir um fluxo constante de µoperações. Isto é conseguido aproveitando-se a rapidez da cache de instruções e efectuando a descodificação de várias instruções em paralelo. Também é nesta unidade que se prevêem quais as instruções a descodificar quando se atinge um salto (JMP, JE, ). Com a informação armazenada nos BTBs (Branch Target Buffer) prevê-se se um salto vai ser executado ou não e quais as instruções a descodificar de seguida. A unidade de execução é responsável por executar as instruções existentes na Instruction 12

35 Trabalho Relacionado Pool de modo mais eficiente. Se uma micro-instrução não pode ser executada, porque os seus operandos ainda não foram calculados, esta unidade pode executar outra micro- -instrução; deste modo os atrasos causados por dependência de µoperações são minorados executando instruções que não dependem de operações ainda não terminadas. Devido ao desenho desta unidade, é possível executar várias instruções independentes em paralelo. A unidade de retirement é responsável por, após a conclusão das instruções, actualizar os dados em memória pela ordem correcta. Como as instruções podem ser executadas por uma ordem diferente daquela com que aparecem no código, não é possível actualizar a memória logo que uma instrução se complete. A retirement unit observa a ordem correcta pela qual as instruções deveriam ter sido executadas e vai actualizando a memória segundo essa ordem. Descrevem-se de seguida as várias características destes processadores, indicando qual a funcionalidade de cada um dos componentes atrás apresentados. Consegue-se assim perceber de que modo os encadeamentos de instruções tiram ou não proveito da arquitectura e como essas instruções se podem optimizar. Execução de instruções fora de ordem O núcleo dos processadores P6 permite avaliar a interdependência entre as várias instruções assembly e µoperações (resultados e operandos) e realizar a sua execução por ordem diferente daquela pela qual aparecem no código. Conseguem-se assim esconder os atrasos na execução das instruções, intercalando outras independentes. A descodificação das instruções assembly é realizada na unidade de fetch/decode e são armazenadas, com informação da localização dos operandos e resultados, na Instruction Pool. Aquando do fim de uma instrução, esta é retirada da Instruction Pool, e são verificadas quais as instruções aí existentes que dependiam deste resultado. Todas aquelas que não dependam de nenhum outro resultado podem ser imediatamente executadas pela unidade de execução. Consegue-se assim que a unidade de execução tenha sempre instruções para executar, mesmo que não sejam executadas pela ordem pela qual aparecem no código. A forte interdependência entre operandos das várias instruções obriga a que estas sejam executadas pela ordem do programa, o que pode levar ao não aproveitamento do paralelismo associado às várias unidades do processador. 13

36 Optimização e Avaliação de Aplicações de Simulação Numérica Pipeline de execução O uso de um pipeline permite a realização de várias actividades sucessivas em paralelo. Esta característica é conseguida utilizando as três unidades atrás descritas: unidade de fetch/decode, unidade de execução e retirement unit. O aumento de desempenho obtém-se pelo facto de todos os três componentes atrás descritos funcionarem em paralelo, processando dados que, num determinado instante, são independentes. Enquanto a unidade de execução executa uma determinada instrução, a unidade de fetch/decode lê da memória instruções que serão mais tarde executadas. Quando a unidade de execução terminar uma instrução, não necessita de esperar que novas instruções sejam lidas e descodificadas. Estas operações foram realizadas em paralelo com a execução de instruções anteriores. Após a conclusão da execução de uma instrução, a retirement unit é responsável pela actualização da memória com os resultados da execução. Esta operação é realizada em paralelo com a leitura, descodificação e execução de outras instruções. Arquitectura Super-escalar A unidade de execução permite a execução de várias instruções independentes em paralelo. A unidade de execução é responsável por distribuir as várias µoperações existentes na Instruction Pool pelos 5 portos existentes nesta unidade (ver Fig. 2.2). Esta distribuição é realizada à medida que as várias sub-unidades de execução vão ficando livres. Estas unidades podem executar em paralelo e permitem a finalização de várias instruções num mesmo ciclo de relógio. Como cada unidade tem um tipo específico de instruções que pode executar, é necessário garantir que existem na Instruction Poll instruções dos vários tipos possíveis, porque só assim é possível garantir que existe paralelismo na execução das instruções. A existência de uma única unidade de execução de operações de vírgula flutuante, evita que duas instruções de vírgula flutuante sejam iniciadas simultaneamente. Neste caso, não se aproveita tão eficientemente o paralelismo da unidade de execução. Um caso semelhante pode ocorrer com instruções inteiras, quando duas instruções só podem ser executadas pela mesma sub-unidade de execução. 14

37 Trabalho Relacionado MMX Execution Unit Floating Point Execution Unit Port 0 Integer Execution Unit Instruction Poll (ReOrder Buffer) Reservation Station Port 1 MMX Execution Unit Jump Execution Unit Integer Execution Unit Port 2 Store Execution Unit Port 3, 4 Load Execution Unit Fig. 2.2 Unidade de Execução Cada uma destas sub-unidades de execução tem no seu interior um pipeline para garantir a frequência máxima de execução de instruções (até 1 micro-instrução/ciclo). Com a combinação correcta de instruções é possível garantir uma frequência de terminação de instruções superior a 1 instrução por ciclo de relógio. Predição de saltos Normalmente, a leitura e descodificação de instruções realiza-se sequencialmente, tal qual aparecem no código, e não como são executados. Este facto é problemático no caso dos saltos que se realizam e alteram o fluxo de execução do código. Quando um salto ocorre, a próxima instrução a executar não é aquela que se encontra a seguir no código. Se a leitura e descodificação for cega, as instruções anteriormente descodificadas (devido à existência de pipeline) devem ser ignoradas e será necessário recomeçar a leitura e descodificação de instruções a partir da nova posição de execução. No caso de um if,que apenas é executado uma vez, estas perdas podem não ser muito significativas mas nos ciclos com guarda no fim de cada iteração, o tempo perdido pode ser significativo. Em cada iteração, sempre que o salto se executa, há necessidade de esvaziar o pipeline. Os processadores com arquitectura IA-32 conseguem, usando o historial de execução dos ciclos, prever qual a instrução que se vai executar de seguida. Num ciclo, por exemplo, a previsão só falha aquando da última iteração. No caso dos processadores de família P6 é a BTBs/Brach Prediction que armazena a direcção do salto (para a frente ou para trás), 15

38 Optimização e Avaliação de Aplicações de Simulação Numérica assim como o seu destino, e indica à unidade de fetch/decode qual a instrução que, a seguir ao salto, deve ser lida e descodificada. Para além desta predição (dita dinâmica), quando não existe informação nos Branch Target Buffers acerca do salto a executar, é executada predição estática; esta baseia-se em algumas heurísticas: todos os saltos não condicionais serão executados; saltos condicionais para trás serão executados; saltos condicionais para a frente não serão executados. Resumindo, com estas técnicas consegue-se reduzir drasticamente o tempo perdido nos saltos, devido à eliminação da necessidade de esvaziar completamente o pipeline na maioria das situações: Salto erradamente predito penalidade de 10 a 15 ciclos Predição dinâmica o salto executado e correctamente previsto penalidade de 1 ciclo o salto não executado e correctamente previsto sem penalidade Predição estática correcta penalidade de aproximadamente 6 ciclos O número de ciclos correspondentes a um salto erradamente predito é devido ao esvaziamento de todo o pipeline até ao início da nova instrução. Nas outras situações as penalidades, caso haja, são devidas à necessidade de carregar e descodificar um novo conjunto de instruções. No caso de um ciclo, a última iteração será erradamente prevista, perdendo-se cerca de 15 ciclos de processador. No entanto, nas várias iterações intermédias, quando as previsões acertam, as penalidades, caso existam, são substancialmente menores. Cache de dados e instruções Devido à sua rapidez, os acessos aos dados em memória atrasam significativamente a execução das instruções no processador. O tempo de acesso à memória é cerca de 10 vezes superior ao tempo de acesso aos registos internos do processador. Para melhorar o tempo de leitura e escrita na memória existem algumas alterações arquitecturais que se podem aplicar ao computador: Usar memória mais rápida 16

39 Trabalho Relacionado Usar bancos de memória para serem acedidos intercaladamente (escondendo os atrasos de funcionamento da memória) Usar buses de memória mais largos Usar caches rápidas entre a memória e o processador. Ao desenhar um computador é necessário balancear os custos envolvidos com a aplicação das tecnologias acima descritas e os ganhos obtidos. Uma das soluções adoptadas e que permitem bons ganhos é o uso de caches de vários níveis e com tamanhos variados. A cache é formada por memória rápida que, em cada instante, aloja um determinado conjunto de dados. Esta memória está organizada por linhas onde são armazenados valores contíguos existentes na memória. Estas linhas de memória são carregadas quando o processador acede a uma posição de memória que não se encontra na cache. Na leitura do primeiro valor o tempo perdido é elevado: o valor tem de ser lido do nível de memória seguinte mas as seguintes leituras contíguas já se efectuam sem atrasos. Com a organização da memória em várias hierarquias, cada vez mais rápidas e caras mas mais pequenas, consegue-se reduzir o tempo de leitura da memória com uma boa relação custo/desempenho. Enquanto que as três primeiras alterações ao sistema de memória não obrigam ao redesenho das aplicações, o uso de caches obriga à avaliação e redesenho dos padrões de acesso à memória para obter os ganhos máximos. Há sequências de acessos à memória que não aproveitam os dados armazenados nas várias caches. Os processadores com arquitectura P6 contêm, no seu núcleo, duas caches de nível 1, uma de dados e outra de código. Estas duas caches são associativas de quatro vias, têm uma capacidade de 16 Kbytes (8 Kbytes no caso do Pentium Pro) e o comprimento de cada linha é de 32 bytes. Usam um mecanismo de write-back e um algoritmo pseudo-lru (least recently used) para a substituição dos valores armazenados. A cache de nível 2, que armazena dados e código, está ligada ao processador por um bus dedicado de 64 bits com relógio igual ao do processador. Esta cache tem um tamanho variável, mas superior a 256 Kbytes. Assim, dependendo do mercado de destino do processador, alterando o tamanho da cache, consegue-se balancear o desempenho com o custo. O uso de dois níveis de cache consegue esconder o tamanho reduzido da cache de nível 1. Nem todos os misses à cache de nível 1 resultam num acesso à memória. Só quando os dados não se encontram em nenhuma das caches tal acontece. Neste caso perdem-se cerca de 17

40 Optimização e Avaliação de Aplicações de Simulação Numérica 10 ciclos de relógio. Para o preenchimento de uma linha de cache são lidos 4 blocos de 8 bytes da memória. Os dados lidos ficam acessíveis ao processador à medida que vão sendo transferidos para a cache. Também com a finalidade de optimizar as escritas em memória, os processadores Pentium usam 12 store buffers. Aquando da execução de uma instrução de escrita, os dados não são transferidos imediatamente para a cache ou memória, mas sim para um destes buffers. Mais tarde, os dados serão realmente transferidos para a memória. Deste modo, logo que os dados são transferido para os buffers, o processador e buses ficam livres para a realização de outras instruções. Estes buffers também são necessários para garantir que os dados são escritos na memória pela mesma ordem pelas quais as operações aparecem no código. Como as instruções são ordenadas por questões de optimização, é necessário garantir que a ordem das escritas seja a correcta Optimizações aplicáveis a Pentium II Descrevem-se nesta secção algumas optimizações realizáveis em programas e que dependem das arquitecturas do processador e computador: Optimização do acesso aos dados de modo a aproveitar os ganhos introduzidos pelas caches Optimizar a execução das instruções usando instruções mais rápidas e permitindo a sua execução em paralelo. Existem outra optimizações[int97], [Int99] que podem ser realizadas mas estão mais orientadas para o desenho de compiladores. A optimização do uso dos registos, por exemplo, é um tipo de optimização que é difícil realizar tendo apenas acesso ao código de alto nível, mas que é imprescindível que seja realizada por um compilador. Optimização do uso da cache O uso de caches nos computadores modernos faz com que os acessos à memória não tenham todos o mesmo custo. Ao aceder-se a uma posição de memória, se esta não estiver já na cache, são também transferidos os valores adjacentes. As próximas leituras a algum desses valores realizar-se-ão muito mais rapidamente. Assim, para obter os ganhos do uso de caches, é necessário que haja localidade espacial nos acessos consecutivos à memória. No exemplo apresentado na Fig. 2.3, devido à ordem dos ciclos e de actualização dos 18

41 Trabalho Relacionado índices, a contabilização de elementos nulos de uma matriz não tira partido da existência de caches. 1 for (j =0; j<= N; j++){ 2 /* percorrer colunas */ 3 for (i =0; I <=N; i++){ 4 /* percorrer linhas */ 5 if (m[i][j] == 0) 6 count ++; 7 } 8 } i x x x x x x j Fig. 2.3 Exemplo de uso não optimizado da cache (acesso com cache misses - x, dados carregados para cache ) Na primeira iteração do ciclo exterior são visitadas todas as linhas da matriz, verificando se a primeira posição é nula. Em cada acesso é lida uma linha de dados para a cache. A partir do momento em que a cache já está cheia, é necessário substituir as linhas mais antigas. Para matrizes grandes, quando se termina a primeira iteração, as primeiras linhas já não se encontram na cache. Se o tamanho da matriz for superior ao da cache, é provável que a partir de determinada linha, os cache misses obriguem à substituição dos dados armazenados na cache. Assim, na segunda iteração externa são percorridas outra vez todas as linhas da matriz, obrigando à leitura de todos os dados a partir da memória. Neste caso, a existência da cache não se reflecte me ganhos observáveis, Com efeito, os acessos aos dados demorariam o mesmo tempo se as caches não existissem. Com esta aproximação não se obtém ganho nenhum do uso da cache. Em todas as leituras é necessário efectuar a transferência de dados a partir da memória principal. Trocando a ordem dos ciclos já se obtêm ganhos do uso da cache, tal como se observe na Fig No primeiro acesso à matriz, é necessário efectuar a leitura de uma linha da cache. Os próximos acessos (nos endereços seguintes) já aproveitam os dados armazenados em cache, não obrigando à transferência de dados a partir da memória principal. A partir deste momento, como os acessos à memória são todos sequenciais, após uma leitura da memória principal, ocorrem diversos acessos cujos dados já se encontram em cache, reduzindo o tempo total de leitura. Para tipo de dados dinâmicos a optimização dos acessos à memória já é mais difícil. Como a localização lógica das estruturas não influencia a sua localização física, não se consegue garantir uma localidade espacial de referência aquando do acessos aos dados. Assim, não 19

42 Optimização e Avaliação de Aplicações de Simulação Numérica se consegue tirar partido da cache. 1 for (i =0; i<= N; j++){ 2 /* percorrer linhas */ 3 for (j =0; j <=N; i++){ 4 /* percorrer colunas*/ 5 if (m[i][j] == 0) 6 count ++; 7 } 8 } i j x x Fig. 2.4 Exemplo de uso optimizado da cache (acesso com cache misses - x, acesso com cache hit, dados carregados para cache ) Optimização da execução das instruções As optimizações relacionadas com o encadeamento das instruções, geralmente, podem ser resolvidas pelo compilador e pela possibilidade do processador executar instruções fora de ordem. Há, no entanto, casos em que a organização do código impossibilita a execução óptima das instruções. A arquitectura da unidade de execução dos processadores Pentium II permite a execução simultânea de várias instruções em portos diferentes. Como cada porto executa determinado tipo de instruções é necessário garantir que existem instruções de tipos distintos para manter o funcionamento dos vários portos em paralelo. Uma outra origem de atrasos é a dependência entre operandos e resultados de várias instruções. Uma instrução só pode ser executada caso todos os seus operandos já tenham sido calculados pelas instruções anteriores. Quando se têm uma grande dependência entre resultados e operações posteriores é possível que ocorram stalls no processador. Em código de processamento numérico, a alta densidade de instruções de vírgula flutuante, os dois problemas anteriores são muito frequentes. O elevado tempo de execução das instruções de vírgula flutuante (entre 5 e 17 ciclos de relógio) e o facto dos processadores Pentium II só terem uma unidade de execução de vírgula flutuante agravam os problemas atrás descritos. É então necessário escrever o código de modo a que seja possível intercalar operações de vírgula flutuante e outras de manipulação de inteiros ou leituras/escritas. Se houver a intercalação de instruções não dependentes entre si, consegue-se aproveitar o pipeline de execução de instruções de vírgula flutuante. É possível iniciar a execução de 20

Arquitecturas Alternativas. Pipelining Super-escalar VLIW IA-64

Arquitecturas Alternativas. Pipelining Super-escalar VLIW IA-64 Arquitecturas Alternativas Pipelining Super-escalar VLIW IA-64 Pipeline de execução A execução de uma instrução passa por várias fases: Vimos o ciclo: fetch, decode, execute fetch decode execute instrução

Leia mais

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

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

Leia mais

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2) Arquitectura de um computador Caracterizada por: Conjunto de instruções do processador (ISA Estrutura interna do processador (que registadores existem, etc Modelo de memória (dimensão endereçável, alcance

Leia mais

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

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

Leia mais

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

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

Leia mais

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

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

Leia mais

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho.

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho. Computação Paralela Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Outubro 2005 Desenvolvimento de Aplicações Paralelas Uma Metodologia

Leia mais

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR Curso Engenharia Informática Ano letivo 2012-2013 Unidade Curricular Arquitectura de Computadores ECTS 6 Regime Obrigatório Ano 2º Semestre 2ºsem Horas de trabalho globais Docente (s) Luis Figueiredo Total

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

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

Leia mais

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

28/9/2010. Paralelismo no nível de instruções Processadores superescalares Arquitetura de Computadores Paralelismo no nível de instruções Processadores superescalares Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Processadores superescalares A partir dos resultados

Leia mais

Arquitetura de Computadores I

Arquitetura de Computadores I Arquitetura de Computadores I Pipeline Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Organização do MIPS: pipeline Visão geral do pipeline Analogia com uma Lavanderia doméstica 1

Leia mais

Programação 2ºSemestre MEEC - 2010/2011. Programação 2º Semestre 2010/2011 Enunciado do projecto

Programação 2ºSemestre MEEC - 2010/2011. Programação 2º Semestre 2010/2011 Enunciado do projecto Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2º Semestre 2010/2011 Enunciado do projecto O projecto a desenvolver pelos alunos consistirá numa sistema de monitorização,

Leia mais

BARRAMENTO DO SISTEMA

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

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Introdução à gestão de memória Programação de Sistemas Gestão de memória : 1/16 Introdução (1) A memória central de um computador é escassa. [1981] IBM PC lançado com 64KB na motherboard,

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Pipeline Slide 1 Pipeline Pipeline Hazards: Hazards Estruturais Hazards de Dados Hazards de Controle Organização e Arquitetura de Computadores I Caminho de Dados

Leia mais

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

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

Leia mais

Licenciatura em Engenharia Informática Sistemas Distribuídos I 2ª chamada, 6 de Julho de 2005 2º Semestre, 2004/2005

Licenciatura em Engenharia Informática Sistemas Distribuídos I 2ª chamada, 6 de Julho de 2005 2º Semestre, 2004/2005 Departamento de Informática Faculdade de Ciências e Tecnologia UNIVERSIDADE NOVA DE LISBOA Licenciatura em Engenharia Informática Sistemas Distribuídos I 2ª chamada, 6 de Julho de 2005 2º Semestre, 2004/2005

Leia mais

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

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

Leia mais

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

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

Leia mais

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir. O throughput de um pipeline é determinado pela freqüência com que uma instrução sai do pipeline Todos os estágios devem estar prontos ao mesmo tempo para prosseguir O tempo requerido para mover uma instrução

Leia mais

Introdução aos Computadores

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

Leia mais

ARQUITETURA DE COMPUTADORES - 1866

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

Leia mais

28/9/2010. Unidade de Controle Funcionamento e Implementação

28/9/2010. Unidade de Controle Funcionamento e Implementação Arquitetura de Computadores Unidade de Controle Funcionamento e Implementação Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Operação da Unidade de Controle Unidade de controle: parte do

Leia mais

1.3. Componentes dum sistema informático HARDWARE SOFTWARE

1.3. Componentes dum sistema informático HARDWARE SOFTWARE 1.3. Componentes dum sistema informático Computador Sistema Informático HARDWARE SOFTWARE + Periféricos Sistema Operativo Aplicações HARDWARE - representa todos os componentes físicos de um sistema informático,

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

Sistemas Computacionais II Professor Frederico Sauer

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

Leia mais

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP;

Diminui o gargalo existente entre processador e memória principal; 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Diminui o gargalo existente entre processador e memória principal; Diferença de velocidade 5 a 10 vezes mais rápidas que a memória principal; Ligada diretamente à MP; Tecnologia semelhante à da CPU e,

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

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

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

Leia mais

ARQUITECTURA DE COMPUTADORES

ARQUITECTURA DE COMPUTADORES ARQUITECTURA DE COMPUTADORES CAPÍTULO IV AULA II Maio 2014 Índice Processadores Revisões Pipelining Pipeline hazards Hazard estrutural Hazard de dados Hazard de controlo Pipelining datapath Pipelined control

Leia mais

Entrada e Saída. Interface entre periféricos, processador e memória. Fonte: Minho - Portugal 1

Entrada e Saída. Interface entre periféricos, processador e memória. Fonte: Minho - Portugal 1 Entrada e Saída Interface entre periféricos, processador e memória Fonte: Minho - Portugal 1 Ligação Processador/Memória - Periférico Processador Memória Controlo Dados Controlador Fonte: Minho - Portugal

Leia mais

Acronis Servidor de Licença. Manual do Utilizador

Acronis Servidor de Licença. Manual do Utilizador Acronis Servidor de Licença Manual do Utilizador ÍNDICE 1. INTRODUÇÃO... 3 1.1 Descrição geral... 3 1.2 Política de licenças... 3 2. SISTEMAS OPERATIVOS SUPORTADOS... 4 3. INSTALAR O SERVIDOR DE LICENÇA

Leia mais

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema. Unidade aritmética e lógica - Executa operações aritméticas (cálculos);

Leia mais

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

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

Leia mais

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

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

Leia mais

Modos de entrada/saída

Modos de entrada/saída Arquitectura de Computadores II Engenharia Informática (11545) Tecnologias e Sistemas de Informação (6621) Modos de entrada/saída Fonte: Arquitectura de Computadores, José Delgado, IST, 2004 Nuno Pombo

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

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

Leia mais

Arquitetura de Computadores II

Arquitetura de Computadores II Universidade Federal do Rio de Janeiro Informática DCC/IM Arquitetura de Computadores II Sistemas de Troca de Mensagens O Sistema de Comunicação provê tipicamente os seguintes serviços para as aplicações:

Leia mais

Arquitetura de Computadores - Processadores Superescalares. por Helcio Wagner da Silva

Arquitetura de Computadores - Processadores Superescalares. por Helcio Wagner da Silva Arquitetura de Computadores - Processadores Superescalares por Helcio Wagner da Silva Introdução O Pipeline é uma técnica desenvolvida para a melhoria do desempenho frente à execução seqüencial de instruções

Leia mais

7.Conclusão e Trabalhos Futuros

7.Conclusão e Trabalhos Futuros 7.Conclusão e Trabalhos Futuros 158 7.Conclusão e Trabalhos Futuros 7.1 Conclusões Finais Neste trabalho, foram apresentados novos métodos para aceleração, otimização e gerenciamento do processo de renderização

Leia mais

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado.

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado. Conceitos relativos à Informação 1. Informação O que á a informação? Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado. 2. Dados Em informática designa-se

Leia mais

Arquitetura de processadores: RISC e CISC

Arquitetura de processadores: RISC e CISC Arquitetura de processadores: RISC e CISC A arquitetura de processador descreve o processador que foi usado em um computador. Grande parte dos computadores vêm com identificação e literatura descrevendo

Leia mais

Introdução ao Processamento Paralelo

Introdução ao Processamento Paralelo Introdução ao Processamento Paralelo Prof. Rômulo Calado Pantaleão Camara Carga Horária: 2h/60h Introdução Crescente aumento de desempenho dos PCs (máquinas convencionais). Existem aplicações que requisitam

Leia mais

Introdução aos Sistemas Operativos

Introdução aos Sistemas Operativos Introdução aos Sistemas Operativos Computadores e Redes de Comunicação Mestrado em Gestão de Informação, FEUP 06/07 Sérgio Sobral Nunes mail: sergio.nunes@fe.up.pt web: www.fe.up.pt/~ssn Sumário Definição

Leia mais

Tabela de roteamento

Tabela de roteamento Existem duas atividades que são básicas a um roteador. São elas: A determinação das melhores rotas Determinar a melhor rota é definir por qual enlace uma determinada mensagem deve ser enviada para chegar

Leia mais

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS. 5.1 - Os Programas de Avaliação 36 5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS 5.1 - Os Programas de Avaliação Programas de avaliação convencionais foram utilizados para análise de diversas configurações da arquitetura. Estes programas

Leia mais

Algumas características especiais

Algumas características especiais Algumas características especiais Tópicos o Medidas de desempenho o CISC versus RISC o Arquiteturas Superescalares o Arquiteturas VLIW Medidas de desempenho Desempenho é muito dependente da aplicação MIPS:

Leia mais

Interrupções. As interrupções são casos especiais de chamadas de procedimentos.

Interrupções. As interrupções são casos especiais de chamadas de procedimentos. Interrupções Uma interrupção é equivalente a uma chamada de procedimento. A chamada é equivalente a um CALL gerado pela execução de uma instrução. As interrupções são casos especiais de chamadas de procedimentos.

Leia mais

Arquitetura de Computadores I

Arquitetura de Computadores I Arquitetura de Computadores I Pipeline -- Conflito de dados paradas e adiantamentos -- Conflito de controle detecção de desvios e descarte de instruções -- Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno

Leia mais

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

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

Leia mais

Computadores de Programação (MAB353)

Computadores de Programação (MAB353) Computadores de Programação (MAB353) Aula 19: Visão geral sobre otimização de programas 06 de julho de 2010 1 2 3 Características esperadas dos programas O primeiro objetivo ao escrever programas de computador

Leia mais

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP)

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP) Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP) Existem inúmeras ferramentas (software) baseadas em RdP que permitem desenvolver modelar e analisar sistema de RdP. Algumas

Leia mais

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO. SISTEMAS DE GESTÃO DE BASE DE DADOS Microsoft Access TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO. SISTEMAS DE GESTÃO DE BASE DE DADOS Microsoft Access TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO Microsoft Access TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO CONCEITOS BÁSICOS 1 Necessidade das base de dados Permite guardar dados dos mais variados tipos; Permite

Leia mais

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET 2010/2011 1 Protocolo TCP/IP É um padrão de comunicação entre diferentes computadores e diferentes sistemas operativos. Cada computador deve

Leia mais

ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES 1 ARQUITETURA DE COMPUTADORES U C P Prof. Leandro Coelho Plano de Aula 2 Aula Passada Definição Evolução dos Computadores Histórico Modelo de Von-Neumann Básico CPU Mémoria E/S Barramentos Plano de Aula

Leia mais

CAP. I ERROS EM CÁLCULO NUMÉRICO

CAP. I ERROS EM CÁLCULO NUMÉRICO CAP. I ERROS EM CÁLCULO NUMÉRICO 0. Introdução Por método numérico entende-se um método para calcular a solução de um problema realizando apenas uma sequência finita de operações aritméticas. A obtenção

Leia mais

Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna

Primeiros computadores digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna Execução de um O executa um Quais os seus componentes? Como estes se organizam e interactuam? entrada de dados processador, memória, input bits periféricos,etc bits saída de dados output Primeiros "es"

Leia mais

Utilização do SOLVER do EXCEL

Utilização do SOLVER do EXCEL Utilização do SOLVER do EXCEL 1 Utilização do SOLVER do EXCEL José Fernando Oliveira DEEC FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO MAIO 1998 Para ilustrar a utilização do Solver na resolução de

Leia mais

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

Leia mais

Memórias Prof. Galvez Gonçalves

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

Leia mais

Modelo Cascata ou Clássico

Modelo Cascata ou Clássico Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação

Leia mais

Organização. Trabalho realizado por: André Palma nº 31093. Daniel Jesus nº 28571. Fábio Bota nº 25874. Stephane Fernandes nº 28591

Organização. Trabalho realizado por: André Palma nº 31093. Daniel Jesus nº 28571. Fábio Bota nº 25874. Stephane Fernandes nº 28591 Organização Trabalho realizado por: André Palma nº 31093 Daniel Jesus nº 28571 Fábio Bota nº 25874 Stephane Fernandes nº 28591 Índice Introdução...3 Conceitos.6 Princípios de uma organização. 7 Posição

Leia mais

O Manual do ssc. Peter H. Grasch

O Manual do ssc. Peter H. Grasch Peter H. Grasch 2 Conteúdo 1 Introdução 6 2 Usar o ssc 7 2.1 Gerir os utilizadores.................................... 7 2.1.1 Adicionar um utilizador.............................. 8 2.1.1.1 Associar-se

Leia mais

CPU Unidade Central de Processamento. História e progresso

CPU Unidade Central de Processamento. História e progresso CPU Unidade Central de Processamento História e progresso O microprocessador, ou CPU, como é mais conhecido, é o cérebro do computador e é ele que executa todos os cálculos e processamentos necessários,

Leia mais

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco Escola Superior de Tecnologia Instituto Politécnico de Castelo Branco Departamento de Informática Curso de Engenharia Informática Disciplina de Projecto de Sistemas Industriais Ano Lectivo de 2005/2006

Leia mais

Como elaborar um Plano de Negócios de Sucesso

Como elaborar um Plano de Negócios de Sucesso Como elaborar um Plano de Negócios de Sucesso Pedro João 28 de Abril 2011 Fundação António Cupertino de Miranda Introdução ao Plano de Negócios Modelo de Negócio Análise Financeira Estrutura do Plano de

Leia mais

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

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

Leia mais

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II O seguinte exercício contempla um processo com três estágios. Baseia-se no Inquérito de Satisfação Fase II, sendo, por isso, essencial compreender primeiro o problema antes de começar o tutorial. 1 1.

Leia mais

Arquitetura de Computadores II

Arquitetura de Computadores II Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação - DCC/IM Arquitetura de Computadores II Multithreading Prof. Gabriel P. Silva Introdução Muitos dos sistemas operacionais modernos

Leia mais

Gestão dos Níveis de Serviço

Gestão dos Níveis de Serviço A Gestão dos Níveis de Serviço (SLM) Os sistemas e tecnologias de informação e comunicação têm nas empresas um papel cada vez mais importante evoluindo, hoje em dia, para níveis mais elevados de funcionamento

Leia mais

PPD: Balanceamento de Carga e Scheduling 2

PPD: Balanceamento de Carga e Scheduling 2 PPD: Balanceamento de Carga e Scheduling 2 Fernando Silva DCC-FCUP 2 (Alguns dos slides são baseados nos de Kathy Yelick, www.cs.berkeley.edu/ yelick) Fernando Silva (DCC-FCUP) PPD: Balanceamento de Carga

Leia mais

ESTUDO DE CASO WINDOWS VISTA

ESTUDO DE CASO WINDOWS VISTA ESTUDO DE CASO WINDOWS VISTA História Os sistemas operacionais da Microsoft para PCs desktop e portáteis e para servidores podem ser divididos em 3 famílias: MS-DOS Windows baseado em MS-DOS Windows baseado

Leia mais

Trabalhos Práticos. Programação II Curso: Engª Electrotécnica - Electrónica e Computadores

Trabalhos Práticos. Programação II Curso: Engª Electrotécnica - Electrónica e Computadores Trabalhos Práticos Programação II Curso: Engª Electrotécnica - Electrónica e Computadores 1. Objectivos 2. Calendarização 3. Normas 3.1 Relatório 3.2 Avaliação 4. Propostas Na disciplina de Programação

Leia mais

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2010/2011 Enunciado do projecto O projecto a desenvolver pelos alunos consistirá numa sistema de monitorização do estado de

Leia mais

Fundamentos de Sistemas Operacionais

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

Leia mais

UML 2. Guia Prático. Gilleanes T.A. Guedes. Novatec. Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2

UML 2. Guia Prático. Gilleanes T.A. Guedes. Novatec. Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2 UML 2 Guia Prático Gilleanes T.A. Guedes Obra revisada e ampliada a partir do título Guia de Consulta Rápida UML 2 Novatec capítulo 1 Introdução à UML A UML (Unified Modeling Language ou Linguagem de Modelagem

Leia mais

Memória cache. Prof. Francisco Adelton

Memória cache. Prof. Francisco Adelton Memória cache Prof. Francisco Adelton Memória Cache Seu uso visa obter uma velocidade de acesso à memória próxima da velocidade das memórias mais rápidas e, ao mesmo tempo, disponibilizar no sistema uma

Leia mais

GereComSaber. Desenvolvimento de Sistemas de Software. Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática

GereComSaber. Desenvolvimento de Sistemas de Software. Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática Desenvolvimento de Sistemas de Software Ano Lectivo de 2009/10 GereComSaber Ana Duarte, André Guedes, Eduardo

Leia mais

Microarquiteturas Avançadas

Microarquiteturas Avançadas Univ ersidade Federal do Rio de Janei ro Info rmátic a DCC/IM Arquitetura de Computadores II Microarquiteturas Avançadas Gabrie l P. Silva Introdução As arquiteturas dos processadores têm evoluído ao longo

Leia mais

Memória Cache. Prof. Leonardo Barreto Campos 1

Memória Cache. Prof. Leonardo Barreto Campos 1 Memória Cache Prof. Leonardo Barreto Campos 1 Sumário Introdução; Projeto de Memórias Cache; Tamanho; Função de Mapeamento; Política de Escrita; Tamanho da Linha; Número de Memórias Cache; Bibliografia.

Leia mais

Base de Dados para Administrações de Condomínios

Base de Dados para Administrações de Condomínios Base de Dados para Administrações de Condomínios José Pedro Gaiolas de Sousa Pinto: ei03069@fe.up.pt Marco António Sousa Nunes Fernandes Silva: ei03121@fe.up.pt Pedro Miguel Rosário Alves: alves.pedro@fe.up.pt

Leia mais

Sistemas Operativos I

Sistemas Operativos I Gestão da Memória Luis Lino Ferreira / Maria João Viamonte Fevereiro de 2006 Gestão da Memória Gestão de memória? Porquê? Atribuição de instruções e dados à memória Endereços lógicos e físicos Overlays

Leia mais

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

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

Leia mais

Aula 26: Arquiteturas RISC vs. CISC

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

Leia mais

Organização de Computadores 2005/2006 Processadores Intel

Organização de Computadores 2005/2006 Processadores Intel Organização de Computadores 2005/2006 Processadores Intel Paulo Ferreira paf a dei.isep.ipp.pt Março de 2006 Pré História 2 8080.............................................................................................

Leia mais

Sistemas Operativos. Sumário. Estruturas de sistemas de computação. ! Operação de um sistema de computação. ! Estruturas de E/S

Sistemas Operativos. Sumário. Estruturas de sistemas de computação. ! Operação de um sistema de computação. ! Estruturas de E/S Estruturas de sistemas de computação Sumário! Operação de um sistema de computação! Estruturas de E/S! Estruturas de armazenamento! Hierarquia de armazenamento 2 1 Arquitectura de um sistema de computação

Leia mais

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

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

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

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

Leia mais

5. Métodos ágeis de desenvolvimento de software

5. Métodos ágeis de desenvolvimento de software Engenharia de Software 5. Métodos ágeis de desenvolvimento de software Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt Desenvolver e entregar software o mais rapidamente possível é hoje em dia um dos

Leia mais

O protocolo MODBUS define também o tipo diálogo entre os equipamentos, define por exemplo quem pode enviar dados e em que altura.

O protocolo MODBUS define também o tipo diálogo entre os equipamentos, define por exemplo quem pode enviar dados e em que altura. Universidade de Aveiro Departamento de Engenharia Mecânica Informática Industrial 2010/2011 5 PROTOCOLO DE COMUNICAÇÃO MODBUS 5.1 Protocolo de comunicação MODBUS Este protocolo foi proposto em 1979 pela

Leia mais

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas: Computadores de alto-desempenho são utilizados em diversas áreas: - análise estrutural; - previsão de tempo; - exploração de petróleo; - pesquisa em fusão de energia; - diagnóstico médico; - simulações

Leia mais

PHC Serviços CS. A gestão de processos de prestação de serviços

PHC Serviços CS. A gestão de processos de prestação de serviços PHC Serviços CS A gestão de processos de prestação de serviços A solução que permite controlar diferentes áreas de uma empresa: reclamações e respectivo tratamento; controlo de processos e respectivos

Leia mais

Paralelismo a Nível de Instrução

Paralelismo a Nível de Instrução Paralelismo a Nível de Instrução É possível obter maior desempenho computacional com: tecnologias mais avançadas, tais como circuitos mais rápidos; melhor organização da CPU, tais como o uso de múltiplos

Leia mais

Orientação a Objetos

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

Leia mais

Organização e Arquitetura de Computadores. Hugo Barros email@hugobarros.com.br

Organização e Arquitetura de Computadores. Hugo Barros email@hugobarros.com.br Organização e Arquitetura de Computadores Hugo Barros email@hugobarros.com.br RISC X SISC RISC: Reduced Instruction Set Computer Nova Tecnologia para máquinas de alta performance; Máquina com um conjunto

Leia mais