Rozwiązanie
sam oktawy jest zastosowanie pojedynczej nici, który działa na jeden rdzeń. Możesz uzyskać oktawę, używając bibliotek takich jak ATLAS, które wykorzystują wiele rdzeni. Tak więc, podczas gdy Octave używa tylko jednego rdzenia, gdy napotkasz ciężką operację, funkcje oktawy działają w ATLAS, które wykorzystują wiele procesorów.
Udało mi się to zrobić. Najpierw skompiluj "ATLAS" z kodu źródłowego i udostępnij go systemowi, aby oktawa mogła go znaleźć i korzystać z tych funkcji bibliotecznych. ATLAS dopasowuje się do twojego systemu i liczby rdzeni. Kiedy instalujesz oktawę ze źródła i określasz ATLAS, to używa go, więc kiedy oktawa wykonuje ciężką operację, jak ogromne mnożenie macierzy, ATLAS decyduje o tym, ile cpu ma użyć.
Nie udało mi się uruchomić tego dla Fedory, ale w Gentoo mogłem go uruchomić.
Kiedyś te dwa linki: ftp://ftp.gnu.org/gnu/octave/
http://math-atlas.sourceforge.net/
Pobiegłem następujące rdzeń oktaw przed i po ATLAS zainstalować:
tic
bigMatrixA = rand(3000000,80);
bigMatrixB = rand(80,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");
Mnożenie macierzy idzie znacznie szybciej za pomocą wiele procesorów, które były 3 razy szybsze niż wcześniej z pojedynczym rdzeniem:
Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas: Elapsed time is 0.529 seconds.
Trzy biblioteki używam których prędkość rzeczy są blas-atlas
, cblas-atlas
, lapack-atlas
.
Jeśli oktawa może korzystać z nich zamiast domyślnych bibliotek, a także bibliotek z bibliotekami, będzie korzystać z wielu rdzeni.
Nie jest to łatwe i wymaga umiejętności programowania, aby uzyskać oktawę do kompilacji ze źródła za pomocą ATLAS.
Drabacks użyciem Atlas:
To oprogramowanie Atlas używa dużo napowietrznych podzielić swój program oktaw w wielu wątkach. Pewnie, że idzie o wiele szybciej, jeśli wszystko, co robisz, to wielkie multiplikacje macierzy, ale większość poleceń nie może być wielowątkowa przez atlas.Jeśli wydobycie każdej mocy obliczeniowej/prędkości z rdzeni jest najwyższym priorytetem, będziesz miał dużo więcej szczęścia, pisząc program, który będzie działał równolegle z samym sobą. (Podziel swój program na 8 programów równorzędnych, które działają na 1/8 problemu i uruchom je wszystkie jednocześnie, gdy wszystko będzie gotowe, ponownie połącz wyniki).
Atlas pomaga programowi z pojedynczą gwintowaną oktawą zachowywać się nieco bardziej jak wielowątkowa aplikacja, ale nie jest to srebrna kula. Atlas nie sprawi, że twój pojedynczy program ośmiordzeniowy maksymalnie wyda twój 2,4,6,8 rdzeniowy procesor. Zauważysz wzrost wydajności, ale przyspieszenie pozwoli ci znaleźć lepszy sposób wykorzystania całego procesora. Odpowiedzią jest napisanie programu, który będzie działał równolegle z samym sobą, a to wymaga umiejętności programowania.
Sugestia
Wskaż swoją energię w Wektoryzacja swoje najcięższe operacje i dystrybucji proces nad n jednoczesnych wątków uruchomiony. Jeśli czekasz zbyt długo na proces, najprawdopodobniej najniższy zwisający owoc, aby go przyspieszyć, to użycie bardziej wydajnego algorytmu lub struktury danych.
Podobny do odpowiedzi Erika, możesz skompilować Octave z bibliotekami Intel'a dla jądra matematyki, aby móc korzystać z wielu wątków. MKL jest darmowy do użytku niekomercyjnego. http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave – KevinC