Uma Otimização em GPU para RWA com Algoritmo Genético e Roteamento Estático em Redes Ópticas WDM
Algoritmo Genético, Problema RWA, CUDA, Paralelização, Redes WDM
A demanda por largura de banda vem aumentando exponencialmente nos últimos anos, com residências, empresas, indústrias, dispositivos móveis, dispositivos de internet das coisas, dispositivos vestíveis entre outros, cada vez mais conectados à internet através de aplicações que também seguem evoluindo e exigindo maior velocidade para troca de dados, muitas vezes, com modelos de sistemas de tempo real, exigindo cada vez mais, não só velocidade, mas também qualidade nos meios físicos de acesso à rede. Neste contexto, temos as redes ópticas como melhor meio de acesso. Entretanto, o meio óptico suporta uma largura de banda que possibilita a utilização de diversas aplicações ao mesmo tempo, através da multiplexação do sinal, ou seja, dividindo a banda para várias aplicações e, ainda, evitando a subutilização do recurso físico. Porém, o roteamento desses sinais divididos requer conversão opto-elétrica, reduzindo a capacidade total no tempo de resposta, visto que o sinal sai do campo luminoso para o elétrico, sendo demodulado, processado por algoritmo de roteamento e novamente modulado para sinal luminoso, cada vez que encontra um roteador transitório no qual precisa decidir qual rota tomar até o destino. Este é o problema de redes conhecido como Problema RWA em redes WDM e para resolvê-lo, diversas propostas envolvem algoritmos de inteligência computacional que, em geral, são algoritmos que processam modelos preditivos e requerem algum tempo de computação até entregarem uma solução aceitável. No entanto, esta computação demora mais que a própria conversão opto-elétrica, inviabilizando sua aplicação em um cenário real de roteamento. Este trabalho apresenta uma estratégia paralela com uma abordagem heurística para reduzir o gargalo no tempo de processamento do problema de roteamento e atribuição de comprimento de onda em redes multiplexadas por divisão no comprimento de onda baseado em trabalho prévio que utiliza um algoritmo genético sequencial. Como solução de paralelização, o processamento em hardware GPU com arquitetura CUDA e linguagem de programação CUDA C foram adotados. Um código de programa, escrito originalmente, em linguagem de programação Python e executado de maneira sequencial foi portado, primeiramente, para a linguagem de programação C-99, também executando no modelo sequencial. E então, esta última versão foi portada para a linguagem de programação CUDA C, e nesta, já executando um modelo de programa paralelo em arquitetura de computação em GPU. Uma estratégia de paralelização do algoritmo da simulação é apresentada, baseado na definição da grid e aproveitando os índices dos CUDA Blocos e CUDA threads na configuração de execução paralela do algoritmo de simulação. Como resultados alcançados, o tempo de processamento reduziu consideravelmente, obtendo uma melhora na ordem de escala entre 35 e 40 vezes mais rápidos que a versão sequencial original do algoritmo genético, executada em Python.