• Nenhum resultado encontrado

Cidades Inteligentes, Big Data e Paralelismo

2.2. BIG DATA 17

analíticos, (3) Não há espaço para tudo, (4) Provoque a análise dos dados, (5) O proces-samento deve ser distribuído para a computação na memória, (6) O armazenamento dos dados pode ser distribuído para o armazenamento na memória e (7) É necessária uma coordenação entre as unidades de processamento e de dados.

2.2.4 Fases dos sistemas que utilizam Big Data

O processamento de dados com o uso de Big Data envolve várias etapas que vão desde a captura dos dados até a sua interpretação. Essas etapas são importantes, pois, quando bem desenvolvidas, é através delas que se chegará a resultados com uma melhor qualidade após todo o processamento.

O Big Data White Paper (Whitepaper n.d.) prevê cinco etapas distintas para o proces-samento: Aquisição e registro de dados, Extração da informação e limpeza, Representa-ção, agregação e integração de dados, processamento de consultas, modelagem de dados e análise e interpretação. Uma adaptação do modelo apresentado pelo (Whitepaper n.d.) é apresentado na Figura 2.4.

Figura 2.4: Fases dos sistemas que utilizam Big Data. Adaptado de (Whitepaper n.d.)

Na etapa de Aquisição e registro de dados é definido de quais as fontes (sensores, sites, etc.) e quais os dados devem capturados e armazenados. Uma definição errada fará com que dados que não possuem necessidade ou que são irrelevantes para o estudo sejam armazenado aumentando, ainda mais, o tamanho dos dados em um Big Data.

Na extração da informação e limpeza os dados brutos são trabalhados e transforma-dos em datransforma-dos que possam ser processatransforma-dos por computadores. Texto, gráficos, imagens,

18 CAPÍTULO 2. CIDADES INTELIGENTES, BIG DATA E PARALELISMO

vídeos, etc são passados por um processo para transformá-los em informação, os dados irrelevantes são descartados nessa etapa.

Integração, agregação e representação de dados formam uma etapa bastante complexa, visto que para que o computador possa desenvolver de maneira automática necessita de semânticas adequadas a cada um dos casos de estudo.

Processamento de consultas, modelagem de dados e análise envolvem a mineração de dados, mesmo que de maneira bem diferente de se minerar pequenos conjuntos de dados. Segundo o (Whitepaper n.d.) minerar requer que os dados já estejam integrados, limpos, confiáveis e acessíveis, interfaces de consulta e mineração, algoritmos escaláveis e o ambiente de computação Big Data.

Por fim, a interpretação, de nada adianta desenvolver todo o trabalho para se ter um Big Datase ao final não se consegue entender as informações geradas, a participação de um especialista no assunto tratado pelo Big Data é de extrema importância nesse mo-mento, a ideia é que não apenas os resultados sejam analisados, mas todo o processo que levou ao desenrolar para se obter aquele resultado. Um sistema pode auxiliar bas-tante nesse processo, disponibilizando várias ferramentas para o tratamento dos dados e da informação no intuito de facilitar o entendimento dos especialistas.

É na etapa da interpretação que existe a necessidade da Redução da Dimensionalidade dos dados, tornando mais fácil a visualização e por fim o processo de tomada de decisão dos especialistas.

(Zhang 2013) apresenta um interessante diagrama de causa e efeito que resume de uma maneira geral os conceitos, tecnologias, desafios, etc que estão envolvidos com o uso de Big Data na solução de problemas. A adaptação desse diagrama é apresentada na Figura 2.5.

Esse diagrama serve para organizar e instigar a análise de possíveis problemas que podem ocorrer no desenvolvimento/uso de sistemas Big Data.

2.3 Paralelismo

Alguns problemas relacionados à computação sequencial, tais como o baixo desem-penho em problemas complexos, tornam a computação paralela uma das principais fer-ramentas para buscar melhores desempenhos computacionais em aplicações. Segundo (Pacheco 2011), a programação paralela ou concorrente, a programação sequencial com menor complexidade para o problema e a busca por estruturas de programação e dados mais eficientes são exemplos de técnicas de software que visam melhorias de desempenho nos sistemas.

Mesmo sabendo que um melhor desempenho computacional depende diretamente do hardwareutilizado, o desenvolvimento de sistemas paralelos é de fundamental importân-cia para o melhor desempenho dos sistemas, visto que soluções para problemas computa-cionalmente difíceis podem ser personalizadas, mehorando os seus desempenhos.

Assim, pode-se citar como principais objetivos da computação paralela:

• Permitir o desenvolvimento de soluções que possam ser executadas em paralelo, usando os diversos recursos de hardware, como processadores e memória;

2.3. PARALELISMO 19

Figura 2.5: Diagrama de Causa e efeito em Big Data. Adaptado de (Zhang 2013)

• Obter ganhos de desempenho;

• Reduzir o gap existente entre memória e CPU.

A evolução do hardware, também foi de vital importância para a evolução do de-senvolvimento de sistemas paralelos, visto que em princípio as soluções paralelas apenas podiam ser desenvolvidas em clusters de computadores simples que se comunicavam atra-vés de alguma rede de conexão e atualmente existem computadores e dispositivos móveis multiprocessados ou com um processador de múltiplos cores.

2.3.1 Arquiteturas paralelas

(Flynn 1966) definiu a classificação para as arquiteturas paralelas mais usada ao longo dos anos, conhecida por taxonomia de Flynn.

A taxonomia de Flynn baseia-se no fluxo de instruções e dados dos processadores, apresentando quatro classes de processamento.

SISD - Single Struction Single Data

Nesta classe existe apenas um fluxo de instruções para um processador único, de ma-neira semelhante, possui apenas um fluxo de dados. Ela engloba processadores não pa-ralelos, chamados de convencionais, e tanto as instruções como os dados são tratados sequencialmente.

20 CAPÍTULO 2. CIDADES INTELIGENTES, BIG DATA E PARALELISMO

Para aumentar o desempenho, muitos dos processadores SISD utilizam estruturas de pipeline.

SIMD - Single Struction Multiple Data

A arquitetura SIMD apresenta um único fluxo de instruções, porém um fluxo de dados múltiplo. A mesma instrução é executada por todas as unidades de processamento, porém com conjunto de dados diferentes.

Segundo (Pinto 2011), este tipo de arquitetura é indicada para problemas especializa-dos, caracterizados por um alto grau de regularidade, como processamento de imagem e gráficos. Normalmente, os processadores vetoriais são incluidos nesta classificação.

MISD - Multiple Struction Single Data

Ao contrário da arquitetura SIMD, esta arquitetura apresenta um fluxo múltiplo de instruções, porém um único fluxo de dados. Desta forma, os vários processadores execu-tam diferentes operações simultâneas no mesmo fluxo de dados. Esta arquitetura é a que mais carece de exemplos de computadores que a utilizam.

MIMD - Multiple Struction Multiple Data

Esta arquitetura tanto possui múltiplos fluxos tanto para as instruções, como para os dados, permitindo que os computadores realizem diferentes instruções em diferentes con-juntos de dados.

Esta é a classificação que engloba a grande maioria dos computadores modernos, tais como computadores pessoais de vários núcleos, clusters, etc.

2.3.2 Modelos de Programação Paralela

A computação define os estilos de programação em basicamente três modelos: Pro-gramação Sequencial, ProPro-gramação Concorrente e ProPro-gramação Paralela.

Na programação sequencial as tarefas são executadas uma após a outra, sem apresen-tar nenhuma caraxterística paralela na execução de seus programas. É o tipo de progra-mação mais clássico e usado no desenvolvimento de programas que não exigem um alto nível de desempenho.

Na programação concorrente, várias tarefas são iniciadas, sem necessariamente as tarefas anteriores terem sido encerradas, na programação concorrente pode-se utilizar sis-temas multi ou uni processados.

Utilizar a programação concorrente, não significa dizer que os programas ou tarefas estão sendo executadas ao mesmo tempo.

A programação paralela se caracteriza tanto pela iniciação quanto pela a execução da tarefa em tempos simultâneos, fazendo com que, realmente, as tarefas sejam executadas em paralelo. A ideia geral por trás da programação paralela, pode ser vista na Figura 2.6.

2.3. PARALELISMO 21

Figura 2.6: Modelo de Programação Paralela

A ideia geral, apresentada na Figura 2.6, consiste em executar trechos do algoritmo sequencial ao mesmo tempo em diversos processadores, diminuindo assim o tempo com-putacional deste algoritmo.

O desenvolvimento e a execução de programas paralelos necessitam da definição do conjunto de tarefas que serão executadas em paralelo, a ativação e o encerramento da execução dessas tarefas e a coordenação da interação entre elas.

Definir bem as tarefas a serem executadas em paralelo é muito importante, pois todo o ganho de desempenho adquirido com a paralelização, depende da melhor configuração das tarefas a serem executadas concorrentemente. (Blume 2002)

Para o desenvolvimento da programação paralela, pode-se seguir alguns modelos: Th-reads, Passagem de mensagem e paralelismo de dados.

No desenvolvimento com o uso de threads, um único processo pode se dividir em duas ou mais tarefas e executar essas tarefas de maneira paralela. É um modelo normalmente associado à ambientes que fazem uso de memória compartilhada. Uma das implementa-çõs mais utilizadas para a programação com o uso de threads é a OpenMP.

No modelo que utiliza a passagem de mensagem os processos são executados nas várias máquinas que participam do processamento, elas trocam informações através de mensagens que estão inseridas no código da aplicação. Nesse modelo, as instruções de-vem estar organizadas de maneira que definam quais partes do código serão executadas em cada processador.

Por fim, o modelo que utiliza do paralelismo de dados, aqui todos os processadores executam o mesmo conjunto de tarefas em diferentes subconjuntos de dados. O envio e recebimento dos dados é feito de maneira automática pelo compilador, de maneira trans-parente. É possivel, na utilização desse modelo, escolher quais dados que serão ou não utilizados no processamento paralelo.

Além dos três modelos de programação paralela apresentado, pode-se optar pela uti-lização de um modelo híbrido, com a utiuti-lização de mais de um dos modelos apresentados na mesma programação.

22 CAPÍTULO 2. CIDADES INTELIGENTES, BIG DATA E PARALELISMO

2.3.3 Métricas para a computação paralela

Quando se pensa em paralelizar uma solução computacional, de maneira equivocada pose imaginar que dividir a computação em n processadores se terá um ganho de de-sempenho de n vezes, muitos são os desafios para se conseguir esse resultado e dependem de vários fatores, tais como máquinas, arquiteturas, linguagens de programação e a con-corrência do próprio algoritmo. Por isso, mensurar os ganhos da computação paralela em relação a programação sequencial convencional é importante para poder avaliar o uso dessa técnica de programação.

Existem trechos de códigos que são não paralelizáveis, principalmente quando existe uma dependência entre os dados, juntamente com outras características dos programas, tais como o tempo para coordenar e inicializar as tarefas em paralelo, sincronizações, comunicação de dados, etc. pode ocasionar um overhead no sistema, impossibilitando atingir o paralelismo ideal.

Na computação paralela, existem três métricas para avaliar o desempenho de um al-goritmo: (1) critério de tempo, (2) speedup e (3) eficiência.

O critério de tempo é o mais simples de ser aferido e comparado, pode ser realizado através de algum método ou técnica formal, por simulação ou por experimentos. Consiste em comparar o tempo de execução do algoritmo paralelo com o seu equivalente sequen-cial.

Para avaliar o critério de tempo podem ser analisados o pior caso, o melhor caso e o caso médio das execuções dos algoritmos. Em todos os três casos, o esperado é que o tempo de execução do algotritmo paralelo seja menor que o de seu correspondente convencional.

O speedup é uma das principais métricas utilizadas para verificar o desempenho dos algoritmos, ele determina o quanto um algoritmo paralelo é mais rápido que o algoritmo sequencial correspondente, e é obtido pela equação 2.1:

Sp = TSeq

TPar (2.1)

O resultado para o cálculo do speedup indica o quanto mais rápido o algoritmo pa-ralelizado é mais rápido que o algoritmo sequencial, por exemplo, se o resultado para o cálculo do speedup de um algoritmo for 1,23, isso significa que o algoritmo paralelo é 1,23 mais rápido do que a sua versão não paralelizada. Se o speedup for igual ao número de processadores, tem-se o que se chama de speedup linear ou ideal.

Se o speedup de um programa alcançar um valor maior que P, onde P é o número de processadores, diz-se que ele possui um speedup superlinear.

(Amdahl 1967) definiu um modelo para o cálculo do speedup esperado de uma imple-mentação de um algoritmo paralelo sobre o mesmo algoritmo sequencial, supondo que o problema continua o mesmo quando paralelizado. Tecnicamente falando, a lei trata do aumento do speedup com um melhoramento do cálculo que afeta a proporção P de um cálculo , onde se tem um melhoramento do speedup de S. A lei de Amdahl realiza o cál-culo do speedup baseado apenas nos trechos do programa que podem ser paralelizados, e

2.4. CONSIDERAÇÕES 23

seque a fórmula 2.2:

S(N) = 1

(1 − P) +PN (2.2)

Onde P é a proporção do programa que pode ser paralelizada, (1-P) a porção que não pode ser paralelizada e N o número de processadores usado para a paralelização.

Uma outra métrica aplicada à computação paralela pode ser a de eficiência, calculada pela fórmula 2.3:

E = Sp

p (2.3)

, em que p é o número de processadores.

A métrica de eficiência indica quantas vezes a execução do algoritmo paralelo é reali-zada mais rápida do que o algoritmo sequencial.

2.4 Considerações

O aumento de uso de sistemas que envolvem os conceitos de Cidades Inteligentes e Big Datageram uma grande quantidade de dados, tornando difícil analisar, interpretar e visualizar esses dados de maneira que auxilie aos gestores públicos na tomada de decisão e beneficie à população com uma melhor qualidade de vida.

Uma das maneiras de melhorar o processo de tomadas de decisões, que minimizam os problemas citados é reduzir a dimensão dos dados gerados para uma dimensão que seja possível de ser visualizada pela visão humana, duas ou três dimensões.

Existem várias técnicas e algoritmos que permitem realizar a redução de dimensiona-lidade de dados, no capítulo 3 vários desses algoritmos são apresentados e discutidos.

Capítulo 3

Documentos relacionados