2013-05-14 10 views
18

Czy istnieją jakieś biblioteki do multiplikowania macierzy w Go?Przejrzyj bibliotekę macierzy

Chcę napisać i wdrożyć kilka skalowalnych i błyskawicznych algorytmów ML na niektórych węzłach serwera, ale obawiam się, że szybkość i moc, jaką otrzymam z Go, będą przeważone przez dojrzałość Matlab lub nawet numpy implementacje w "wolniejszych" językach, które będą znacznie szybsze.

Wolę nie zajmować się C/C++, choć są królem wydajności.

Szybkie mnożenie macierzy i inne operacje są po prostu koniecznością dla tego zadania, a jeśli Go nie jest wystarczająco dojrzałe, aby je mieć ... cóż, muszę zdecydować, czy to ja je rozpoczynam. lub po prostu użyj innego narzędzia.

dzięki

+1

Właściwie Matlab jest królem operacji macierzowych.(Zwykle wykonuje podobne zadania w C++ i czasami znacznie przewyższa) –

+5

@DennisJaheruddin Oczywiście główną przyczyną jest LAPACK i wysoce zoptymalizowany BLAS. Wszystko, co łączy się z takimi bibliotekami (Numpy, Matlab ...) będzie znacznie szybsze niż inne, skompilowane lub nie. Jeśli OP w większości robi algebrę liniową, ciężko jest powtórzyć lata wysiłku i ostrożnego strojenia naukowców, sprzedawców sprzętu ... – jorgeca

+0

@jorgeca absolutnie tak! Powinienem był zapytać, czy jest opakowanie, które korzystało z LAPACK-a. może znasz jednego? – lollercoaster

Odpowiedz

6

Jeśli chcesz mieć natywną rozwiązanie, może chcesz używać skelterjohn/go.matrix. Zgodnie z moją wiedzą jest to najbardziej zaawansowana implementacja macierzy w czystej wersji.

Zawiera między innymi parallel matrix multiplication, jak omówiono here.

Należy pamiętać, że możliwe jest łączenie bibliotek C/C++ za pomocą cgo. Więc jeśli masz na myśli bibliotekę, ale nie chcesz pisać w C/C++, możesz napisać jakąś owijkę dla potrzebnych metod i napisać resztę w programie. Dokonano tego na przykład dla BLAS/LAPACK.

Aktualizacja: Jak zauważył @Malcom, rozwój wspomnianego opakowania cgo wydaje się być zablokowany. Spójrz na biogo.

+0

idealne do wskazania https://github.com/hrautila/linalg! – lollercoaster

+3

Unforunately @lollercoaster wydaje się, że rozwój na hrautila/linalg utknął w martwym punkcie. W ostatnim półroczu nie wprowadzono żadnych zmian. Dobrą wiadomością jest to, że biogo.matrix jest biblioteką macierzową wspieraną przez BLAS. Jedną z rzeczy, którą biogo.blas ma ponad inalg, jest pełny BLAS zaimplementowany do poziomu 3. – Malcolm

+2

Wierzę, że klasa macierzy biogo została teraz podzielona na osobny pakiet. kod: github.com/gonum/matrix docs: godoc.org/github.com/gonum/matrix. – jochen

5

Istnieje bardzo dobry pakiet matrycowy, który oprócz biogo. Przyjrzałem się gomatowi na go.matrix, a od października 2013 r. Stwierdzam, że biogo jest bardziej dojrzałe. Macierz dyskowa Biogo jest wspierana przez BLAS. Biogo używa cgo do połączenia z kodem C, który łączy się z bibliotekami FORTRAN BLAS. Myślę, że tylko Linux jest obsługiwany.

gomat jest niekompletny i działalność programistyczna utknęła w martwym punkcie. Ostatnia edycja do gomat miała miejsce ponad rok temu. Gomat nie jest tak kompletny, jak ani go.matrix, ani biogo.matrix.

go.matrix to dobry pakiet. Jest to dojrzała, czysta implementacja biblioteki macierzy. Ma nawet obsługę równoległych operacji macierzowych. Jednak biogo.matrix ma dodatkową zaletę korzystania z BLAS. BLAS był testowany przez dziesiątki lat; Ufałbym, że jest to niezawodność i wydajność (pomimo braku testów porównawczych dwóch implementacji).

Oto dokumentację biogo:

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

szczególności odpowiednie pakiety macierzowe są:

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

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

Instalacja z:

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

Być może dobrym pomysłem jako społeczność go do obejścia biogo.matrix? Nie zbadałem tego, ale może interfejsy biogo.matrix mogą być używane zamiennie z interfejsami macierzy od go.matrix ... – Malcolm

+1

Wierzę, że klasa macierzy biogo została teraz podzielona na osobną paczkę. kod: https://github.com/gonum/matrix docs: https://godoc.org/github.com/gonum/matrix. – jochen

Powiązane problemy