Question

Je suis une majeure en affaires, occupant les deux tiers de mon cursus, avec un peu d'expérience en PHP, après avoir suivi un cours d'initiation au C ++ et regrettant maintenant mon choix d'entreprise par rapport à la programmation et à l'informatique.

Je suis intéressé par l’apprentissage d’une programmation plus avancée; spécifiquement C, et finalement à utiliser l’architecture CUDA pour l’analyse de données de réseaux neuronaux artificiels (pas pour le traitement de l’IA, de la vision ou de la parole, mais pour la recherche de corrélations entre les points de données de grands ensembles et l’analyse statistique de données générale).

Un conseil sur la façon dont je devrais commencer à apprendre le C? Ainsi que la technologie ANN / Bayesian pour analyser les données? Il y a tellement de livres que je ne sais pas quoi choisir.

Étant donné que CUDA est relativement nouveau, il ne semble pas y avoir beaucoup de matériel adapté à l’apprenant (c'est-à-dire non chiffré). Existe-t-il des ressources d'apprentissage pour CUDA autres que la documentation NVIDIA?

En outre, quelles ressources me recommanderiez-vous pour parler de l’informatique GPGPU et de la programmation massivement parallèle qui m’aideraient?

Était-ce utile?

La solution

Je ne recommande pas d'essayer d'abord d'apprendre CUDA car il s'agit d'une nouvelle technologie et que vous n'avez pas beaucoup d'expérience en programmation.

Comme vous n’avez pas beaucoup d’expérience en C (ou C ++), CUDA sera difficile à apprendre car il manque de maturité, de bibliothèques, de jolis messages d’erreur, etc.

CUDA est destiné aux personnes familiarisées avec le C (l'expérience C ++ aide également) et rencontrant un problème qui nécessite une amélioration des performances en recodant ou en repensant la solution d'un problème bien connu.

Si vous essayez de résoudre le problème "ANN / Bayesian" problèmes, je recommanderais de créer votre solution en C ++ ou C, votre choix. Ne vous préoccupez pas de la création de threads ou du multithreading. Ensuite, après avoir évalué les temps de réponse de votre solution série, essayez de la rendre parallèle en utilisant les threads OpenMP, Boost, w / e. Après cela, si vous avez encore besoin de plus de performances, je vous recommande d’apprendre CUDA.

Je pense que ce sont des points valables car CUDA a quelques erreurs assez cryptiques, difficiles à déboguer, une architecture totalement différente, etc.

Si vous êtes toujours intéressé, voici quelques liens pour apprendre CUDA:

Cours en ligne:

Forum (la meilleure source d’information):

Outils:

Problèmes résolus dans CUDA:

Autres conseils

Vous avez exprimé 3 objectifs différents:

  • Apprendre à programmer en C
  • Apprendre à écrire du code pour la plate-forme CUDA
  • Apprendre à utiliser les réseaux de Bayes et les réseaux de neurones pour l'analyse des données

Premièrement: ces choses ne sont pas faciles pour les personnes qui ont déjà plusieurs diplômes dans le domaine. Si vous n'en faites qu'une, assurez-vous de connaître l'inférence bayésienne. C'est de loin le framework le plus puissant disponible pour le raisonnement sur les données, et vous devez le savoir. Consultez le livre de MacKay (mentionné en bas). Vous vous êtes certainement fixé une tâche difficile - je vous souhaite tout le meilleur!

Vos objectifs sont tous des marmites de poisson assez différentes. Apprendre à programmer en C n'est pas trop difficile. Si possible, je voudrais prendre l’introduction aux algorithmes & amp; Structures de données " (généralement le premier cours pour les majors CS) dans votre université (il est probablement enseigné en Java). Cela vous sera extrêmement utile et le codage de base en C ne sera plus qu’une question d’apprentissage de la syntaxe.

Apprendre à écrire du code pour la plate-forme CUDA est nettement plus difficile. Comme recommandé ci-dessus, vérifiez d'abord OpenMPI. En général, il vous sera utile de lire quelque chose sur l'architecture informatique (Patterson & Hennessy, c'est bien), ainsi qu'un livre sur les algorithmes parallèles. Si vous n'avez jamais vu d'accès concurrentiel (c'est-à-dire si vous n'avez pas entendu parler d'un sémaphore), il serait utile de le rechercher (les notes de cours d'un cours sur les systèmes d'exploitation le couvriront probablement - voir Cours ouvert du MIT). Enfin, comme mentionné, il existe peu de bonnes références disponibles pour la programmation GPU car il s'agit d'un nouveau domaine. Donc, votre meilleur pari sera de lire un exemple de code source pour savoir comment faire.

Enfin, les filets bayésiens et neuraux. Premièrement, sachez qu’il s’agit de choses très différentes. Les réseaux bayésiens sont un moyen graphique (nœuds et arêtes) de représenter une distribution de probabilité conjointe sur un nombre (généralement grand) de variables. Le terme "réseau de neurones" est un peu plus vague, mais fait généralement référence à l’utilisation d’éléments de traitement simples pour apprendre une fonction non linéaire de classification des points de données. Les algorithmes de théorie de l'information, d'inférence et d'apprentissage de David J.C. MacKay sont un livre qui offre une très bonne introduction aux réseaux de Bayes et de Neural. Le livre est disponible gratuitement en ligne à l'adresse http: //www.inference.phy .cam.ac.uk / mackay / itila / . Ce livre est de loin mon préféré sur le sujet. L’exposition est extrêmement claire et les exercices sont éclairants (la plupart ont des solutions).

Si vous recherchez une introduction conviviale à la programmation parallèle, pensez plutôt à Ouvrir un MPI ou Posix Threading sur un cluster de processeurs. Tout ce dont vous avez besoin pour commencer est un processeur multicœur unique.

Le consensus général est que la multi-programmation sur ces nouvelles architectures (gpu, cellule, etc.) a encore du chemin à faire en termes de maturité de leurs modèles de programmation et de leurs API. Inversement, Open MPI et PThreads existent depuis un certain temps et il existe de nombreuses ressources pour les apprendre. Une fois familiarisé avec ces solutions, essayez d’essayer les nouvelles technologies.

Bien qu’il existe certainement des interfaces de programmation pour de nombreux autres langages, le C est probablement le langage moderne le plus courant (Fortran et Pascal luttant encore dans ce domaine) utilisé dans l’informatique haute performance. Le C ++ est également assez populaire, mais plusieurs packages Bioinformatics l'utilisent. Dans tous les cas, C est certainement un bon point de départ et vous pouvez passer au C ++ si vous voulez plus de fonctionnalités de langage ou de bibliothèques (ce sera probablement au détriment des performances).

Si l’exploration de données vous intéresse, vous pouvez également consulter le système open source appelé Orange. Il est implémenté en C ++, mais il prend également en charge la programmation utilisateur final en Python ou dans un langage visuel de nœuds.

Je ne sais pas s'il prend en charge les NN, mais je sais que les gens l'utilisent pour apprendre les techniques de datamining. Il supporte des choses comme le clustering et les règles d'association.

(Au cas où vous ne le sachiez pas, vous voudrez peut-être retrouver une personne de votre école B qui s'occupe de la gestion des opérations. Si vous êtes intéressé par la CS et le datamining, vous y rencontrerez peut-être des personnes qui ont les mêmes idées. )

Lien: gpgpu.org Des discussions intéressantes se déroulent

.

Les dernières versions de CUDA (3.1, 3.2) proposent un ensemble complet de fonctions, appelé CuBLAS, qui gérera les opérations de la matrice multicœur pour les configurations à carte unique. Mettre en parallèle la rétrophotographie sera un peu plus difficile, mais je travaille dessus.

J'ai pu trouver d'excellents cours vidéo gratuits de Stanford sur iTunesU

Méthodologie de programmation (CS106A) Abstractions de programmation (CS106B) Paradigmes de programmation (CS107) Apprentissage automatique (CS229) Programmation de processeurs massivement parallèles avec CUDA

Chacun de ces cours compte environ 20 conférences, donc il vaut la peine de les suivre tous, mais cela en vaut la peine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top