UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO

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

Download "UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO"

Transcrição

1 UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ESTUDO DE RESOLUÇÃO DO CLIQUE MÁXIMO ATRAVÉS DE OPEN MPI por Jéferson Fernandes da Silva Itajaí (SC), Dezembro de 2013

2 UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ESTUDO DE RESOLUÇÃO DO CLIQUE MÁXIMO ATRAVÉS DE OPEN MPI Área de Algoritmos por Jéferson Fernandes da Silva Relatório apresentado à Banca Examinadora do Trabalho Técnico-científico de Conclusão do Curso de Ciência da Computação para análise e aprovação. Orientador: Rafael de Santiago, M.Sc. Itajaí (SC), Dezembro de 2013

3 À minha família e especialmente à Nildo Carlos da Silva, meu querido pai.

4 AGRADECIMENTOS Agradeço a Deus, por todos os momentos que foram superados e que me fizeram aprender mais sobre a vida. A minha família, mãe, pai, irmãos, por sempre estarem presentes em minhas escolhas e me ensinarem a ser sempre uma pessoa melhor. A minha companheira, Micaelly de Oliveira Mesquita, pela compreensão, carinho, reflexões e conselhos. A todos os professores que me acompanharam nesses anos, que passaram um pouco de seu conhecimento, motivações e visões do mundo ao qual estou sempre sendo preparado. Ao Rafael de Santiago, professor e orientador, por ter proporcionado diversos momentos de aprendizado, dentro e fora de sala de aula, auxiliando e proporcionando esta oportunidade. A tarefa não é tanto ver o que ninguém viu ainda, mas pensar o que ninguém pensou sobre algo que todos vêem Arthur Schopenhauer.

5 RESUMO SILVA, Jéferson Fernandes da. Estudo de Estratégia para Abordar Programação Paralela Open MPI em Problemas NP-Completo. Itajaí, folhas. Trabalho Técnicocientífico de Conclusão de Curso (Graduação em Ciência da Computação) Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, Os problemas NP-Completo estão relacionados a problemas de otimização como alocação de recursos, detecção e correção de erros em comunicação digital, genética, transporte e logística. Estes problemas são conhecidos por sua complexidade computacional exponencial, o que os define como intratáveis para tamanhos consideráveis de entrada. Para que estes problemas possam ser resolvidos em tempo razoável, podem ser utilizadas várias técnicas encontradas na computação, tais como: Algoritmos Aproximados, Heurísticas, Programação Paralela, entre outros. O projeto tem o objetivo de analisar o desempenho do problema NP- Completo Clique Máximo, executando-o sequencialmente, paralelamente na mesma máquina com threads e em mais de uma máquina com threads, nestes últimos utilizando a tecnologia livre Open MPI. O trabalho é fundamentado em livros, pesquisas acadêmicas e artigos científicos, que possibilitaram aprimorar os conceitos pertinentes ao problema NP-Completo e as estratégias abordadas por diversos autores na busca da resolução mais eficiente possível dos problemas desta classe. O desenvolvimento do TTC2 iniciou com as codificações dos algoritmos sequencial e paralelo, para que pudessem ser executados visando efetuar a coleta dos dados a partir de quatro execuções em cada ambiente heterogêneo, onde se obteve a média e os resultados analisados comparativamente, possibilitando posicionar as estratégias abordadas neste trabalho e a tecnologia livre Open MPI. A estratégia abordada foi baseada na utilizada por Pardalos et al. (1997) e tem como objetivo enviar vértices do grafo para que as threads destinadas ao processamento possam obter os cliques que aquele vértice pertence, em múltiplas máquinas em um ambiente de rede. Através dos resultados obtidos é possível observar que para mais densos o paralelismo é justificável, assim destes resultados é importante destacar que as melhoras obtidas são de mais de 2 vezes com relação a programação sequencial. Palavras-chave: NP-Completo. Computação Paralela. Open MPI.

6 ABSTRACT The problems are NP -complete optimization problems related to resource allocation, detecting and correcting errors in digital communication, genetics, transportation and logistics. These problems are known for their exponential computational complexity, which defines them as intractable for sizeable input. Approximate Algorithms, Heuristics, Parallel Programming, among others: that these problems can be solved in reasonable time, various techniques found in computing, such as may be used. The project aims to analyze the performance of NP- Complete Click Maximum running it sequentially, in parallel on the same machine with threads and on more than one machine with threads in recent technology using the free Open MPI. The work is based on books, academic research and scientific articles, which enabled enhance relevant to the problem NP-Complete concepts and strategies discussed by several authors in search of the most efficient possible resolution of the problems of this class. The development of TTC2 began with the encodings of sequential and parallel algorithms, so they could be executed aiming perform data collection from four plays in each heterogeneous environment, where it averaged and compared the results analyzed, enabling positioning strategies addressed in this work and the free Open MPI technology. The strategy was based on the addressed used by Pardalos et al. (1997 ) and aims to send vertices of the graph so that the intended processing threads can get the clicks that vertex belongs, on multiple machines in a network environment. Through the results, we observe that for denser parallelism is justifiable, so these results it is important to note that the improvements obtained are more than 2 times compared with the sequential programming. Keywords: NP-Complete. Parallel Computing. Open MPI.

7 LISTA DE FIGURAS Figura 1. Algoritmo Determinístico e Não-determinístico Figura 2. Descrição tentativa do mundo NP Figura 3. Redução Polinomial Figura 4. Redução do ciclo Hamilton para o problema do Caxeiro-Viajante Figura 5. Árvore de backtracking Figura 6. Um grafo com 4-Clique Figura 7. Um grafo com Clique Máximo Figura 8. Multicomputadores interconectados Figura 9. Classes que compõem o Open MPI Figura 10. Resultados da execução do clique do grafo Figura 11. Grafo exemplo e os conjuntos V, A e B Figura 12. Árvore de backtracking Figura 13. Arquitetura em múltiplos computadores Figura 14. Divisão do grafo em subgrafos Figura 15. Árvore de backtracking paralela Figura 16. Resultados obtidos nos grafos menos densos Figura 17. Resultados obtidos nos grafos mais densos Figura 18. Resultados obtidos nos grafos dos grafos com densidades diferentes

8 LISTA DE TABELAS Tabela 1. Equivalência de tipos de dados Tabela 2. Grafos DIMACS utilizados nas execuções para coleta dos dados Tabela 3. Grafos com a mesma quantidade de vértices e densidades diferentes

9 LISTA DE QUADROS Quadro 1. Estrutura do código MPI em C Quadro 2. Código Hello World em Open MPI Quadro 3. Logica MaxClique Quadro 4. Resultados da execução sequencial do Clique Máximo Quadro 5. Resultados da execução do Clique Máximo com múltiplas threads Quadro 6. Comparativo entre as execuções do Clique Máximo Quadro 7. Clique Máximo Função MaxClique Quadro 8. Clique Máximo Bloco Main Quadro 9. Clique Máximo Função MaxCliqueMaster Quadro 10. Clique Máximo Função MaxCliqueSlave... 61

10 LISTA DE ABREVIATURAS E SIGLAS C++ CAM CAMHAM CD CPU CUDA DIMACS DVD E/S GCC GPU MIMD MPI MISD NP OMPI OPAL OPEN MPI ORTE P SAT SIMD SISD TTC UNIVALI C Plus Plus Problema do Caminho Problema do Caminho Hamiltoniano Compact Disc Central Processing Unit Compute Unified Device Architecture Center for Discrete Mathematics and Theoretical Computer Science Digital Versatile Disc Entrada/Saida GNU Compiler Collection Graphics Processing Unit Multiple Instruction, Multiple Data Message Passing Interface Multiple Instruction, Single Data Non-Deterministic Polynomial Time Open Source Message Passing Interface Layer Open Source Message Passing Interface Portable Access Layer Open Source Message Passing Interface Open Source Message Passing Interface Run-Time Enviroment Deterministic Polynomial Time Satisfazibilidade Single Instruction, Multiple Data Single Instruction, Single Data Trabalho Técnico-científico de Conclusão de Curso Universidade do Vale do Itajaí

11 SUMÁRIO 1 INTRODUÇÃO PROBLEMATIZAÇÃO Formulação do Problema Solução Proposta OBJETIVOS Objetivo Geral Objetivos Específicos METODOLOGIA FUNDAMENTAÇÃO TEÓRICA TEORIA DA COMPLEXIDADE Classe P Classe NP Classe NP-Completo Técnica Branch & Bound PROBLEMA CLIQUE Heuristicas Programação paralela Estrutura de um código MPI TRABALHOS SIMILARES Analise Comparativa de Algoritmos NP-Completo Executados em CPU e GPU Utilizando CUDA An Exact Parallel Algorithm For The Maximum Clique Problem Comparativo e Considerações DESENVOLVIMENTO ALGORITMO EXATO Clique Máximo ALGORITMO PARALELO TESTE E RESULTADOS Ambiente de Testes Resultados CONCLUSÕES APÊNDICE A. ALGORITMO SEQUENCIAL A.1 CLIQUE MÁXIMO APÊNDICE B. ALGORITMO PARALELO B.1 BLOCO MAIN B.2 CLIQUE MÁXIMO MASTER B.3 CLIQUE MÁXIMO SLAVE... 61

12 12 1 INTRODUÇÃO Existem problemas computacionais que são classificados como "fáceis" ou "difíceis". Esta classificação é obtida através da análise da complexidade dos algoritmos mais eficientes para um determinado problema. A partir de uma análise matemática, extrai-se a complexidade que é representada através de uma função. Se a função for polinomial, significa que o problema pode ser resolvido demandando certa quantidade de recursos (tempo ou espaço) em relação ao volume de entrada. Nestes casos classifica-se o problema como sendo fácil. Caso a função seja exponencial, o problema demandará recursos exponenciais em relação à entrada, caracterizando o problema como difícil (SIPSER, 2007). Neste contexto existem duas classes de complexidade importantes para o estudo de computação: a Classe P, composta por problemas que podem ser resolvidos em tempo polinomial determinístico, a Classe NP (Polinomial Não-Determinístico) onde os problemas podem ser resolvidos por um algoritmo não determinístico em tempo polinomial e pode ser verificados em tempo polinomial (TOSCANI; VELOSO, 2005; SIPSER, 2007). Para a Ciência da Computação teórica e matemática contemporânea à questão "P = NP" é um dos maiores problemas não resolvidos. Caso essas classes sejam iguais, qualquer problema polinomialmente verificável seria polinomialmente decidível (SIPSER, 2007). De acordo com Arora e Barak (2009), os problemas da classe NP-Completo possuem complexidade exponencial determinística, pertencem também à classe NP e podem ser reduzidos polinomialmente a todos os problemas da mesma. São exemplos de problemas desta classe: Cobertura de Vértices, K-Coloração, Clique do grafo, Caminho Hamiltoniano, Caixeiro Viajante, Substituição de Expressões Regulares, Chave de Cardinalidade Mínima, Escalonamento em Multiprocessadores, entre outros (GAREY; JOHNSON, 1979). Este trabalho abordará o problema NP-Completo Clique Máximo, este consiste do problema Clique que é um grafo composto por um conjunto de vértices no qual possuem conexões mútuas, assim Clique Máximo é determinar o máximo de vértices que possuem conexões mútuas (ZIVIANI, 2011). Problemas NP-Completo são facilmente encontrados e estão relacionados a problemas de otimização: em alocação de recursos, detecção e correção de erros em comunicação digital, genética, transporte e logística (PAPADIMITRIOU;STEIGLITZ, 1998). Para que estes

13 13 problemas possam ser resolvidos em tempo razoável, podem ser utilizadas várias técnicas encontradas na Computação: Algoritmos Aproximados, Heurísticas, Programação Paralela entre outros (ZIVIANI, 2011). A Programação Paralela surgiu para aumentar a disponibilidade, aproveitando a evolução tecnológica e o baixo preço do hardware (STALLINGS, 2010). Uma das abordagens deste tipo de programação é usar múltiplos processadores em paralelo, visando dividir a carga de trabalho. Organizações mais comuns de múltiplos processadores em paralelo são: Multiprocessadores Simétricos (SMP, do inglês Symmetric Multiprocessor), Clusters e o Sistema de Acesso não Uniforme à Memória (NUMA, do inglês Nonuniform Memory Acess) (STALLINGS, 2010). A organização SMP é a interligação de um grupo de processadores semelhantes no mesmo computador interligados por barramento ou por algum método de comutação, a organização Cluster é a interligação de um grupo de computadores com recursos próprios e trabalhando de forma unificada, já a organização NUMA utiliza o conceito de Cluster e em cada nó (ou seja, cada maquina) utiliza o conceito de SMP, com o recurso de todos os processos terem acesso a todas as partes da memória principal podendo efetuar operações de leituras e escritas (STALLINGS, 2010). A tecnologia MPI é uma interface entre aplicativo e programação (API) padronizada utilizada para programação paralela e/ou computação distribuída. É constituída de duas versões, a MPI-1(de 1994) e a MPI-2(de 1996), onde a MPI-2 é uma versão composta pela primeira e mais recursos. A tecnologia livre Open MPI é um projeto de tecnologia MPI (do inglês, Message Passing Interface), open source, desenvolvido e mantido por um consórcio de ensino, pesquisadores e pessoas ligadas à indústria (OPENMPI, 2013). O trabalho sugerido nesta proposta tem o objetivo de analisar o desempenho de dois problemas NP-Completo ao serem executados sequencialmente em um processador e paralelamente em múltiplos processadores, utilizando a tecnologia livre Open MPI. Neste contexto, pretende-se responder a seguinte pergunta de pesquisa: Como utilizar a tecnologia livre Open MPI para resolver problemas NP-Completo, de modo a reduzir o tempo de execução em relação às tecnologias sequenciais?

14 14 Primeiramente foi efetuado o levantamento do material destinado ao aprofundamento nos conceitos abordados no desenvolvimento do trabalho, assim foi pesquisado os Problemas NP-Completo com o objetivo de observar (conhecer) cada particularidade envolvida e as abordagens conhecidas, aprimorando os conceitos e possibilitando a realização da pesquisa de implementação dos algoritmos sequenciais e paralelos e também foi pesquisado os conceitos e tecnologias para possibilitar o pleno desenvolvimento utilizando a tecnologia livre Open MPI. Assim concluídas foi possível executar os algoritmos e coletar as informações necessárias para efetuar os comparativos. 1.1 PROBLEMATIZAÇÃO Formulação do Problema Posicionar problemas NP-Completo utilizando dois paradigmas da computação, a programação Sequencial e a programação Paralela, buscando melhor aplicar as técnicas conhecidas e obter resultados significativos para que se possa encontrar a resolução destes problemas em tempo polinomial. Como a tecnologia livre Open MPI alcança alto desempenho os problemas da classe NP-Completo podem ser analisados visando bons resultados Solução Proposta Para solucionar o problema proposto serão codificados algoritmos para programação sequencial para CPU e programação paralela para múltiplas threads e múltiplos computadores com múltiplas threads, utilizando a tecnologia livre Open MPI. Os resultados obtidos serão analisados comparativamente visando posicionar a tecnologia livre Open MPI na resolução dos problemas NP-Completo. 1.2 OBJETIVOS Objetivo Geral Identificar estratégias para abordar o problema do Clique Máximo em Programação Paralela utilizando a tecnologia livre Open MPI.

15 Objetivos Específicos Os objetivos específicos deste projeto de pesquisa são: Levantar algoritmo para o Clique Máximo; Codificar o algoritmo sequencial; Codificar o algoritmo paralelo; Coletar e analisar os dados de forma comparativa e posicionar a perspectiva paralela utilizada; Indicar os potenciais da Programação Paralela com relação à Programação Sequencial aplicada ao problema do Clique Máximo. 1.3 METODOLOGIA Este trabalho foi divido em seis etapas: (i) levantamento de material para fundamentação teórica; (ii) codificação do algoritmo sequencial; (iii) codificação do algoritmo paralelo; (iv) execução e coleta de dados; (v) análise dos resultados dos experimentos; (vi) documentação do TTC. Na primeira etapa, foram pesquisadas e conceituadas todas as informações necessárias para a realização deste projeto, nas áreas de teoria da complexidade, problemas NP-Completo, programação paralela e tecnologia livre Open MPI. As informações foram extraídas principalmente em trabalhos de conclusão, dissertações de mestrados, livros e artigos. Na segunda etapa, foi analisada a lógica do algoritmo, onde o mesmo foi codificado e documentado. Na terceira etapa, que foi realizada no TCC II, foi codificado o algoritmo em programação paralela utilizando a tecnologia livre Open MPI baseando-se na fundamentação e nos trabalhos similares. Na quarta e quinta etapa, foi realizada a coleta dos dados com base nas execuções dos algoritmos e a analise dos resultados utilizando de uma metodologia comparativa visando a confiabilidade e possibilitando posicionar a tecnologia livre Open MPI.

16 16 Na última etapa, foi realizada a documentação do TCC I e TCC II, onde são descritos a fundamentação, codificação dos algoritmos, dados coletados das execuções e análises de resultados obtidos.

17 17 2 FUNDAMENTAÇÃO TEÓRICA A Fundamentação Teórica realiza um levantamento de conceitos importantes relacionais ao projeto deste TTC. Os tópicos a serem destacados são: Classes de Complexidade, Problema NP-Completo Clique Máximo, Programação Paralela e tecnologia livre Open MPI. 2.1 TEORIA DA COMPLEXIDADE A Teoria da Complexidade estuda a razão de problemas computacionais quanto a sua dificuldade, computacionalmente difíceis ou fáceis e quais destes problemas estão relacionados quanto ao consumo de recurso (SIPSER, 2005). Um problema computacional é aquele que se pode obter uma solução de acordo com uma determinada entrada. Solução é o que satisfaz a relação com entrada utilizada. Podemos utilizar como exemplo o problema de ordenação, onde a entrada é uma lista preenchida com elementos aleatórios e como solução é gerada uma sequência ordenada de seus elementos (NIKOLAY, 2013). Problemas computacionais são medidos de acordo com a utilização de tempo e/ou memória. Segundo Cook (1983) a complexidade de tempo é a medida de complexidade mais importante, pois as pesquisas realizadas são fortemente direcionadas para projetar e analisar algoritmos quanto a sua eficiência. O algoritmo que fornece a solução mais rápida é considerado o mais eficiente (GAREY; JOHNSON, 1979). Para mensurar a complexidade de tempo de um algoritmo é preferível evitar a medida empírica, esta é fortemente dependente da programação e da maquina utilizada para implementar o algoritmo, de maneira que se dois programas são comparados em duas maquinas os resultados poderão ser diferentes devido as características das máquinas serem diferentes. A alternativa para a medida empírica é a utilização de cálculos matemáticos para analisar as dificuldades intrínsecas na resolução do problema (TOSCANI; VELOSO, 2005). Segundo Toscani e Veloso(2005) para medir a quantidade de trabalho despendido por um algoritmo, é escolhido uma operação, denominada operação fundamental, está somente é aceitável se o número de operações executadas pelo algoritmo é proporcional ao número de execuções da operação fundamental.

18 18 Segundo Toscani e Veloso (2012) o esforço de um algoritmo sobre uma dada entrada, considerando a sequencia de passos executados pelo algoritmo e a quantidade de vezes que são executadas as operações fundamentais pode-se descrever pela formula: Equação 1 Um problema computacional pode ser resolvido por vários algoritmos. Logo, para classificá-lo de acordo com uma função de complexidade, considera-se o algoritmo conhecido mais eficiente para resolvê-lo (TOSCANI; VELOSO, 2012). Dada complexidades dos problemas computacionais, existe um sistema de classificação, chamado de Classes de complexidade, que são conjuntos de problemas que podem ser decididos dentro de um mesmo recurso computacional (ARORA; BARAK, 2009). Em relação ao recurso computacional requerido, as três classes de complexidade envolvidas no contexto deste trabalho são: P, NP e NP-Completo. Para compreender as classes de complexidade, os conceitos de algoritmos determinísticos e não determinísticos são fundamentais: (i) algoritmos determinísticos são aqueles que o resultado de cada operação é obtido unicamente; e (ii) algoritmos não determinísticos são aqueles que o resultado não é unicamente definido, sendo capaz de escolher uma dentre as alternativas possíveis a cada passo. Através de um dispositivo teórico é possível execução de múltiplas configurações consumindo o tempo de apenas uma. A Figura 1 ilustra as duas definições. (ZIVIANI, 2011).

19 19 Figura 1. Algoritmo Determinístico e Não-determinístico Fonte: Adaptado Sipser (2007) Nas subseções à seguir são conceituadas e exemplificadas as três classes de complexidade mais relacionadas a este trabalho de conclusão: P, NP e NP-Completo Classe P Segundo Ziviani (2011), a Classe de complexidade P (polynomial time) é o conjunto formado de todos os problemas que podem ser resolvidos por algoritmos determinísticos em tempo polinomial. Os algoritmos de tempo polinomial são considerados rápidos para muitos propósitos e qualquer um pode simular outro com somente algum aumento polinomial no tempo de execução (SIPSER, 2007; CARDOSO, 2012). Segundo Sipser (2007), a classe P é importante por ser invariante a todos os modelos polinomialmente equivalentes a Maquina de Turing determinística de uma única fita e por corresponder aproximadamente à classe de problemas que são solúveis por um computador em tempo aceitável. Segundo Ziviani (2011), um problema da Pesquisa Sequencial consiste em percorrer um conjunto de registros, do inicio até encontrar o que se procura, este conjunto que armazenará os dados pode-se uma estrutura de arranjo que possui uma chave que identifica o

20 20 registro, assim caso encontre o registro que se procura é retornado à chave ou posição do registro neste arranjo, caso contrario retorna o valor zero Classe NP Segundo Ziviani (2011), a Classe de complexidade NP (Non-Deterministic Polynomial Time) é o conjunto formado por todos os problemas que são solucionados por algoritmos não determinísticos em tempo polinomial. Os problemas desta classe podem ser verificados utilizando algoritmos determinísticos em tempo polinomial, segundo Sipser (2007) esta característica é chamada de Verificabilidade polinomial e é importante para entender a complexidade do problema. Assim sendo, se P = NP, problemas que são resolvidos em tempo exponencial poderiam ser resolvidos em tempo polinomial, o que resultaria em uma grande redução do tempo de execução. Uma área na qual esta mudança seria importante é a Criptografia. Quando um sistema de criptografia é criado, uma de suas premissas é que para que se possa quebrar a segurança consumindo um tempo exponencial. Caso P = NP, os algoritmos de quebra de criptografia poderiam ser executados mais rapidamente, consumindo segundos ou minutos, ao invés de semanas, meses ou anos (SIPSER, 2007;ARORA; BARAK, 2009). Figura 2. Descrição tentativa do mundo NP Fonte: Adaptado de Ziviani (2011) Classe NP-Completo Segundo Ziviani (2011), Stephen Cook e Leonid Levin buscavam um problema NP que pudesse ser resolvido utilizando um algoritmo polinomial determinista, de forma que

21 21 todos os problemas NP também pudessem ser resolvidos em tempo polinomial, assim surgindo à questão P = NP, esta que busca saber se algum problema NP esta contido em P. Segundo Ziviani (2011), para poder provar que um problema é NP-Completo é preciso seguir alguns passos, como: (i) primeiramente provar que o problema é NP; (ii) e em seguida mostrar que um problema NP-Completo pode ser transformado para o problema NP, através da transformação polinomial. Segundo Ziviani (2011, p. 413), Considere II 1 e II 2 dois problemas sim/não, conforme mostrada na Figura 3. Suponha que exista um algoritmo A 2 para resolver II 2. Se for possível transformar II 1 em II 2 e sendo conhecido um processo de transformar a solução de II 2 em uma solução de II 1, então o algoritmo A 2 pode ser utilizado para resolver II1. Se as transformações nos dois sentidos puderem ser realizadas em tempo polinomial, então II 1 é polinomialmente transformável em II 2. Figura 3. Redução Polinomial Fonte: Adaptado de Ziviani (2011) Segundo Sipser(2007) para provar que um dado problema B é NP-Completo, verificase duas condições: (i) se B esta em NP; e (ii) se todo problema A em NP é polinomialmente redutível a B. Como exemplo será provado que o problema do caixeiro-viajante é NP-Completo a partir do problema do ciclo de Hamilton, que é um dos primeiros problemas a ser provado como NP-Completo (ZIVIANI, 2011). Segundo Ziviani (2011) para provar que o problema do caixeiro-viajante é NP- Completo são realizados 2 passos, onde o primeiro consiste em mostrar que o problema está em NP apresentando um algoritmo não determinista polinomial para o problema do caixeiro-

22 22 viajante ou a partir de uma solução dada efetuar a verificação em tempo polinomial, o segundo passo consiste em apresentar uma redução polinomial para o problema do ciclo de Hamilton para o problema do caixeiro-viajante. A redução polinomial pode ser efetuada como na Figura 4, onde os vértices representam as cidades e as arestas as distancias, utilizando peso 1 para quando existe a aresta originalmente e o peso 2 para quando não existir. Figura 4. Redução do ciclo Hamilton para o problema do Caxeiro-Viajante Fonte: Adaptado de Ziviani (2011). Em muitos casos, opta-se por utilizar uma solução heurística para problemas NP- Completo. Segundo ZIVIANI (2011), uma heurística é uma maneira de resolver um problema computacional gerando uma solução, que pode ser ótima, ou seja, a resposta exata para o problema, próxima ou distante da solução ideal (ótima). Geralmente, justifica-se o uso de uma solução heurística para casos em que a obtenção da solução ótima demandaria tempo exponencial. Com as heurísticas, relaxa-se a exigência de uma solução para um resultado ideal, para uma resposta em tempo polinomial Técnica Branch & Bound Segundo Ziviani (2011), a finalidade desta técnica é eliminar partes do problema que não chegarão a uma solução melhor do que a já obtida. Por exemplo, em um problema de caminho, a cada etapa (ou seja, cada vértice), é verificado o custo do caminho percorrido até aquele ponto, assim se este custo for maior ou igual a um custo obtido então este caminho é eliminado. Branch & Bound é uma técnica utilizada para encontrar a solução de problemas através da enumeração sistemática de possíveis soluções, assim o algoritmo tende a reduzir o

23 23 número de soluções geradas utilizando limitantes inferiores e superiores. A técnica consiste em subdividir um problema em subproblemas menores (branching) e elimina os conjuntos de subproblemas que podem não levar a uma solução ótima (bounding) (CARMO; ZÜGE, 2012). O limitante superior é um valor estimado, maior ou igual ao valor de uma solução ótima de um determinado subproblema e o limitante inferior pode ser uma estimativa ou a melhor solução de algum subproblema (CARMO; ZÜGE, 2012). O passo de branching é onde o problema é subdividido em subproblemas e pode ser emprega a técnica de backtracking, que consiste em gerar sistematicamente todas as soluções possíveis, na Figura 5 é ilustrada uma árvore de backtracking e o passo de bounding é onde ocorre a eliminação do subproblema verificando o valor do limitante superior com o valor do limitante inferior do problema global, assim caso o limitante maior seja menor que o limitante inferior é efetuado a eliminação (CARMO; ZÜGE, 2012). Figura 5. Árvore de backtracking Fonte: Adaptado de Kreher e Stinson (1999). Há uma grande busca por algoritmos cada vez mais eficientes, mesmo que não polinomiais, devido ao Problema do Clique Máximo ser um dos problemas fundamentais. Na literatura há diversos algoritmos e diversas abordagens para encontrar a solução exata, destas, duas são consideradas clássicas, Branch & Bound e Lower Bound, a primeira por limites

24 24 superiores associada à técnica enumerativas e a segunda por limites inferiores através de algoritmos de procura local (CARMO; ZÜGE, 2012; CAVIQUE; REGO; THEMIDO,2013). A técnica de Branch & Bound é utilizada em vários algoritmos por diversos autores em sua base, mas cada um difere utilizando abordagens diferentes para problemas diferentes, buscando cada vez mais soluções otimizadas, alguns autores tratam de problemas do mundo real enquanto outros tratam de problemas do mundo artificial. Podem-se citar algumas áreas, tais como análise de mercado, seleção de projetos, teoria da transmissão de sinais, economia, agendamentos, design experimental, visão computacional entre outros (CARMO; ZÜGE, 2012; CAVIQUE; REGO; THEMIDO,2013). 2.2 PROBLEMA CLIQUE O Clique do Grafo é um problema comprovadamente NP-Completo por Richard Karp em 1972, este possui a característica de que todos os vértices possuem conexões mútuas. O problema do Clique possui algumas variações, tais como k-clique, Clique Máximo e Clique maximais. O k-clique é um grafo que possui um tamanho especifico k, ilustrado na Figura 6 (SIPSER, 2007; ZIVIANI, 2011). Figura 6. Um grafo com 4-Clique Fonte: Adaptado de SIPSER (2007) Outra variação do problema Clique é o Clique Máximo de um grafo, que consiste em um clique com o maior número de vértices que possuem conexões mútuas, conforme ilustrado na Figura 7.

25 25 Figura 7. Um grafo com Clique Máximo Fonte: Adaptado de SIPSER (2007) Uma das aplicações estudadas nos trabalhos similares é um modelo prático do problema, aplicada na área de sistemas distribuídos, sendo esta utilizada em uma rede de computadores espalhados e conectados por internet com a finalidade de testar as condições adversas. O estudo tinha por finalidade encontrar conjuntos estáveis onde os vértices representavam computadores e arestas representavam a conexão com determinada qualidade Heuristicas As heurísticas são maneiras de resolver um dado problema computacional em casos que para chegar a uma solução ideal demandaria de recursos (tempo ou espaço) exponencial, assim as soluções podem ser ótimas, próximas ou distantes da solução ideal Hill-Climbing O método de Subida de Encosta (Hill-Climbing) faz analogia à escalada de uma colina, sugerindo que o caminho mais rápido para o topo de uma colina é mover-se de forma contínua no sentido do valor crescente. A busca é efetuada visitando os vizinhos imediatos, desta maneira nenhum vizinho terá o valor mais alto e só termina quando alcança o topo (KREHER; STINSON, 1999).

26 Simulated Annealing O Recozimento Simulado (Simulated Annealing) é um dos métodos análogo ao processo físico de resfriamento de um metal, este processo consiste em reduzir a energia interna do material cuidadosamente. A função objetivo corresponde ao nível de energia do sistema, esta que se deseja minimizar. Este método utiliza da estratégia de busca na vizinhança de forma semi-aleatória e de probabilidade de aceitação para novas soluções, onde soluções que melhoram o valor da função objetivo são sempre aceitas e soluções que pioram o valor da função objetivo são condicionalmente aceitas (KREHER; STINSON, 1999; PEREIRA, 2004) Algoritmos Genéticos Algoritmos Genéticos (Genetic Algorithm) é um método análogo ao processo evolutivo, onde os indivíduos representam a solução do problema, sendo assim, a seleção natural é um critério de escolha das melhores soluções e a eliminação das ruins, o cruzamento e a mutação são meios para a obtenção de novas soluções (LOPES, 1995; AGUIAR, 1998; KREHER; STINSON, 1999) Programação paralela Desde a popularização do computador há uma demanda por computadores cada vez mais eficientes, com maior poder computacional e de armazenamento para resolver diversos problemas na ciência, engenharia e indústria. Alguns incentivos que intensificaram a exploração do paralelismo pode-se destacar os avanços consideráveis na área de tecnologia e a redução do custo do hardware (TANENBAUM, 2007; STALLINGS, 2010). Segundo Tanenbaum (2007), a velocidade dos circuitos não pode aumentar indefinidamente devido aos limites físicos, como a dissipação de calor e problemas que podem surgir devido a redução do tamanho dos transistores. Na historia dos computadores pode-se destacar que por algumas décadas o principal método de aumento do desempenho nas CPUs(Central Proessing Units) é devido ao incremento da velocidade de operações por segundo dos processadores, conhecido como Clock, partindo de poucas operações por segundo até chegar em frequências entre 1GHz e 4Ghz em meados dos anos 2000, após isto alguns limites físicos foram encontrados, tais como: (i) o alto consumo de energia dos circuitos integrados; (ii) restrições de dissipação de calor; (iii) e limites na fabricação de

27 27 resistores ainda menores. Isto motivou arquitetos de computadores buscarem alternativas para se ganhar desempenho (TANENBAUM, 2003). Os arquitetos de computadores passaram a recorrer ao método paralelização de processamento, seja em múltiplos computadores ou em múltiplas unidades de processamento. O paralelismo pode ser introduzido em vários níveis, desde o mais baixo, que resultaria em adicionar ao chip da CPU, sendo por meio de pipeline e projetos superescalares, por meio de palavras de instrução, por meio de características para permitir que a CPU possua múltiplos threads de controle e por meio de várias CPUs no mesmo chip. Em um nível seguinte pode-se introduzir placas de CPUs extras ao sistema, estas com funções específicas tais como processamento de pacotes de redes, multimídia e outros. O nível final envolve utilizar a conexão de rede para interligar grades de computadores (TANENBAUM, 2007). Nas seções seguintes tópicos importantes para o melhor entendimento da programação paralela serão abordados, tais como Taxonomia de Flynn, multiprocessadores, multicomputadores (ou múltiplos computadores) e sistemas distribuídos Taxonomia de Flynn Segundo Stallings (2010), a Taxonomia de Flynn é ainda a maneira mais comum de categorizar sistemas com capacidade de processamento paralelo. Esta classificação é baseada em dois conceitos, fluxo de instruções e fluxo de dados, onde o fluxo de instruções corresponde a uma sequência de instruções a ser executada por um computador e o fluxo de dados consiste em uma sequência de dados a ser manipulados por um fluxo de controle. As combinações do fluxo de instruções e fluxo de dados são divididas em SISD (single instruction, single data), SIMD (single instruction, multiple data), MISD (multiple instruction, single data), MIMD (multiple instruction, multiple data) (TANENBAUM, 2007; STALLINGS, 2010). SISD: É um sistema com um único fluxo de instruções que é executada por um único processador para manipular os dados armazenados em uma única memória, um único dado. SIMD: É um sistema com um único fluxo de instruções que é executada em vários conjuntos de dados simultaneamente.

28 28 MISD: É um sistema que executa múltiplas instruções em um mesmo dado, pode-se considerar um dado transmitido para um conjunto de processadores para ser executado por uma sequencia de instruções diferentes. MIMD: É um sistema que executa múltiplas instruções em múltiplos dados, pode-se considerar um conjunto de processadores que executam sequencias de instruções diferentes simultaneamente para um conjunto de dados diferentes. Os multiprocessadores e multicomputadores são considerados MIMD Múltiprocessadores Segundo Tanenbaum (2003), um multiprocessador é um computador onde duas ou mais CPUs compartilham acesso total a uma memoria RAM comum. Por exemplo, um programa que esta executando em uma das CPUs pode enxergar e manipular qualquer espaço de endereço da memoria virtual. Segundo Stallings (2010), multiprocessadores é uma das abordagens para melhorar o desempenho, de forma a executar operações em paralelo assim dividindo a carga de trabalho e/ou até mesmo melhorar a disponibilidade. Podem ser divididos em Multiprocessadores Simétricos (Symmetric Multiprocessor) e Sistema de Acesso não Uniforme à Memória (Nonuniform Memory Access). Multiprocessadores Simétricos: Segundo Stallings (2010) é uma arquitetura de hardware computacional que consiste na interligação de um grupo de processadores semelhantes no mesmo computador através de barramento ou algum método de comutação. São características possuir dois ou mais processadores semelhantes, compartilhar memória principal e os recursos de entrada e saída, os processadores desempenham a mesma função e o sistema é controlado por um sistema operacional integrado. Sistema de Acesso não Uniforme à Memória: Segundo Stallings(2010) é um conjunto de computadores com recursos próprios que são interligados, semelhante ao Cluster e possui a característica de poder efetuar operações utilizando todas as memórias dos computadores interligados, onde o tempo de acesso à memória varia de acordo com a região onde esta a memória.

29 Múlticomputadores Segundo Tanenbaum (2003), multicomputadores são CPUs fortemente acoplados que não compartilham memória, assim todos os CPU tem sua própria memoria local. A Figura 8 ilustra multicomputadores interconectados. Estes normalmente compartilham de uma interconexão de alta velocidade, podendo ou não possuir um disco rígido. São conhecidos por uma variedade de nomes, como computadores cluster e Clusters of workstations (clusters de estações de trabalho). Figura 8. Multicomputadores interconectados Fonte: Adaptado de Tanenbaum (2003). Segundo Stallings (2010), cluster é um conjunto de computadores, estações de trabalho, com recursos próprios que são interligados visando fornecer alto desempenho e disponibilidade de forma unificada. Os multicomputadores são interconectados pela interface de rede de várias formas, estas são conhecidas como topologias de rede e pode ser switch, anel, grade, toro duplo, cubo ou hipercubo, onde cada uma possui um papel importante na disponibilidade, controle de dados, dimensionamento entre outras (TANENBAUM, 2003) Sistemas Distribuidos Segundo Tanenbaum (2003), os sistemas distribuídos são semelhantes aos multicomputadores no quesito de não possuírem memoria compartilhada, porém as estações

30 30 de trabalho são completas com todos os periféricos e fracamente acopladas, normalmente interligadas através da internet e podem estar espalhadas pelo mundo. Uma vantagem dos computadores serem fracamente acoplados é que podem ser utilizados por diversas aplicações, porém a desvantagem é que a programação para essas aplicações é difícil devido à falta de um modelo de plataforma comum (TANENBAUM, 2003) Open MPI Segundo TANENBAUM (2007) a tecnologia MPI (Message-Passing-Interface) é constituída de duas versões, a primeira denominada MPI-1, foi publicada no ano de 1994, composta de todos os requisitos base necessários para o padrão de troca de mensagens e a segunda versão, mais complexa e ampliada denominada MPI-2, foi publicada no ano de A tecnologia Open MPI apesar de atender aos tipos de sistemas paralelos citados anteriormente, porém há necessidade de compilar o código para arquiteturas diferentes espera-se maior praticidade em multicomputadores, tendo em vista que estes são fortemente acoplados e normalmente utilizam o mesmo sistema operacional (OPENMPI, 2013). A MPI é constituída de quatro conceitos principais, estes são Comunicador, tipos de dados de mensagens, operações de comunicação e topologias virtuais. O Comunicador é um mecanismo que identifica o grupo de processos e o domínio (contexto) a qual uma operação deve ser efetuada, assim evitando que as mensagens não relacionadas interfiram umas nas outras. As mensagens possuem tipos de dados que são suportados, como caracteres, números inteiros, longos, normais e outros, também sendo possível construir outros a partir destes. As operações de comunicação são utilizadas para enviar e receber os dados, definir modos, bloqueios e qual a forma de comunicação. A topologia virtual são os caminhos de comunicação, de forma a organizar os processos em árvore, anel, grade, toro ou outra. A tecnologia livre Open MPI é um projeto de tecnologia MPI, open source, desenvolvido e mantido por um consorcio de ensino, pesquisadores e pessoas ligadas à

31 31 indústria, com a finalidade de obter altas performances, combinando vários projetos MPI já existentes objetivando uma única implementação MPI integrando as finalidades destes projetos (NEVES, 2009; OPENMPI, 2013). A arquitetura do Open MPI é composta por três classes componentes, combinadas provem todas as suas funcionalidades, é ilustrada pela Figura 9. A camada OMPI (Open MPI Layer) é a camada mais superior e provê a interface MPI para as aplicações. Mais abaixo esta a camada ORTE (Open MPI Run-Time Enviroment) que provê um ambiente de execução paralelo independente das capacidades do sistema. Logo abaixo, a terceira camada OPAL (Open Portable Access Layer) provê uma maior portabilidade das camadas superiores abstraindo peculiaridades especificas do sistema. Abaixo de todas as camadas está o sistema operacional e os outros serviços necessários executando no local (GRAHAM; WOODALL; SQUYRES, 2005; NEVES, 2009). Figura 9. Classes que compõem o Open MPI Fonte: OpenMPI (2013) Estrutura de um código MPI Em todos os arquivos que utilizarão os recursos do MPI é obrigatório a inclusão do cabeçalho mpi.h, este contem todas as definições de funções e constantes necessárias durante o desenvolvimento e compilação do programa. No corpo do código todas as chamadas para funções e constantes do MPI devem ser feitas entre MPI_Init e MPI_Finalize, conforme o Quadro 1 (NEVES, 2009).

32 32 Quadro 1. Estrutura do código MPI em C #include <stdio.h> #include <mpi.h> int main(int argc, char *argv[]) { MPI_Init(&argc, &argv); Bloco de comandos e as instruções MPI MPI_Finalize(); O MPI segue uma padronização que visa a fácil identificação de métodos e tipos que compõem a API, desta forma todos os identificadores possuem o prefixo MPI_. Tipos e constantes são expressas em letra maiúsculas e funções são expressas com a primeira letra maiúscula e as demais em minúsculo, por exemplo, o tipo MPI_SHORT e MPI_Send, respectivamente (OPENMPI, 2013). É empregado um manipulador de erros próprio para o tratamento de exceções, assim caso ocorra algum problema durante a execução a sinalização e as ações a serem tomadas é responsabilidade da API (OPENMPI, 2013). Para poder oferecer suporte a várias linguagens foi desenvolvida uma equivalência de tipos de dados entre a API e as linguagens suportadas, a Tabela 1 ilustra a equivalência com a linguagem C.

33 33 Tabela 1. Equivalência de tipos de dados Tipo de Dados do MPI MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE MPI_PACKED MPI_BYTE Tipo de Dados do C signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int unsigned long int Float Double MPI_LONG_DOUBLE long double Fonte: OpenMPI(2013) Um exemplo de uma implementação Hello World em linguagem C utilizando Open MPI, pode ser visto no Quadro 2: Quadro 2. Código Hello World em Open MPI. #include <stdio.h> #include <mpi.h> int main(int argc, char *argv[]) { int numprocs, rank, namelen; char processor_name[mpi_max_processor_name]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Get_processor_name(processor_name, &namelen); printf("processo %d em %s de %d\n", rank, processor_name, numprocs); MPI_Finalize(); Fonte: OpenMPI (2013)

34 TRABALHOS SIMILARES Devido à complexidade computacional dos problemas NP-Completo, cientistas e estudiosos buscam por utilizar técnicas conhecidas, adaptando-as e até unindo-as, visando encontrar a solução para os problemas NP-Completo ou a melhor solução possível, e consequentemente tendem a explorar formas de aumentar o desempenho através de algoritmos paralelos. A seguir é apresentado dois estudos no campo da programação paralela, o primeiro Analise Comparativa de Algoritmos NP-Completo Executados em CPU e GPU Utilizando CUDA e An Exact Parallel Algorithm for the Maximum Clique Problem (Um Algoritmo Paralelo Exato para o Problema do Clique Máximo) Analise Comparativa de Algoritmos NP-Completo Executados em CPU e GPU Utilizando CUDA Desenvolvido por Elcio Cardoso na Universidade do Vale do Itajaí em 2012, este teve como objetivo comparar a execução de dois problemas NP-Completo, Clique Máximo e Cobertura Mínima de um grafo, em duas arquiteturas diferentes, primeiramente em CPU e posteriormente em GPU, utilizando da tecnologia CUDA. O problema do Clique Máximo tem como objetivo encontrar o conjunto de vértices que possui o maior número de conexões mutuas, ou seja, o clique de tamanho máximo em um dado grafo, e o problema da Cobertura Mínima de um grafo tem como objetivo encontrar o conjunto que possui o menor número de vértices que possuem pelo menos uma das pontas de cada aresta (CARDOSO, 2012). Os algoritmos foram executados e comparados em três ambientes, no primeiro foi usando uma CPU com dois núcleos rodando a 2,4 GHz e os algoritmos desenvolvidos de forma sequencial, no segundo ambiente, uma GPU Nvidia GeForce GT 640 com 384 núcleos CUDA e no terceiro uma GPU Nvidia GeForce GTX 670 com 1344 núcleos CUDA, onde no segundo e no terceiro foi utilizado algoritmos desenvolvidos para buscar o maior desempenho paralelo que esta arquitetura pode oferecer (CARDOSO, 2012). A Figura 10 apresenta a comparação entre as implementações para a CPU e GPUs, ilustrando o tempo de execução obtido nos três ambientes, sendo que nos ambientes que

35 35 utilizam GPU houve a paralização de operações e a divisão em subgrafos. A execução foi dada com as mesmas configurações e dados dos problemas, onde os problemas continham quantidade de vértices diferentes e tamanho do clique diferentes, e os dados foram extraídos da média de cinco execuções em cada ambiente (CARDOSO, 2012). Figura 10. Resultados da execução do clique do grafo Fonte: Cardoso (2012) O autor concluiu que quando os grafos são menores a CPU apresenta vantagem sobre a GPU do ambiente 2 devido o volume de dados a ser processados ser menor, e observou que o mesmo não ocorre na GPU do ambiente 3 pois é mais eficiência neste tipo de operação. Quando os grafos são maiores e consequentemente o volume de dados é maior, as GPUs apresentam vantagem, pois quando o volume de dados aumenta o seu tempo de alocação cresce proporcionalmente e a quantidade de processamento cresce exponencialmente An Exact Parallel Algorithm For The Maximum Clique Problem Desenvolvido por Panos M. Pardalos, Jonas Rappe e Mauricio G. C. Resende e apresentado na conferencia In High Performance and Software in Nonlinear Optimization em 1997, tem como objetivo apresentar um algoritmo paralelo exato portátil para o problema do Clique Máximo em grafos gerais.

36 36 Os algoritmos foram executados e comparados em dois ambientes, no primeiro um computador com 2 processadores e no segundo com 4 processadores, na implementação dos algoritmos utilizou-se a linguagem Fortran 77. Os algoritmos foram testados em grafos ponderados e não ponderados onde o tamanho variava de 64 vértices com arestas até 500 vértices com arestas (PARDALOS; RAPPE; RESENDE, 2013). Os autores abordaram o problema utilizando a estratégia de Mestre-Escravo, esta estratégia é composta por 2 programas, o programa Mestre e o programa Escravo, onde no primeiro concentra o problema com os dados do conjunto de vértices, operações para dividir em subgrafos e a solução dos subgrafos, no segundo, concentra o recebimento do subgrafo, expansão do nó, o processamento e o envio da solução (PARDALOS; RAPPE; RESENDE, 2013). Os autores concluíram com os resultados obtidos após vários testes que há um aumento de performance, mais significativamente proporcional com o aumento de tamanho (número de vértices e densidade) do problema Comparativo e Considerações Os trabalhos similares utilizam da programação paralela para obter maior desempenho na resolução dos problemas NP-Completo. Ambos os trabalhos utilizaram abordagens diferentes devido à utilização de programação e arquiteturas diferentes, onde o primeiro desenvolveu um algoritmo sequencial para tratar em uma CPU e também explorou estratégias para a utilização da programação paralela em CUDA visando abordar os problemas NP- Completo clique máximo e cobertura de vértices, e o segundo desenvolveu estratégias para a utilização de programação paralela em CPU, onde foi executado o algoritmo para o problema do clique máximo, em máquinas com duas e quatro CPUs. Este trabalho se difere do primeiro trabalho similar quanto à utilização da tecnologia CUDA, esta utilizada na implementação da abordagem em programação paralela, e se assemelha na utilização da programação sequencial para o problema NP-Completo clique máximo, possui maior semelhanças com o segundo trabalho, devido à abordagem da programação paralela para CPU, o emprego da tecnologia MPI padrão e estratégias visando resolver o problema do clique máximo.

37 37 3 DESENVOLVIMENTO Serão apresentados tópicos importantes para o desenvolvimento do projeto, testes e análises dos resultados, utilizando das informações obtidas na fundamentação teórica. Primeiramente será codificado o algoritmo sequencial para posteriormente codificar o algoritmo paralelo, tendo em vista analisar a complexidade envolvida e efetuar a analise dos resultados obtidos. 3.1 ALGORITMO EXATO Inicialmente o algoritmo para o Clique foi desenvolvido e explorado para ser utilizado em programação sequencial, a seguir será abordado o processo de implementação e análise da complexidade dos problemas Clique Máximo O problema do Clique Máximo pode ser resolvido utilizando a técnica de recursividade, onde é percorrido o grafo em busca da solução, no Quadro 3 é apresentado a lógica utilizada e a função recursiva MaxClique (KREHER; STINSON, 1999). A função utiliza o seguinte conjunto de dados: V: Vértices do Grafo; A: Adjaventes de V; B: Vértices a serem analisados; C: Vértices que compõem a árvore de backtracking; OptClique: Solução do problema; l: Nível da árvore de backtracking. O algoritmo proposto consiste em percorrer o grafo com base em sua árvore de backtracking utilizando as relações entre vértices já verificadas no conjunto B e identificando os possíveis adjacentes a serem incluídos no clique anterior encontrado. São realizados pelo algoritmo descrito no Quadro 3 os seguintes passos:

Arquitetura de Computadores. Processamento Paralelo

Arquitetura 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 mais

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES João Ricardo Kohler Abramoski (PAIC/FUNDAÇÃO ARAUCÁRIA), Sandra Mara Guse Scós Venske (Orientadora), e-mail: ssvenske@unicentro.br

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Universidade Federal de Campina Grande Centro de Engenharia Elétrica e Informática Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de

Leia mais

Sistemas Distribuídos Message-Passing

Sistemas Distribuídos Message-Passing 0010010101011101010111100010111100010101010100100111001010001001010100101010100010010100101010110101010101 01100000011111101010010100010101010010010101101001000100101010111010101111000101111 101010101001001110010100010010101001010101000100101001010101101010101010110000001111110101001010001010101001001010110100100010010

Leia mais

Análise Comparativa de Algoritmos NP-Completo Executados em CPU E GPU Utilizando CUDA

Análise Comparativa de Algoritmos NP-Completo Executados em CPU E GPU Utilizando CUDA Computer on the Beach 2013 - Artigos Completos 79 Análise Comparativa de Algoritmos NP-Completo Executados em CPU E GPU Utilizando CUDA Elcio Arthur Cardoso, Rafael de Santiago Curso de Ciência da Computação

Leia mais

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór Bacharelado em Sistemas de Informação Sistemas Operacionais Prof. Filipo Mór WWW.FILIPOMOR.COM - REVISÃO ARQUITETURAS PARALELAS Evolução das Arquiteturas Evolução das Arquiteturas Entrada CPU Saída von

Leia mais

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Esbel Tomás Evalero Orellana Universidade Estadual de Santa Cruz Roteiro Breve introdução

Leia mais

Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela. Professor: Francisco Ary

Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela. Professor: Francisco Ary Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela Professor: Francisco Ary Computação Paralela Capacidade de um sistema computacional ser executado de forma simultânea,

Leia mais

Introdução à Computação: Sistemas de Computação

Introdução à Computação: Sistemas de Computação Introdução à Computação: Sistemas de Computação Beatriz F. M. Souza (bfmartins@inf.ufes.br) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória,

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 13 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas NP-Completo Algoritmos Não-deterministas; Classes NP-Completo e NP-Dificil; Teorema

Leia mais

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação MULTIPROCESSADORES

Leia mais

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão Projeto e Análise de Algoritmos NP Completude Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Universidade Federal de Alfenas versão da aula: 0.4 Introdução Problemas intratáveis ou difíceis são comuns

Leia mais

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE COMPARATIVA DE ALGORITMOS NP-COMPLETO EXECUTADOS EM CPU E GPU UTILIZANDO CUDA por

Leia mais

Carlos Eduardo Batista Centro de Informática - UFPB

Carlos Eduardo Batista Centro de Informática - UFPB Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Motivação Arquitetura de computadores modernos Desafios da programação concorrente Definição de concorrência Correr junto Disputa por

Leia mais

Arquitetura de Computadores Paralelos. Introdução Conceitos Básicos Ambientes de Programação Modelos de Programação Paralela

Arquitetura de Computadores Paralelos. Introdução Conceitos Básicos Ambientes de Programação Modelos de Programação Paralela Arquitetura de Computadores Paralelos Introdução Conceitos Básicos Ambientes de Programação Modelos de Programação Paralela Por que estudar Computação Paralela e Distribuída? Os computadores sequenciais

Leia mais

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER COMPARAÇÃO DE DESEMPENHO NA PROGRAMAÇÃO PARALELA HÍBRIDA (MPI + OPENMP) NA BUSCA DE TEXTO EM ARQUIVOS 1 COMPARISON OF PERFORMANCE IN HYBRID PARALLEL PROGRAMMING (MPI + OPENMP) IN SEARCH OF TEXT IN FILES

Leia mais

TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI

TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI Anais do Conic-Semesp. Volume 1, 2013 - Faculdade Anhanguera de Campinas - Unidade 3. ISSN 2357-8904 TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI CATEGORIA: CONCLUÍDO ÁREA:

Leia mais

Introdução à Programação Paralela através de Padrões. Denise Stringhini Calebe Bianchini Luciano Silva

Introdução à Programação Paralela através de Padrões. Denise Stringhini Calebe Bianchini Luciano Silva Introdução à Programação Paralela através de Padrões Denise Stringhini Calebe Bianchini Luciano Silva Sumário Introdução: conceitos de paralelismo Conceitos básicos sobre padrões de programação paralela

Leia mais

Algoritmos Combinatórios: Introdução

Algoritmos Combinatórios: Introdução lucia@site.uottawa.ca UFSC, Fevereiro, 2010 Estruturas e Problemas Combinatórios Introdução a Algoritmos Combinatórios O que são: Estruturas Combinatórias? Algoritmos Combinatórios? Problemas Combinatórios?

Leia mais

SSC510 Arquitetura de Computadores. 6ª aula

SSC510 Arquitetura de Computadores. 6ª aula SSC510 Arquitetura de Computadores 6ª aula PARALELISMO EM NÍVEL DE PROCESSOS PROFA. SARITA MAZZINI BRUSCHI Tipos de Paralelismo Instrução (granulosidade fina) Paralelismo entre as instruções Arquiteturas

Leia mais

Teoria da Computação. Complexidade computacional classes de problemas

Teoria da Computação. Complexidade computacional classes de problemas Teoria da Computação Complexidade computacional classes de problemas 1 Universo de problemas Problemas indecidíveis ou não-computáveis Não admitem algoritmos Problemas intratáveis Não admitem algoritmos

Leia mais

Caracterização de Sistemas Distribuídos

Caracterizaçã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 mais

SISTEMAS OPERACIONAIS DE REDE

SISTEMAS OPERACIONAIS DE REDE SISTEMAS OPERACIONAIS DE REDE Questão 01 O sistema operacional gerencia o sistema de arquivos, que irá armazenar as informações/arquivos. Para esta tarefa, durante a formatação do disco rígido, são criados

Leia mais

Comparação de eficiência entre OpenCL e CUDA

Comparação de eficiência entre OpenCL e CUDA Aluno: Thiago de Gouveia Nunes Orientador: Prof. Marcel P. Jackowski GPGPU O que é GPGPU? É programação de propósito geral em GPUs. =D GPGPU Existem 2 linguagens populares no mercado para GPGPU, o CUDA

Leia mais

Teoria da Complexidade Computacional

Teoria da Complexidade Computacional Teoria da Complexidade Computacional 25 de novembro de 2011 Enquanto a teoria de análise de algoritmos estuda a análise de complexidade de algoritmos, a teoria da complexidade estuda a classificação de

Leia mais

SIST706 Sistemas Distribuídos

SIST706 Sistemas Distribuídos Slide02 Arquiteturas de SD SIST706 Sistemas Distribuídos 2013/1 Prof. Jéfer Benedett Dörr @: prof.jefer@gmail.com profjefer.wordpress.com Notícias Cultura Livre Fontes de Notícias itil LPI Transistores:

Leia mais

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado Multiprocessadores - A evolução tecnológica dos processadores iria diminuir drasticamente. 2- O caminho para o aumento de desempenho é de unir mais de um processador para realizar a mesma tarefa em menos

Leia mais

Computação Paralela (CUDA)

Computação Paralela (CUDA) Universidade Federal do Amazonas Faculdade de Tecnologia Departamento de Eletrônica e Computação Computação Paralela (CUDA) Hussama Ibrahim hussamaibrahim@ufam.edu.br Notas de Aula Baseado nas Notas de

Leia mais

Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores

Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores Ciência da Computação Arq. e Org. de Computadores Processadores Prof. Sergio Ribeiro Composição básica de um computador eletrônico digital: Processador Memória Memória Principal Memória Secundária Dispositivos

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

Multiprogramação leve em arquiteturas multi-core

Multiprogramação leve em arquiteturas multi-core Multiprogramação leve em arquiteturas multi-core Prof. Dr. Departamento de Informática Universidade Federal de Pelotas Sumário Arquiteturas multi-core Programação multithread Ferramentas de programação

Leia mais

Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes

Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Introdução Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente

Leia mais

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador 1 Introdução 1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador possa resolver problemas de forma automática

Leia mais

PROCESSADORES Unidade de Controle Unidade Aritmética e Lógica efetua memória de alta velocidade registradores Program Counter Instruction Register

PROCESSADORES Unidade de Controle Unidade Aritmética e Lógica efetua memória de alta velocidade registradores Program Counter Instruction Register PROCESSADORES Um computador digital consiste em um sistema interconectado de processadores, memória e dispositivos de entrada e saída. A CPU é o cérebro do computador. Sua função é executar programas armazenados

Leia mais

Modelo de Von Neumann

Modelo de Von Neumann 1 Modelo de Von Neumann Memória UC ALU Entrada Saída ACC 2 Arquitetura de Von Neumann 3 O Computador 4 Processador Microprocessadores São processadores contidos em um único encapsulamento (CI). Microcontroladores

Leia mais

Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema

Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema Introdução Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente

Leia mais

INTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ORGANIZAÇÃO COMPUTACIONAL

INTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ORGANIZAÇÃO COMPUTACIONAL INTRODUÇÃO À TECNOLOGIA DA ORGANIZAÇÃO COMPUTACIONAL PROFESSOR CARLOS MUNIZ ORGANIZAÇÃO DE UM COMPUTADOR TÍPICO Memória: Armazena dados e programas Processador (CPU - Central Processing Unit): Executa

Leia mais

Linguagem de Programação II

Linguagem de Programação II Linguagem de Programação II Carlos Eduardo Ba6sta Centro de Informá6ca - UFPB bidu@ci.ufpb.br Mo6vação Adaptar a estrutura lógica de um problema (Ex.: Servidores Web). Lidar com disposi6vos independentes

Leia mais

Teoria da Complexidade Computacional

Teoria da Complexidade Computacional Teoria da Complexidade Computacional Letícia Rodrigues Bueno UFABC Motivação Motivação I can t find an efficient algorithm, I guess I m just too dumb. Fonte: GAREY, M. R. e JOHNSON, D. S. Computers and

Leia mais

Barramento. Prof. Leonardo Barreto Campos 1

Barramento. Prof. Leonardo Barreto Campos 1 Barramento Prof. Leonardo Barreto Campos 1 Sumário Introdução; Componentes do Computador; Funções dos Computadores; Estrutura de Interconexão; Interconexão de Barramentos Elementos de projeto de barramento;

Leia mais

Implementação de um escalonador de processos em GPU

Implementação de um escalonador de processos em GPU Implementação de um escalonador de processos em GPU Guilherme Martins guilhermemartins@usp.br 6 de abril de 2017 Guilherme Martins (guilhermemartins@usp.br) Implementação de um escalonador de processos

Leia mais

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Universidade Estadual de Santa Cruz Cronograma Introdução Serial vs Processamento

Leia mais

Mecanismos de Interrupção e de Exceção, Barramento, Redes e Sistemas Distribuídos. Sistemas Operacionais, Sistemas

Mecanismos de Interrupção e de Exceção, Barramento, Redes e Sistemas Distribuídos. Sistemas Operacionais, Sistemas Arquitetura de Computadores, Arquitetura de Computadores Organização de Computadores, Conjunto de Instruções, Sistemas Operacionais, Sistemas Operacionais, Sistemas Mecanismos de Interrupção e de Exceção,

Leia mais

Redes de Computadores. Fundamentos de Sistemas Operacionais - 2º Período

Redes de Computadores. Fundamentos de Sistemas Operacionais - 2º Período Redes de Computadores Fundamentos de Sistemas Operacionais - 2º Período PARTE I: CONCEITOS BÁSICOS SUMÁRIO 1. VISÃO GERAL: 1.1 Introdução; 1.2 Funções Básicas; 1.3 Máquina de Camadas; 1.5 Tipos de Sistemas

Leia mais

SSC0611 Arquitetura de Computadores

SSC0611 Arquitetura de Computadores SSC0611 Arquitetura de Computadores 20ª Aula Arquiteturas Paralelas Arquitetura MIMD com Memória Compartilhada Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br Arquiteturas MIMD As arquiteturas MIMD dividem-se

Leia mais

Introdução a Sistemas Operacionais. Adão de Melo Neto

Introdução a Sistemas Operacionais. Adão de Melo Neto Introdução a Sistemas Operacionais Adão de Melo Neto 41 Definição de SO Sistema Operacional É um conjunto de rotinas (programa) executado pelo processador que controla o funcionamento do computador como

Leia mais

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1 COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1 Márcia Da Silva 2, Igor Gamste Haugg 3, Eliézer Silveira Prigol 4, Édson L. Padoin 5, Rogério S. M. Martins

Leia mais

Organização de Computadores

Organização de Computadores Organização de Computadores Aula 29 Controle Microprogramado Rodrigo Hausen 24 de novembro de 2011 http://cuco.pro.br/ach2034 1/32 Apresentação 1. Bases Teóricas 2. Organização de computadores... 2.6.

Leia mais

Arquiteturas paralelas Parte 1

Arquiteturas paralelas Parte 1 Arquiteturas paralelas Parte 1 Processamento Paralelo Prof. Oberlan Romão Departamento de Computação e Eletrônica DCEL Centro Universitário Norte do Espírito Santo CEUNES Universidade Federal do Espírito

Leia mais

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de 12 1 1.1. Motivações Dentre os tipos de técnicas de Inteligência Artificial existentes, as técnicas de Programação Genética (PG) continuam mudando rapidamente conforme os pesquisadores e profissionais

Leia mais

Programação Distribuída e Paralela. Jorge Barbosa

Programação Distribuída e Paralela. Jorge Barbosa Programação Distribuída e Paralela Jorge Barbosa 1 Máquinas Paralelas Processadores Memória Rede de interligação Classificação das máquinas paralelas 2 Processador Escalar Processadores Processador que

Leia mais

PARALELISMO NO NÍVEL DO PROCESSADOR

PARALELISMO NO NÍVEL DO PROCESSADOR UNIP Universidade Paulista. Campus Brasília. PARALELISMO NO NÍVEL DO PROCESSADOR ALUNO: Lucas da Silva Dias ALUNO: Gleidson Rosa da Silva ALUNO: Gustavo da Silva Martins ALUNO: Marcelo Nery Lima RA: C633EB-1

Leia mais

Memória. Memória Cache

Memó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 mais

Unidade 12: Introdução ao Paralelismo:

Unidade 12: Introdução ao Paralelismo: Arquitetura e Organização de Computadores 1 Unidade 12: Introdução ao Paralelismo: Processadores Superescalares Prof. Daniel Caetano Objetivo: Apresentar os conceitos fundamentais da arquitetura superescalar

Leia mais

3. Resolução de problemas por meio de busca

3. Resolução de problemas por meio de busca Inteligência Artificial - IBM1024 3. Resolução de problemas por meio de busca Prof. Renato Tinós Local: Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Resolução de problemas por

Leia mais

Laboratório de Programação Paralela. Introdução. Prof. Carlos Bazilio

Laboratório de Programação Paralela. Introdução. Prof. Carlos Bazilio Laboratório de Programação Paralela Introdução Prof. Carlos Bazilio Motivação Máquinas paralelas eram arquiteturas raras antigamente Este quadro se modificou por, pelo menos, 2 razões: Barateamento dos

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

Matéria: Sistema Computacional - SC. Prof.: Esp.: Patrícia Dias da Silva Peixoto

Matéria: Sistema Computacional - SC. Prof.: Esp.: Patrícia Dias da Silva Peixoto Matéria: Sistema Computacional - SC Prof.: Esp.: Patrícia Dias da Silva Peixoto SISTEMA OPERACIONAL E TIPOS DE SISTEMAS OPERACIONAIS O QUE É UM SISTEMA OPERACIONAL (S.O.). Por mais complexo que possa parecer,

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Classificação de Flynn Fonte: Professoras. Sarita UFRJ e Thais V. Batista - UFRN Arquiteturas Paralelas Computação Paralela Conceitos Permite a execução das tarefas em menor tempo,

Leia mais

Parte I Multiprocessamento

Parte I Multiprocessamento Sistemas Operacionais I Estrutura dos SO Prof. Gregorio Perez gregorio@uninove.br 2004 Parte I Multiprocessamento Roteiro 1 Multiprocessadores em Sistemas Fortemente Acoplados 1.1 1.2 1.3 Processamento

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1 UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1 Eldair F. Dornelles 2, Henrique A. Richter 3, Miquéias F. M. Trennepohl 4, Taís T. Siqueira

Leia mais

Programação Concorrente

Programação Concorrente INE 5410 Programação Concorrente Professor: Lau Cheuk Lung (turma A) INE UFSC lau.lung@inf.ufsc.br Conteúdo Programático 1. 2. Programação Concorrente 3. Sincronização 1. Condição de corrida, região critica

Leia mais

ORGANIZAÇÃO DE COMPUTADORES

ORGANIZAÇÃO DE COMPUTADORES Organização de Computadores ORGANIZAÇÃO DE COMPUTADORES Curso: Tecnologia em Gestão da Tecnologia da Informação Ano: 2011 Conhecida como Processador ou é o cerebro do computador Unifica todo sistema e

Leia mais

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação PROGRAMAÇÃO PARALELA

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES Prof. Dr. Daniel Caetano 2012-2 Lembretes Compreender o funcionamento da Arquitetura Superpipeline Compreender

Leia mais

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro Sistemas MIMD Arquiteturas para Alto Desmpenho Prof. pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac Arquiteturas Paralelas (SISD) Single Instruction Stream, Single Data Stream: Monoprocessador

Leia mais

5 Unidades de Processamento Gráfico GPUs

5 Unidades de Processamento Gráfico GPUs 5 Unidades de Processamento Gráfico GPUs As GPUs são processadores maciçamente paralelos, com múltiplos elementos de processamento, tipicamente utilizadas como aceleradores de computação. Elas fornecem

Leia mais

COMPUTADORES. Arquiteturas de Computadores Paralelos. Prof.: Agostinho S. Riofrio

COMPUTADORES. Arquiteturas de Computadores Paralelos. Prof.: Agostinho S. Riofrio PROJETO LÓGICO DE COMPUTADORES Arquiteturas de Computadores Paralelos l Prof.: Agostinho S. Riofrio Agenda 1. Introdução 2. Memória Virtual 3. Paginação 4. Segmentação 5. Instruçoes virtuais de E/S 6.

Leia mais

Problemas de otimização

Problemas de otimização Problemas de otimização Problemas de decisão: Existe uma solução satisfazendo certa propriedade? Resultado: sim ou não Problemas de otimização: Entre todas as soluções satisfazendo determinada propriedade,

Leia mais

Processamento Paralelo

Processamento Paralelo Processamento Paralelo por Helcio Wagner da Silva Introdução Tradicionalmente, o computador tem sido visto como uma máquina seqüencial Esta visão nunca foi completamente verdadeira No nível das µo, vários

Leia mais

Arquitetura de Computadores. Prof. João Bosco Jr.

Arquitetura de Computadores. Prof. João Bosco Jr. Arquitetura de Computadores Prof. João Bosco Jr. (CPU) Modelo do Computador Von Neumann Processador Memórias E/S Barramentos Simulação Contador http://courses.cs.vt.edu/csonline/machinearchitecture/lessons/cpu/countprogram.html

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (2.0) (a) (Verdade/Falso) A comunicação entre processos consiste em transmitir uma mensagem entre

Leia mais

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização Hardware: Componentes Básicos Arquitetura dos Computadores Dispositivos de Entrada Processamento Dispositivos de Saída Armazenamento Marco Antonio Montebello Júnior marco.antonio@aes.edu.br Sistema de

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes A classe P consiste nos problemas que podem ser resolvidos em tempo Polinomial (Problemas tratáveis) A classe NP consiste nos problemas que podem ser verificados em tempo polinomial (Problemas

Leia mais

ARQUITETURA DE COMPUTADORES. Organização de Sistemas Computacionais. Prof.: Agostinho S. Riofrio

ARQUITETURA DE COMPUTADORES. Organização de Sistemas Computacionais. Prof.: Agostinho S. Riofrio ARQUITETURA DE COMPUTADORES Organização de Sistemas Computacionais Prof.: Agostinho S. Riofrio Agenda 1. Unidade Central de Processamento 2. Organização da CPU 3. Interpretador 4. RISC x CISC 5. Principios

Leia mais

4 Testes e experimentos realizados 4.1. Implementação e banco de dados

4 Testes e experimentos realizados 4.1. Implementação e banco de dados 32 4 Testes e experimentos realizados 4.1. Implementação e banco de dados Devido à própria natureza dos sites de redes sociais, é normal que a maior parte deles possua uma grande quantidade de usuários

Leia mais

3 Computação de Propósito Geral em Unidades de Processamento Gráfico

3 Computação de Propósito Geral em Unidades de Processamento Gráfico 3 Computação de Propósito Geral em Unidades de Processamento Gráfico As Unidades de Processamento Gráfico (GPUs) foram originalmente desenvolvidas para o processamento de gráficos e eram difíceis de programar.

Leia mais

Preliminares. Profa. Sheila Morais de Almeida. agosto

Preliminares. Profa. Sheila Morais de Almeida. agosto Preliminares Profa. Sheila Morais de Almeida DAINF-UTFPR-PG agosto - 2016 Algoritmos Definição - Skiena Algoritmo é a ideia por trás dos programas de computador. É aquilo que permanece igual se o programa

Leia mais

INTRODUÇÃO À ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Função e Estrutura. Introdução Organização e Arquitetura. Organização e Arquitetura

INTRODUÇÃO À ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Função e Estrutura. Introdução Organização e Arquitetura. Organização e Arquitetura Introdução Organização e Arquitetura INTRODUÇÃO À ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES Eduardo Max Amaro Amaral Arquitetura são os atributos visíveis ao programador. Conjunto de instruções, número

Leia mais

Redução de Cook-Levin e Considerações Finais

Redução de Cook-Levin e Considerações Finais Redução de Cook-Levin e Considerações Finais André Vignatti DINF- UFPR Fechando o Ciclo de Reduções Nós reduzimos o SAT para diversos problemas de busca, como mostra a figura: Todos problemas NP CIRCUIT

Leia mais

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1 PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1 Jessica De Almeida Berlezi 2, Janiel Ceretta Foletto 3, Edson Luiz Padoin 4, Rogério S. M. Martins 5. 1 Trabalho realizado

Leia mais

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome Para paralelizar códigos de programas, tudo que necessitamos é de uma construção sintática denominada kernel. Seja o kernel: kernel void

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 01 Apresentação da Disciplina Prof.ª Danielle Casillo PLANO DE ENSINO Nome: Teoria da Computação Créditos:

Leia mais

Informática I. Aula 2. Ementa

Informática I. Aula 2.  Ementa Informática I Aula 2 http://www.ic.uff.br/~bianca/informatica1/ Aula 2-29/08/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript e

Leia mais

Computadores e Programação (DCC/UFRJ)

Computadores 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 mais

Estrutura de um computador digital. Gustavo Queiroz Fernandes

Estrutura de um computador digital. Gustavo Queiroz Fernandes Gustavo Queiroz Fernandes Atualizado em: 18/02/2019 Sumário Objetivos... 1 Pré-requisitos... 1 Recursos e Materiais... 1 Última Atualização... 1 1. Memória primária... 1 2. Memória secundária... 2 3. Unidade

Leia mais

SSC546 -Avaliação de Desempenho de Sistemas

SSC546 -Avaliação de Desempenho de Sistemas Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC546 -Avaliação de Desempenho de Sistemas Parte 1 -Aula 2 Sarita Mazzini Bruschi Material

Leia mais

30/5/2011. Sistemas computacionais para processamento paralelo e distribuído

30/5/2011. Sistemas computacionais para processamento paralelo e distribuído Arquitetura de Computadores Sistemas computacionais para processamento paralelo e distribuído Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO Processamento

Leia mais

Aula 10: Tratabilidade

Aula 10: Tratabilidade Teoria da Computação DAINF-UTFPR Aula 10: Tratabilidade Prof. Ricardo Dutra da Silva Na aula anterior discutimos problemas que podem e que não podem ser computados. Nesta aula vamos considerar apenas problemas

Leia mais

Redes de Computadores

Redes de Computadores Redes de Computadores Prof. Marcelo Gonçalves Rubinstein Programa de Pós-Graduação em Engenharia Eletrônica Faculdade de Engenharia Universidade do Estado do Rio de Janeiro Ementa Introdução a Redes de

Leia mais

Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante

Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante Gabriel Freytag Guilherme Arruda Rogério S. M. Martins Edson L. Padoin Universidade Regional do Noroeste do Estado do Rio Grande

Leia mais

OpenMP: Variáveis de Ambiente

OpenMP: Variáveis de Ambiente Treinamento OpenMP C/C++ 1 TREINAMENTO OpenMP C/C++ Módulo 1 Computação de Alto Desempenho Módulo 2 OpenMP: Construtores Paralelos Módulo 3 OpenMP: Diretivas de sincronização Módulo 4 OpenMP: Funções de

Leia mais

Tecnó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) Tecnólogo em Análise e Desenvolvimento de Sistemas Sistemas Operacionais (SOP A2) Visão Geral Referências: Sistemas Operacionais Modernos. Andrew S. Tanenbaum. Editora Pearson. 3ª ed. 2010. Seção: 1.1

Leia mais

Disciplina de Arquitetura de Computadores

Disciplina de Arquitetura de Computadores USP - ICMC - SSC SSC 0510 - Informática - 2o. Semestre 2009 Disciplina de Prof. Fernando Santos Osório Email: fosorio [at] { icmc. usp. br, gmail. com } Página Pessoal: http://www.icmc.usp.br/~fosorio/

Leia mais

Teoria da Computação. Clique de um Grafo. Alexandre Renato Rodrigues de Souza 1

Teoria da Computação. Clique de um Grafo. Alexandre Renato Rodrigues de Souza 1 Teoria da Computação Clique de um Grafo Alexandre Renato Rodrigues de Souza 1 O que é um grafo? Definição 1: grafo é uma estruturas utilizada para representar relações entre elementos de um dado conjunto.

Leia mais

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 04: PROCESSAMENTO PARALELO: MULTICOMPUTADOR

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 04: PROCESSAMENTO PARALELO: MULTICOMPUTADOR ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 04: PROCESSAMENTO PARALELO: MULTICOMPUTADOR Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação MULTICOMPUTADORES

Leia mais

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO

LABORATÓRIO DE SISTEMAS OPERACIONAIS. PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO LABORATÓRIO DE SISTEMAS OPERACIONAIS PROFª. M.Sc. JULIANA HOFFMANN QUINONEZ BENACCHIO Sistema Operacional Conteúdo retirado do livro Arquitetura de Sistemas Operacionais Francis Berenger Machado Luiz Paulo

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes O limite superior de complexidade de um problema refere-se ao melhor algoritmo que o resolve. nlog 2 n é um limite superior para o problema de classificação. O limite inferior de um problema

Leia mais

Introdução. Pedro Cruz. EEL770 Sistemas Operacionais

Introdução. Pedro Cruz. EEL770 Sistemas Operacionais Introdução Pedro Cruz EEL770 Sistemas Operacionais Roteiro Informações úteis Motivação Definições Revisão de arquitetura 2 Contato Site da disciplina www.gta.ufrj.br/~cruz/courses/eel770 Email cruz@gta.ufrj.br

Leia mais