Sobre Redes de Sensores sem Fios (parte 1)

18 de fevereiro de 2014

Olá meus três leitores… estou de volta!

Bom… na última vez que apareci prometi que em fevereiro estaria de volta e teria muita informação sobre minha tese para compartilhar com vocês. Pois é, tenho que parar de ficar fazendo promessas que não posso cumprir!

Infelizmente o cronograma de entrega de minha dissertação de mestrado estourou e ainda vou ficar mais um mês trabalhando neste infindável projeto. Acho que é um dos projetos mais longos que já trabalhei. Quer dizer, tirando o Sistema de Pesquisa de Opinião da Sabesp que levou cerca de 3 anos para ficar pronto!

Mesmo com muito trabalho vou começar agora a registrar um pouco de informação no blog pois aqui é meu repositório de informações também.

Rede de Sensores sem Fios

O tema do meu trabalho é roteamento em Rede de Sensores sem Fios. Conhece? Não? Quando eu comecei o mestrado eu nem sabia o que era isto. Eu simplesmente nunca tinha ouvido falar!

Vou começar falando dos sensores. Microprocessadores cada vez mais eficientes tem permitido construir pequenos dispositivos programáveis com múltiplas utilidades e baixo consumo. Os Arduinos são exemplos de dispositivos deste tipo que tem se tornado populares entre os entusiastas de microeletrônica. São dispositivos microprocessados com memória, interfaces de entrada e saída prontos para serem usados em projetos.

Além destes dispositivos microprocessados, também a área de transmissão de dados sem fios tem tido grande desenvolvimento, permitindo transferência de dados com baixo consumo energético.

Não foi nenhuma surpresa quando alguém resolveu juntar as duas coisas: construir dispositivos microprocessados com rádios de comunicação e sensores. Estes dispositivos foram chamados de nós sensores. Uma rede de nós sensores seria um conjunto destes nós sensores dispostos em uma área de interesse medindo uma ou mais grandezas físicas.

Estes valores medidos podem ser coletados e transmitidos pelos rádios até uma estação base (em inglês sink) ou podem ser processados localmente pelo nó sensor para detecção de eventos de interesse e em caso de um evento detectado a estação base é informada.

Os nós sensores funcionam à bateria e via rádio, justamente pelo alto custo de passagem de cabos entre os nós, e porque eventualmente a área de interesse é de difícil acesso, impossibilitando a passagem da fiação.

Bem, a área de estudo é Rede de Computadores, logo os desafios que procurei entender e atacar no trabalho são os relacionados com a transferência dos dados entre os nós sensores e a estação base.

A baixa potência do rádio impossibilita a transmissão direta de cada nó sensor para a estação base. Então para que a informação seja entregue, os nós mais distantes enviam seus dados para um nó mais próximo e este envia o dado para a estação base. Este mecanismo é chamado transmissão multi-saltos (multi-hops). O desafio das transmissões multi-saltos é escolher quais nós irão retransmitir os dados. Esta escolha é chamada roteamento (definição de rota).

Em meu trabalho foquei em construir uma técnica de escolha de rota que fosse eficiente e entregasse a maior quantidade de pacotes possível. Digo isso, porque em rede de sensores é comum a falha na transmissão de dados, devido a interferências e colisões.

E eficiência do protocolo é importante para evitar o consumo excessivo de bateria, uma vez que é difícil, ou mesmo inviável a troca das mesmas. A eficiência está também relacionada no atraso na transferência dos dados entre o sensor e a estação base. Quando um evento ocorre, em algumas situações é necessário a informação chegar o mais rápido possível à estação base, para que o operador tome providências imediatas.

Continuarei este artigo em uma semana. (Viu como não consigo não fazer promessa que provavelmente não cumprirei!)

Estamos vivos

20 de novembro de 2013

Olá meus três leitores, voltei só pra dizer que estou muito vivo. O mestrado é muito, muito mais intenso do que eu imaginava, e portanto, não consegui vir aqui nem para registrar meu progresso na minha tese. Só para dizer que não estou de bobeira, aí vai os primeiros resultados positivos de meu trabalho:

D300R805.Taxa
D300R805.Atraso D300R805.Consumo D300R805.Saltos

Se tudo der certo em fevereiro irei publicar muito material sobre minha tese e explico o que se trata.

Fechamento do Segundo Semestre no Mestrado

22 de fevereiro de 2013

Olá meus dois leitores, conforme prometi estou aqui novamente para atualizá-los sobre o andamento do meu curso de mestrado. Terminei o segundo semestre do curso e com ele completei meus créditos com matérias. Somando a prova de fluência em inglês (escrito) que também já aprovei, falta agora a cereja do bolo: a defesa da tese.

As disciplinas que fiz no segundo semestre foram: Teste de Software e Processamento de Alto Desempenho. Vou dar um resumo aqui do que aprendi.

Teste de Software

Em Teste de Software aprofundamos o estudo em técnicas de seleção de casos de testes para abranger a maior parte dos erros possíveis.

O principal paradigma que foi quebrado em minha cabeça, é que testar o software não é provar que ele está livre de erros, o que parece intuitivo, mas testar o software é uma ferramenta para ativamente localizar a maior quantidade possível de erros em um programa. Parte do princípio válido, que todos os programas possuem erros, sempre. Localizar a maioria dos erros antes de colocar um programa em produção é obviamente evitar queimar o próprio filme, portanto altamente desejável. Agora considerar que um programa é livre de erros, mesmo após uma bateria de testes bem realizados, é falácia.

Os Testes que aprendemos se dividem em Testes Funcionais, Testes Estruturais, Testes de Mutação e Testes baseados em Modelos. Cada um deles utiliza uma abordagem diferente para encontrar um conjunto de casos de testes adequado para encontrar os erros. Utilizá-los de forma complementar é uma boa pedida.

Os trabalhos propostos pelo professor Otávio foram na medida para aplicarmos as técnicas estudadas, sem nos sobrecarregar.

Processamento de Alto Desempenho

Aqui o problema é executar códigos repetitivos em unidades de processamento paralelo de forma eficiente. Vários tipos de paralelismo foram aplicados e várias técnicas úteis para minimizar a lei de Amdahl. Esta lei indica que o limite do crescimento da performance ao acrescentarmos mais unidades de processamento em paralelo é limitada pela porção do código a ser executado que não permite paralelismo, o código chamado serial. Como exemplo, se a leitura dos dados de entradas de uma unidade de disco é realizado de forma serial, mesmo que o resto do processamento seja reduzido drasticamente, o tempo que leva esta leitura não seria reduzido. Neste exemplo mesmo se infinitos processadores fossem utilizados o tempo de execução seria igual ao tempo de leitura, portanto o tempo de processamento serial é o limitante da escalabilidade.

Os dispositivos paralelos estudados na disciplina foram: as unidades vetoriais (sse, avx) dos processadores modernos, os processadores multicore (memória compartilhada OpenMp, Pthread, JThread), os sistemas multiprocessados (memória distribuída MPI) e os novíssimos sistemas em Gpu (Cuda).

As atividades da disciplina foram pesadas mas interessantíssimas. Executar algorítimos com paralelismo agora é algo de meu domínio. As experiências da disciplina mostraram que o esforço necessário para isso valem a pena.

Sobre as minhas notas

As minhas notas continuaram no máximo, tirei A em tudo. E estou falando isso não pra me gabar (tá um pouco é pra isso também). Mas o principal motivo pra eu falar isso é também pra indicar algumas coisas do modo de estudo que deram resultado para mim.

Desde de minha experiência de doze anos como professor é a primeira vez que volto a sala de aula com professor e tarefa de casa para fazer. E me ajudou muito ter sido professor estes anos todos. Nunca ficou tão claro pra mim o quanto é importante entender aquilo que o professor espera de você em sala de aula. Este é o ponto central para eu conseguir a nota máxima em todas as disciplinas.

Meu método de estudo não é de outro mundo. Tem só algumas regras simples:

  • Nunca faltar. Tive 100% de presença, precisando inclusive ir a aula com febre.
  • Estar presente. 100% de atenção a tudo que ocorre em sala o tempo todo. Adianta ir fisicamente a aula e cabular no facebook ou sms?
  • Fazer todas as atividades. Assim que uma tarefa era passada, no mesmo dia dava uma olhada e se possível já fazia. Assim se não conseguisse de primeira sempre tinha tempo para discutir com o professor ou com os colegas.
  • Perguntar. Sempre que surgia uma dúvida, não hesitei em levantar a mão. Fiz perguntas bestas, mas aprendi na hora certa.

Isso é o que eu esperava de um aluno meu. Nos doze anos que fui professor, encontrei no máximo três alunos assim. Se eu sonhava com aluno assim, os meus professores não deveriam ser diferentes.

Minha experiência e facilidade de aprendizado na área ajudou muito, é lógico, mas a maior parte do conteúdo era novidade para mim.

Bom agora vem a parte mais interessante do mestrado, que é a tese. Eu estou com o estudo bibliográfico bem adiantado, com tema e mesmo com um problema a ser atacado bem definido. Volto mais vezes agora conforme o andamento do projeto de pesquisa. Até mais.

 

Segundo Semestre no Mestrado de Computação

4 de outubro de 2012

Olá sobreviventes,

Os meses passam e os cães ladram, e este blog está congelando. Como eu suspeitava com o mestrado que comecei em março foi absolutamente impossível sequer entrar no blog. Mas como prometido estou aqui de volta para atualizar meus dois leitores.

Terminei duas das três matérias do primeiro semestre do mestrado com notas máximas. Na terceira, o professor utilizou-se de seu legítimo direito de greve e estamos continuando agora. Então, Arquitetura de Computadores e Análise de Algoritmos e Estrutura de Dados estão concluídos.

Em Análise de Algoritmos tivemos uma porção de problemas difíceis para resolver e aplicar técnicas para diminuir a complexidade dos algoritmos. Foi bem interessante. Legal mudar um algoritmo que levaria mais de um século para rodar, tornando-o executável em milissegundos!

Minha disciplina preferida foi Arquitetura, onde, como trabalho final, projetamos um microprocessador de 16 bits com pipeline de dois estágios. Projetamos com o software Quartus e seria possível fazê-lo funcionar com um FPGA.

Na minha tese o trabalho está rendendo. Já consegui delimitar o escopo e estou lendo mais artigos do que Livros do George Martin. Se der, semana que vem eu publico aqui o esboço da proposta do trabalho.

Este segundo semestre estou com duas novas disciplinas:

Processamento de Alto Desempenho

Um estudo sobre técnicas para utilização de supercomputadores, multiprocessadores e multicores. A princípio pensei que seria sobre construir estes computadores, como um adendo a aula de Arquitetura, no entanto o foco é software: como escrever software que se aproveita melhor do paralelismo e dos hardwares especiais dos grandes computadores.

Teste de Software

Adianta escrever mil linhas de software por hora, se metade está com defeito? Testar software é essencial, mas nem preciso falar isso, não é? Esta é uma das matérias que mais desejava no Mestrado. Já fiz experiências com junit para realizar testes unitários em Java, porém nunca tinha segurança sobre o que testar exatamente. Esta matéria procura nos dar um embasamento sobre técnicas para escolha dos casos de teste mais eficientes para encontrar defeitos no software. Aliás, você sabe o que é testar software? Deixe suas sugestões nos comentários que depois te conto…