Frage

Ich studiere Betriebswirtschaftslehre, habe zwei Drittel meines Studiums abgeschlossen, habe ein wenig PHP-Erfahrung, habe einen C++-Einführungskurs besucht und bereue nun meine Entscheidung für die Betriebswirtschaft statt für Programmierung/Informatik.

Ich bin daran interessiert, fortgeschrittenere Programmierung zu erlernen.insbesondere C, und schließlich zur Verwendung der CUDA-Architektur für die Datenanalyse künstlicher neuronaler Netzwerke übergegangen (nicht für KI, Seh- oder Sprachverarbeitung, sondern zum Finden von Korrelationen zwischen Datenpunkten in großen Datensätzen und zur allgemeinen Daten-/Statistikanalyse).

Irgendwelche Ratschläge, wie ich mit dem Erlernen von C beginnen sollte?Sowie ANN/Bayesian-Technologie zur Datenanalyse?Es gibt so viele Bücher da draußen, dass ich nicht weiß, welches ich wählen soll.

Da CUDA ziemlich neu ist, scheint es nicht viel lernerfreundliches (d. h.(reduziertes) Material dafür.Gibt es über die NVIDIA-Dokumentation hinaus Lernressourcen für CUDA?

Welche Ressourcen würden Sie mir außerdem empfehlen, die sich mit GPGPU-Computing und massiv paralleler Programmierung befassen und mir weiterhelfen würden?

War es hilfreich?

Lösung

ich nicht empfehlen CUDA versuchen, zuerst zu lernen, da es sich um eine neue Technologie ist, und Sie haben nicht viel Hintergrund in der Programmierung.

Da Sie nicht viel Erfahrung in C (oder C ++), wird CUDA ein Schmerz zu lernen, da es Reife fehlt, Libs, nette Fehlermeldungen, etc.

CUDA für Menschen gedacht, die mit C vertraut sind (C ++ Erfahrung hilft auch) und ein Problem haben, die Leistung verbessert werden muss durch Umkodierung oder die Lösung eines bekannten Problems zu überdenken.

Wenn Sie versuchen, „ANN / Bayesian“ Probleme zu lösen ich empfehlen würde Ihre Lösung in C ++ oder C Erstellen Ihrer Wahl. Kümmern Sie sich nicht über Threads erstellen oder Multithreading. Dann, nach Auswertung werden die Reaktionszeiten Ihrer Serien Lösung versuchen, es durch die Verwendung von OpenMP parallel auszurichten, Fäden Erhöhung, w / e. Danach, wenn Sie noch mehr Leistung benötigen, dann würde ich empfehlen CUDA lernen.

Ich denke, diese gültige Punkte sind, weil CUDA einige ziemlich kryptischen Fehler hat, schwer zu debuggen, völlig andere Architektur, etc.

Wenn Sie immer noch interessiert sind, diese sind einige Links CUDA zu lernen:

Online-Kurse:

Forum (die beste Quelle für Informationen):

Werkzeuge:

Probleme in CUDA gelöst:

Andere Tipps

Sie haben drei verschiedene Ziele ausgedrückt:

  • Lernen, in C zu programmieren
  • Lernen, Code für die CUDA-Plattform zu schreiben
  • Lernen, Bayes-Netze und/oder neuronale Netze für die Datenanalyse zu verwenden

Zuerst:Für Leute, die bereits mehrere Abschlüsse in diesem Bereich haben, ist das nicht einfach.Wenn Sie nur eine durchführen, sollten Sie unbedingt etwas über die Bayes'sche Folgerung lernen.Es handelt sich um das mit Abstand leistungsfähigste verfügbare Framework zum Nachdenken über Daten, und Sie müssen es kennen.Schauen Sie sich MacKays Buch an (unten erwähnt).Sie haben sich sicherlich eine anspruchsvolle Aufgabe gestellt – ich wünsche Ihnen alles Gute!

Ihre Ziele sind allesamt recht unterschiedliche Ziele.Das Programmieren in C zu lernen ist nicht allzu schwierig.Wenn möglich, würde ich den Kurs „Einführung in Algorithmen und Datenstrukturen“ (normalerweise der erste Kurs für CS-Hauptfächer) an Ihrer Universität belegen (der Kurs wird wahrscheinlich in Java unterrichtet).Dies wird für Sie äußerst nützlich sein, und die grundlegende Codierung in C ist dann lediglich eine Frage des Erlernens der Syntax.

Das Erlernen des Codeschreibens für die CUDA-Plattform ist wesentlich anspruchsvoller.Wie oben empfohlen, schauen Sie sich bitte zuerst OpenMPI an.Im Allgemeinen ist es gut, etwas über Computerarchitektur (Patterson & Hennessy ist nett) sowie ein Buch über parallele Algorithmen zu lesen.Wenn Sie noch nie Parallelität gesehen haben (d. h.Wenn Sie noch nie von einem Semaphor gehört haben, wäre es nützlich, es nachzuschlagen (Vorlesungsnotizen aus einem Betriebssystemkurs werden es wahrscheinlich behandeln – siehe MIT Open Courseware).Schließlich gibt es, wie bereits erwähnt, nur wenige gute Referenzen zur GPU-Programmierung, da es sich um ein neues Feld handelt.Daher ist es am besten, den Beispielquellcode zu lesen, um zu erfahren, wie er gemacht wird.

Schließlich Bayes'sche Netze und neuronale Netze.Bitte beachten Sie zunächst, dass diese sehr unterschiedlich sind.Bayesianische Netzwerke sind eine grafische Methode (Knoten und Kanten) zur Darstellung einer gemeinsamen Wahrscheinlichkeitsverteilung über eine (normalerweise große) Anzahl von Variablen.Der Begriff „neuronales Netzwerk“ ist etwas vager, bezieht sich aber im Allgemeinen auf die Verwendung einfacher Verarbeitungselemente zum Erlernen einer nichtlinearen Funktion zur Klassifizierung von Datenpunkten.Ein Buch, das eine wirklich schöne Einführung sowohl in die Bayes-Netze als auch in die neuronalen Netze gibt, ist David J.C.MacKays Informationstheorie, Inferenz- und Lernalgorithmen.Das Buch ist kostenlos online erhältlich unter http://www.inference.phy.cam.ac.uk/mackay/itila/.Dieses Buch ist mit Abstand mein Favorit zu diesem Thema.Die Darstellung ist äußerst klar und die Übungen sind aufschlussreich (die meisten haben Lösungen).

Wenn Sie sich für eine einvernehmliche Einführung suchen Programmierung parallel statt betrachten öffnen MPI oder Posix Threading auf einem CPU-Cluster. Alles, was Sie dazu brauchen, um loszulegen ist ein einziger Multi-Core-Prozessor.

Der allgemeine Konsens ist, dass Multi-Programmierung auf diese neuen Architekturen (gpu, Zelle, usw.) eine Möglichkeit haben, in Bezug auf die Reife ihrer Programmiermodelle und api zu gehen. Im Gegensatz dazu haben Offene MPI und PThreads es schon eine ganze Weile und es gibt viele Ressourcen um für sie zu lernen. Sobald Sie mit diesen komfortabel bekommen haben, dann sollten Sie die neueren Technologien auszuprobieren.

Während es sicher ist Schnittstellen-Programmierung für viele andere Sprachen, C ist wahrscheinlich die häufigste moderne Sprache (Fortran und Pascal sind noch herum zu treten in diesem Bereich) in dem Einsatz in High-Performance-Computing. C ++ ist auch ziemlich beliebt, obwohl mehrere Bioinformatics Pakete diese verwenden. In jedem Fall C ist sicherlich ein guter Ausgangspunkt, und Sie können auf C ++ stoßen, wenn Sie mehr Sprachfunktionen oder Bibliotheken wollen (wahrscheinlich auf Kosten der Leistung sein, obwohl).

Wenn Sie Interesse an Data-Mining sind, können Sie auch auf dem Open-Source-System aussehen sollen orange genannt. Es ist in C ++ implementiert, aber es unterstützt auch Endanwender Programmierung in Python oder in einer visuellen Link-und-Knoten Sprache.

Ich weiß nicht, ob es NNs unterstützt, aber ich weiß, dass Leute es verwenden, Data-Mining-Techniken für das Lernen. Es unterstützt Sachen wie Clustering und Assoziationsregeln.

(auch, falls Sie nicht darüber wissen, möchten Sie vielleicht jemanden in Ihrer B-Schule auf die Spur, die Betriebsführung der Fall ist. Wenn Sie in CS und Data-Mining interessiert sind, könnten Sie gleichgesinnte Menschen dort finden. )

Link: gpgpu.org hat einige interessante Diskussion

Die neuesten CUDA Versionen (3.1, 3.2) eine voll funktionsfähige Reihe von Funktionen CuBLAS genannt, die auf einzelne Karte Setups mit mehreren Entkernungs Matrix-Operationen für Sie handhaben. Angelehnt an die backproagation wird ein bisschen mehr eine Herausforderung sein, aber ich arbeite daran.

Ich konnte einige große Video-Kurse frei von Stanford auf iTunesU

finden

Programmiermethodik (CS106A) Programmieren Abstraktionen (CS106B) Programmierparadigmen (CS107) Machine Learning (CS229) Programmierung Massively Parallel Processors mit CUDA

Jeder dieser Kurse hat etwa 20 oder so Vorträge so ist es eine Investition ist, sie alle, aber es lohnt sich zu beobachten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top