Avatar von CoolAllo
  • CoolAllo

mehr als 1000 Beiträge seit 19.06.2003

Re: Julia ist also wie fast jede neue Sprache der letzten 20 Jahre

Hallo

> Und genau darum geht es, dass man oft viel Zeit in das geschickte verdrehen seines Programmcodes steckt, um alles zu C-Bibliotheken zu verschieben - das kann doch nicht ernsthaft das Ziel einer Modernen Sprache sein!

Doch. In jeder Programmiersprache werde ich meine Konstrukte kennen müssen damit es vernünftig läuft, Magie hat keine. Und du wirst immer schneller sein, wenn du ein Skalarprodukt mit einer Matrixmultiplikation x.T*y benutzt als wenn du mit einer Forschleife jedes Element multiplizierst und dann summierst. Denn wer immer die Matrixlibrary gebaut hat weiß hoffentlich weit besser als du, wie man sie auf effizienz tuned.
Und python nimmt dir da dann zum Beispiel viel ab. Mal mit PETSc in C das gemacht? Bitte nicht vergessen BeginAssembleMatrix und EndAssembleMatrix zu machen! Ach ja, MPI auch initialisieren beim Start des Programms, auch wenn man gerade Singlecore läuft.
Wenn ich aber mal eben testen will was bei der SVD einer Matrix rauskommt sind das in numpy paar Zeilen Code. Die schnell laufen.

> Mit dem Machine learning boom werden sehr viele Algorithmen von Grund auf neu entwickelt und müssen verdammt schnell laufen - am besten auch noch auf der GPU ohne alles neu zu schreiben.

> Soll das in Zukunft weiterhin alles in C geschrieben werden, oder wäre es schön diese in einer für die Problemstellung besseren Sprache zu schreiben?
Soll es. Weil ich um deine C Implementierung einen Wrapper bauen kann und es dann in python habe. Oder ruby. Oder C#. Und der C-Code auf jedem OS und jeder Plattform kompiliert werden kann, wenn du dich nicht sehr ungeschickt angestellt hast. Und ich mir einen Intelcompiler kaufen kann der mir sagt was ich noch tun kann damit die Schleife vektorisiert.

> Man sieht ja schon an der Popularität von Python, dass eigentlich niemand solche Algorithmen in C/C++ schreiben möchte.
Und doch steckt dahinter gerade C. Wenn man schon für die Matrix-Vektor Operation keine python-Schleife nehmen will, soll man dann ein komplettes CNN highlevel bauen? Oder vielleicht doch nur das Interface um es so zu füttern, dass man über seine Daten nachdenkt statt über den Algorithmus den sowieso ein anderer gebaut hat?

Zurück zu PETSc. Such mal in der Dokumentation wie es dir eine Determinante berechnet.
Tut es nicht. Denn du brauchst die Funktion nicht, wenn du weißt was du machst. LR-Zerlegung und dann die Diagonale. Einfach, oder? Aber weniger nachdenken ist, wenn ich in numpy die Funktion dafür fertig habe. Die vielleicht genau das gleiche im Hintergrund nimmt.
Umgekehrt ... wenn ich so scharf optimiere, dass ich die Zerlegung nicht zwei Mal machen will, dann nehme ich besser PETSc und kann die Determinante aus der LR-Zerlegung die ich später zum Lösen verwende benutzen und spare mir einen Faktor 2 (der asymptotisch ja egal ist wenn LR-Zerlegung in O(n^3) ist). Numerisch ist ein Faktor 2 halt wichtiger als der Informatiker der an der Tafel die Komplexität ausrechnet denkt.

> Also, wenn die Performance nicht reicht, warum sollte man nicht eine Sprache wählen, die sich so schön wie Python beherrschen lässt aber die Performance von C bietet?
Fängt schon an damit, dass mein Kollege sie nicht kann und hört noch nicht auf dabei, dass es die 100 Codeanalyse-Tools von C dort noch nicht gibt.

> Übrigens, als Python und Julia Programmierer würde ich sogar soweit gehen zu sagen, dass sich Julia Code schöner schreibt als Python - aber diese Aussage ist natürlich höchst Subjektiv!
Kann ja sein, wobei ich im Artikel mich paar mal gewundert habe. Am Ende versprechen viele neue Sprachen das aber und man muss sich immer eingewöhnen. Und ich kann eigentlich nie eine Sprache danach auswählen außer vielleicht für die erste Programmiervorlesung wo die Studenten nur lernen sollen was der unterschied zwischen if und while ist und es egal ist ob man ihnen python, pascal oder turtle vorsetzt, sie aber mit Speicherreservierung verschonen will.

Bewerten
- +