Publicado por: luizcortinhas | janeiro 25, 2016

CUDA para Geotecnologias

CUDA_GEO

Hoje nossa postagem vai tratar de um assunto que ainda está iniciando no universo geoespacial, mas que em breve será corriqueiro, pois algumas das principais empresas de software como a Harris Geospatial Solutions, desenvolvedora do ENVI, a Digital Globe  já estão testando essa tecnologia em suas aplicações.

Compute Unified Device Architecture (CUDA), é uma plataforma de computação paralela e um modelo de programação “inventados” pela NVIDIA. Ela permite aumentos significativos de performance computacional ao aproveitar a potência da unidade de processamento gráfico (GPU) em placas de vídeo específicas. Por exemplo, Quando você faz uma ortorretificação usando a CPU você gasta aproximadamente 30 minutos para ter o resultado, pois estamos usando threads sequenciais que são alocadas diretamente na fila de processamento da CPU. Quando você usa a GPU, o mesmo processo pode ser feito em 3 minutos ou até menos, pois estamos usando muito mais threads, só que desta vez de forma paralela, pois em CUDA existe uma fila para cada núcleo CUDA, cerca de 2.880 núcleos sendo estes divisíveis por mais 16 subnúcleos, no total é possível massificar o processamento de uma thread em 46.080 threads menores e mais rápidas.

gpucpu

Com milhões de GPUs habilitadas para CUDA já vendidas até hoje, os desenvolvedores de software, cientistas e pesquisadores estão descobrindo usos amplamente variados para a computação com GPU CUDA. Aqui estão alguns exemplos:

Vivendo num mundo heterogêneo, não é para se estranhar que os comportamentos computacionais ou virtuais sejam diferentes para cada um de nós, enquanto alguns gostam de ler jornais e revistas online outros gostam de vídeos e de interagir nas redes sociais, por muito tempo essa heterogênea da informação tem sido um desafio computacional, pois algoritmos especializados em tratar texto não conseguem tratar imagens e vice-versa.
O desafio mostrou com o tempo que isso na verdade era algo positivo e aproveitável, graças a evolução das arquiteturas de computador, hoje é possível cruzar dados heterogêneos para que as informações se complementem, como é o caso da PENN STATE (ver aqui) que minerou dados de redes sociais (flicker) e extraiu delas informações de localização que foram cruzadas com informações provenientes de satélites e de uma patrulha aérea, permitindo saber em tempo real de postagem a localização do usuário e o estado da área validando assim o ocorrido, permitindo um melhor e mais rápido socorro às vitimas; usando isso para o lado jedi da força a PENN STATE desde setembro de 2013 vem desenvolvendo esse sistema de informação por mineração de dados e tem tido bons resultados. Como a quantidade de dados é gigante e a extração de informação por algoritmos é bem pesada, acreditamos que o Plataforma CUDA possa ajudar nessas novas áreas de obtenção de informações heterogêneas com técnicas de BIG DATA, mineração de dados e ate mesmo no aprendizado de maquinas. 

Os processos mais estáticos como avaliação de estruturas geológicas em 3D para simulação de terremotos já vem dando bons resultados com CUDA no Seismology and Geodynamics Group at the Institute of Geophysics em Zurich. 

“Não é um exagero dizer que a tecnologia NVIDIA CUDA poderia ser o desenvolvimento mais revolucionário na computação desde a invenção do microprocessador” (Dimitri Rotow)

Porém, para os seguidores de Torvalds Linus, a Nvidia inicialmente desenvolvedora do OpenCL se apoderou do framework e criou sua própria vertente: o CUDA, pois queria lucrar com a venda destes chips e ter sua própria arquitetura “incompatível com a anterior”, desmanchando o sonho de integração de Linus, O CUDA apesar de inicialmente ter nascido no OpenCL, hoje está a alguns anos luz à frente em qualidade e em mãos programando, em vídeo a resposta de indignação do pai do linux.


Responses

  1. Muito bom!

    Um amigo meu da área de Sistema de Informação fez um TCC e produziu um trabalho com teste de processadores CUDA para dados matriciais e vetoriais. Ele acabou se surpreendendo, porque os testes foram melhores com dados matriciais do que com dados vetoriais.

    Para comparar entre os programas que são executados na CPU e de um programa que possua parte de sua execução na GPU, foram desenvolvidos três programas utilizando a mesma estratégia: o primeiro em ANSI C, o segundo utilizando paralelização a partir da biblioteca Pthreads e um terceiro programa em C para CUDA.Ou seja, um para a CPU, outro para CPU + GPU e outro para CUDA.

    Por exemplo foram executados testes com entradas idênticas para cada um dos três programas. As saídas das execuções e os tempos gastos foram tomados para conferência do resultado e análise do desempenho. A primeira entrada gerada possuía uma matriz de 200 por 500 e um vetor com 100 pontos.

    Resultado: https://c2.staticflickr.com/2/1467/24675615045_7e0cda5e8f_b.jpg

    Curtido por 2 pessoas

    • Excelente o Trabalho,

      Porem, depende da forma como ele pensou no código porque existem varias formas para se desenvolver usando o paradigma de computação paralela, dois exemplos: da primeira forma posso escrever uma Thread principal e esta chamar threads secundarias em GPU, isso possui um certo grau de paralelismo um pouco destinto desta outra forma: desenvolver threads com mesma carga distribuindo o processamento e acesso a memoria de forma igualitária. Na primeira forma eu tive maior sucesso com problemas vetoriais e pela segunda forma você provavelmente vai ter mais sucesso em resolver problemas matriciais.

      Talvez os resultados fossem melhores se ele usasse estrategias diferenciadas (mais aconselhadas) para cada caso.
      Seu comentário foi bem interessante e me remeteu a esse problema que já tive em códigos meus, então vou escrever um post sobre as formas de paralelizar um código.

      Curtido por 1 pessoa

      • Interessante sua analise e sua sugestão, porém os resultados já foram muito impressionantes. Observe que com uma mesma matriz de dados, o tempo gasto para o CUDA foi “0”, ou seja a performance foi muito interessante.

        Imagino esse potencial computacional resolvendo problemas que são muito comuns para quem trabalha com geotecnologias, o problema de poder computacional para geoprocessar alguns dados muito grandes.

        Curtido por 1 pessoa


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

%d blogueiros gostam disto: