Pergunta

Sou especialista em negócios, dois terços do meu programa de graduação, com um pouco de experiência com PHP, tendo feito uma classe C ++ introdutória e agora me arrependo de minha escolha de negócios em vez de programação/ciência da computação.

Estou interessado em aprender programação mais avançada; Especificamente C e, eventualmente, progredindo no uso da arquitetura CUDA para análise de dados de redes neurais artificiais (não para IA, visão ou processamento de fala, mas para encontrar correlações entre pontos de dados em grandes conjuntos de dados e análise geral/análise estatística).

Algum conselho sobre como devo começar a aprender C? Bem como a tecnologia Ann/Bayesiana para analisar dados? Existem tantos livros por aí, não sei o que escolher.

Como o CUDA é bastante novo, não parece haver muito material para o aluno (ou seja, idiota). Existem recursos de aprendizado para CUDA além da documentação da NVIDIA?

Além disso, que recursos você recomendaria que falasse sobre a computação GPGPU e a programação massivamente paralela que me ajudaria?

Foi útil?

Solução

Não recomendo tentar aprender CUDA primeiro, pois é uma nova tecnologia e você não tem muita experiência em programação.

Como você não tem muita experiência em C (ou C ++), o CUDA será uma dor de aprender, pois falta maturidade, libs, boas mensagens de erro, etc.

O CUDA destina -se a pessoas familiarizadas com C (a experiência C ++ também ajuda) e tem um problema que precisa de melhoria de desempenho recodificando ou repensando a solução de um problema bem conhecido.

Se você está tentando resolver problemas "Ann/Bayesian", eu recomendaria criar sua solução em C ++ ou C, sua escolha. Não se preocupe em criar tópicos ou multithreading. Depois, após a avaliação, os tempos de resposta da sua solução serial tentam torná -la paralela usando o OpenMP, Boost Threads, w/e. Depois disso, se você ainda precisar de mais desempenho, eu recomendaria aprender CUDA.

Eu acho que esses são pontos válidos, porque o CUDA tem alguns erros bastante enigmáticos, difíceis de depurar, arquitetura totalmente diferente etc.

Se você ainda está interessado, esses são alguns links para aprender Cuda:

Cursos online:

Fórum (a melhor fonte de informação):

Ferramentas:

Problemas resolvidos em Cuda:

Outras dicas

Você expressou 3 objetivos diferentes:

  • Aprendendo a programar em C
  • Aprendendo a escrever código para a plataforma CUDA
  • Aprendendo a usar as redes e/ou redes neurais de Bayes para análise de dados

Em primeiro lugar: essas coisas não são fáceis para pessoas que já têm vários graus no campo. Se você fizer apenas um, aprenda sobre a inferência bayesiana. É de longe a estrutura mais poderosa disponível para raciocínio sobre dados, e você precisa conhecê -lo. Confira o livro de Mackay (mencionado na parte inferior). Você certamente estabeleceu uma tarefa desafiadora - desejo -lhe tudo de melhor!

Seus objetivos são todas as chaleiras de peixe bastante diferentes. Aprender a programar em C não é muito difícil. Eu faria se pudesse levar a "Introdução a algoritmos e estruturas de dados" (geralmente o primeiro curso para cursos de CS) em sua universidade (provavelmente é ensinado em Java). Isso será extremamente útil para você, e a codificação básica em C será simplesmente uma questão de aprender sintaxe.

Aprender a escrever código para a plataforma CUDA é substancialmente mais desafiador. Conforme recomendado acima, consulte primeiro o OpenMPI. Em geral, você estará bem servido para ler algo sobre a arquitetura de computadores (Patterson & Hennessy é legal), bem como um livro sobre algoritmos paralelos. Se você nunca viu concorrência (ou seja, se você não ouviu falar de um semáforo), seria útil procurar (Notas de palestras de um curso de sistemas operacionais provavelmente o cobrirá - consulte o MIT Open Courseware). Finalmente, como mencionado, existem poucas boas referências disponíveis para a programação da GPU, pois é um novo campo. Portanto, sua melhor aposta será ler o código -fonte do exemplo para saber como é feito.

Finalmente, redes bayesianas e redes neurais. Primeiro, esteja ciente de que estes são bem diferentes. As redes bayesianas são uma maneira gráfica (nós e arestas) de representar uma distribuição de probabilidade articular em um número (geralmente grande) de variáveis. O termo "rede neural" é um pouco mais vaga, mas geralmente se refere ao uso de elementos simples de processamento para aprender uma função não linear para classificar os pontos de dados. Um livro que oferece uma introdução muito boa às redes de Bayes e redes neurais é a teoria da informação de David JC Mackay, algoritmos de inferência e aprendizado. O livro está disponível gratuitamente online em http://www.inference.phy.cam.ac.uk/mackay/itila/. Este livro é de longe o meu favorito sobre o assunto. A exposição é extremamente clara e os exercícios são esclarecedores (a maioria tem soluções).

Se você está procurando uma introdução amigável à programação paralela, considere Open MPI ou rosqueamento POSIX em um cluster da CPU. Tudo o que você precisa para começar isso é um único processador multi-core.

O consenso geral é que a multiprograma nessas novas arquiteturas (GPU, célula etc.) tem um caminho a percorrer em termos de maturidade de seus modelos de programação e APIs. Por outro lado, o MPI e o PTHREADs abertos existem há um bom tempo e há muitos recursos para aprendê -los. Depois de se sentir confortável com isso, considere experimentar as tecnologias mais recentes.

Embora existam certamente interfaces de programação para muitos outros idiomas, C é provavelmente a linguagem moderna mais comum (Fortran e Pascal ainda estão chutando nessa área) em uso em computação de alto desempenho. O C ++ também é bastante popular, porém, vários pacotes de bioinformática usam isso. De qualquer forma, C é certamente um bom ponto de partida, e você pode chegar a C ++ se quiser mais recursos ou bibliotecas de idiomas (provavelmente estará no custo do desempenho).

Se você estiver interessado em mineração de dados, também pode querer olhar para o sistema de código aberto chamado Orange. Ele é implementado no C ++, mas também suporta programação do usuário final no Python ou em um idioma visual de link e nó.

Não sei se ele suporta o NNS, mas sei que as pessoas o usam para aprender técnicas de dataminação. Ele suporta coisas como agrupamentos e regras de associação.

(Além disso, caso você não soubesse disso, pode querer rastrear alguém na sua escola B que faz gerenciamento de operações. Se você estiver interessado em CS e DataMining, poderá encontrar pessoas parecidas por lá.)

Link: gpgpu.org Tem alguma discussão interessante

Os lançamentos mais recentes do CUDA (3.1, 3.2) têm um conjunto completo de funções chamadas Cublas que lidam com operações de matriz múltipla para você em configurações de cartão único. Paralelamente à protagonidade será um desafio um pouco mais, mas estou trabalhando nisso.

Consegui encontrar ótimos cursos de vídeo livres de Stanford no iTunesu

Metodologia de programação (CS106A) Abstrações de programação (CS106b) Paradigmas de programação (CS107) Aprendizado de máquina (CS229) Processadores paralelos massivamente com CUDA com CUDA com CUDA

Cada um desses cursos tem cerca de 20 palestras, por isso é um investimento assistir a todos que vale a pena.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top