2013-05-14 12 views
18

Gibt es Bibliotheken für die Matrixmultiplikation in Go?Go-Matrixbibliothek

Ich möchte einige skalierbare und blitzschnelle ML-Algorithmen auf einigen Serverknoten schreiben und einsetzen, aber ich fürchte, dass die Geschwindigkeit und Leistung, die ich mit Go bekommen werde, durch die Reife von Matlab oder sogar ausgeglichen werden numpige Implementierungen in "langsameren" Sprachen, die viel schneller sein werden.

Ich würde lieber nicht mit C/C++ beschäftigen, obwohl sie der König der Leistung sind.

Schnelle Matrixmultiplikation und andere Operationen sind einfach eine Notwendigkeit für diese Aufgabe, und wenn Go nicht reif genug ist, um eine zu haben ... Nun, ich muss entscheiden, ob ich derjenige bin, der es startet oder einfach ein anderes Werkzeug verwenden.

dank

+1

Eigentlich Matlab ist König der Matrix-Operationen.(Führt in der Regel ähnliche Aufgaben in C++ durch und übertrifft manchmal enorm) –

+5

@DennisJaheruddin Natürlich ist die Ursache LAPACK und hoch optimiertes BLAS. Alles, was mit solchen Bibliotheken (Numpy, Matlab ...) verbunden ist, wird viel schneller sein als anderer Code, kompiliert oder nicht. Wenn das OP hauptsächlich lineare Algebra macht, ist es schwer, jahrelange Anstrengungen und sorgfältige Abstimmung durch Wissenschaftler, Hardware-Hersteller ... – jorgeca

+0

@jorgeca absolut ja zu wiederholen! Ich hätte nur fragen sollen, ob es einen Go Wrapper gibt, der LAPACK benutzt. vielleicht kennst du eines? – lollercoaster

Antwort

6

Wenn Sie eine native Lösung haben wollen, möchten Sie vielleicht skelterjohn/go.matrix verwenden. Nach meinem besten Wissen ist dies die fortschrittlichste Matrix-Implementierung in pure go.

Es enthält unter anderem parallel matrix multiplication wie diskutiert here.

Beachten Sie, dass es möglich ist, C/C++ - Bibliotheken mit cgo zu verbinden. Wenn Sie also eine Bibliothek im Sinn haben, aber nicht C/C++ schreiben wollen, schreiben Sie vielleicht einen Wrapper für die Methoden, die Sie brauchen, und schreiben Sie den Rest in go. Dies wurde beispielsweise für BLAS/LAPACK gemacht.

Update: Wie @Malcom darauf hingewiesen, scheint die Entwicklung der genannten cgo Wrapper blockiert zu haben. Schauen Sie sich biogo an.

+0

Hervorragend für den Hinweis auf https://github.com/hrautila/linalg! – lollercoaster

+3

Leider @lollercoaster scheint die Entwicklung auf hrautila/linalg zum Stillstand gekommen zu sein. Im letzten Halbjahr wurden keine Änderungen vorgenommen. Eine gute Nachricht ist, dass biogo.matrix eine Matrixbibliothek ist, die von BLAS unterstützt wird. Eine Sache, über die biogo.blas verfügt, ist ein vollständiges BLAS, das bis Level 3 implementiert wurde. – Malcolm

+2

Ich glaube, dass die biogo-Matrix-Klasse jetzt in ein separates Paket aufgeteilt wurde. Code: github.com/gonum/matrix Dokumentation: godoc.org/github.com/gonum/matrix. – jochen

5

Es gibt ein sehr gutes Matrixpaket, das neben dem biogo ist. Ich habe gomat bei go.matrix angeschaut, und ab 2013 Oktober schließe ich, dass biogo reifer ist. Biogos Matrix Pacakage wird von BLAS unterstützt. Biogo verwendet cgo, um mit C-Code zu verknüpfen, der mit den FORTRAN BLAS-Bibliotheken verknüpft ist. Ich denke, dass nur Linux unterstützt wird.

gomat ist unvollständig und die Entwicklungsaktivität ist zum Stillstand gekommen. Der letzte Schnitt zu Gomat war vor über einem Jahr. Auch ist gomat bei weitem nicht so komplett wie go.matrix oder biogo.matrix.

go.matrix ist ein gutes Paket. Es ist eine ausgereifte, reine Go-Matrix-Bibliotheksimplementierung. Es unterstützt sogar parallele Matrixoperationen. Biogo.matrix hat jedoch den zusätzlichen Vorteil, BLAS zu verwenden. BLAS wurde seit Jahrzehnten auf die Probe gestellt; Ich würde seiner Zuverlässigkeit und Leistung vertrauen (obwohl ich die beiden Implementierungen nicht bewertet habe).

Hier ist die Dokumentation auf biogo:

http://godoc.org/code.google.com/p/biogo

Insbesondere die entsprechenden Matrix-Pakete sind:

http://godoc.org/code.google.com/p/biogo.matrix

http://godoc.org/code.google.com/p/biogo.blas

installieren mit:

go get code.google.com/p/biogo/ 
+0

Vielleicht wäre es eine gute Idee als Go Community biogo.matrix zu erreichen? Ich habe es nicht untersucht, aber vielleicht könnten die Schnittstellen von biogo.matrix mit den Matrix-Schnittstellen von go.matrix ... – Malcolm

+1

austauschbar sein. Ich glaube, dass die biogo Matrix-Klasse jetzt in ein separates Paket aufgeteilt wurde. Code: https://github.com/gonum/matrix Dokumentation: https://godoc.org/github.com/gonum/matrix. – jochen