Jackdmp na komputerze wieloprocesorowym


Original: http://www.grame.fr/~letz/jackdmp.html
Copyright: Stéphane Letz

jackdmp jest C + + wersja o niskiej latencji Jack serwer audio dla jednoprocesorowym i maszyn wieloprocesorowych. Jest to nowa implementacja funkcji jack Server Core, której celem w usuwaniu pewne ograniczenia wynikające z obecnej konstrukcji. System aktywacji została zmieniona na przepływ danych modelu i blokada wolnych technik programowania dostępu wykresu zostały użyte mieć bardziej dynamiczny i solidny system.

  • jackdmp wykorzystać nowy model aktywacyjny klienta, który umożliwia jednoczesne wykonywanie klienta (na maszynie SMP) w przypadku gdy równoległe klientów istnieje w wykresie (klient, który posiada te same wejścia). Model ten aktywacja pozwala na lepsze wykorzystanie dostępnych procesorów na maszynie wieloprocesorowej, ale działa również na komputerze z jednym procesorem.
  • jackdmp używać blokady bezpłatny sposób dostępu (odczyt / zapis) wykres klient, co umożliwia połączenie / rozłączenie do zrobienia bez przerywania strumienia audio. Powoduje to, że połączenia / rozłączenia się płynny darmo.
  • jackdmp może pracować w 2 różnych trybie na poziomie serwera:
  • “Synchroniczny” Aktywacja: w danym cyklu, serwer czeka na wszystkich klientów do wykończenia (podobny do normalnego jackd)
  • “Asynchroniczny” Aktywacja: w danym cyklu, serwer nie czekać na wszystkich klientów do wykończenia i używać bufora wyjściowego obliczonego w poprzednim cyklu. “Słyszalny” rezultatem tego trybu jest to, że jeśli klient nie jest aktywowany w ciągu jednego cyklu, inni klienci mogą nadal działać i wynikające strumień audio nadal będzie produkowany (nawet jeśli jego częściowe w jakiś sposób). Tryb ten zwykle powoduje mniej (mniej słyszalny) audio, usterki w obciążonym systemie.

JACK2

Przyszłość JACK2 będzie oparta na kodzie jackdmp. Jack 1.9.8 jest “zmiana nazwy” z jackdmp i wynikiem wielu zmian rozpoczętych po LAC 2008. Obecnie jest rozpowszechniany jako pakiet źródłowy, w tym dokumentacji:

jack-1.9.8.tgz zawiera kod źródłowy tylko (głównie dla użytkowników Linux lub Solaris).

Użytkownicy OSX mogą uzyskać instalatora na miejscu JackOSX.

Użytkownicy systemu Windows mogą uzyskać instalatora 32 bity tutaj (do wykorzystania na 32 bity systemach): Windows 32 w wersji bitów.

Użytkownicy Windows mogą otrzymać 64/32 bity instalatora tutaj (do wykorzystania na 64 bitów systemach): Windows 64/32 wersja bitów.

Spójrz na poniższy pomocą JACK na stronie Windows więcej informacjach.

Beta Windows 1.9.9 wersji 32 bit instalator tutaj (do wykorzystania na 32 bity systemach): Windows 32 wersja bity

Beta Windows 1.9.9 wersji, 64/32 bity instalatora bity tutaj (do wykorzystania na 64 bitów systemach): Windows 64/32 bity wersja

Ogólne publikacje na temat projektu są dostępne tutaj. Papier techniczny na nowych “narzędzi profilowania” można znaleźć tutaj.

Stare pakiety: Następujące pakiety zawierają kod źródłowy dla systemów Linux, OS X i Windows i binarne wersje dla OSX i Windows. Więcej Dokumentacja techniczna jest również:

jack-1.9.7.tar.bz2 zawiera kod źródłowy tylko (głównie dla użytkowników systemu Linux).

jack-1.9.7.tgz zawiera kod źródłowy i wersje binarne dla OSX 32/64 bity i Windows (gdzie instalator jest wliczony w cenę).

Pierwsze źródła

Kod Jackdmp w teraz dostępny na Git na: https://github.com/jackaudio/jack2

a dla osób z dostępem do zapisu: git clone git :/ / github.com/jackaudio/jack2.git

JACK2 “potokowe” wersja eksperymentalna

Jackdmp Obecna implementacja pozwala na wyraźne równoległe klientów w postaci wykresu mają być przetwarzane na kilku dostępnych CPU w tym samym czasie. Typowym przykładem jest:

w ==> ==> C ==> out i ==> B ==> C ==> out

A i B zależą od samego wejścia ust “w” kierowca w tym przypadku) i mogą być aktywowane na 2 procesory, C czeka na A i B wyjść.

Jesteśmy eksperymentować z “potoku” pomysł, aby umożliwić kolejne wykresy (podobnie jak w ==> ==> B ==> out) być obliczane na maszynach wielordzeniowych w bardziej efektywny sposób. Chodzi o to, aby wyciąć D rozmiar bufora sterownika do N kilka mniejszych części i uruchomić cały wykres z N buforów D / N wielkości, na przykład: wziąć rozmiar bufora sterownika 1024 klatek, ze n = 4, wykres jest przetwarzany buforem 1024/4 = 256 klatek. Z poprzednim wykresie mamy sekwencję włączania w całym cyklu sterownika:

(1) <== 1 procesor
(2) B (1) <== 2 procesor
(3) B (2) <== 2 procesor
(4) B (3) <== 2 procesor
B (4) <== 1 procesor gdy X (n) reprezentuje indeks 256 bufora ramki stosowanej w przetwarzaniu. Przetwarzanie teraz będą odbywać się na kilku rdzeni jednocześnie. Model aktywacja została uogólniona bit do obsługi tego sprawę. Jest nowy-D parametr w linii poleceń, aby jackdmp określenie wartości N. Dwa nowe “jack_set_buffer_divisor / jack_get_buffer_divisor” funkcje zostały dodane w API, aby umożliwić dynamiczną zmianę dzielnika (= N) parametru na wykresie uruchomiony. Odpowiada “jack_bufdivisor” klient jest obecnie opracowywane. Testowanie: oddział potokowe jest dostępna tutaj: http://subversion.jackaudio.org/jack/jack2/branches/pipelining co svn jackd-R-D 4-d alsa-p 1024 i jack_bufdivisor 8, aby zmienić wartość dzielnika podczas biegania. UWAGA, UWAGA! W przypadku korzystania z portów wyjściowych, “jack_port_get_buffer” funkcja została przy założeniu, że adres bufor może być buforowana przez klienta. To nie przypadek jest już w wersji oddziału potoku. “Jack_port_get_buffer” muszą być teraz używane za każdym razem w zwrotnego procesu pobierania prawidłowego adresu bufora. Konsekwencją tej zmiany jest to, że kilka bardzo popularnych aplikacji jack (jak Ardour lub wodór) zepsute! (Kwiecień 2009: Ardour 2.8 jest już ustalona). Kod został przetestowany na OSX z niektórych ciężkich CoreAudio aplikacji jackified i jack obciążenie DSP spada zgodnie z oczekiwaniami, jak tylko dzielnik dostaje> 1. Typowe testy zostały wykonane z bufora sterownika = 512 lub 1024 i N = 4 lub 8.

Jackdmp “bezpośrednie” wersja eksperymentalna

Po kilku klientów jack są otwierane w taki sam sposób (albo serwer lub oddzielone proces), koszt przełączania kontekstu pomiędzy klientami można zmniejszyć zastępując bardziej kosztowne fifo bazie systemu aktywacji klienta przez lepsze połączenia bezpośredniego do dźwięku klienta callback proces. Jest to szczególnie interesujące, gdy klienci są połączone w kolejności. W poniższym wykresie klientów w tym samym procesie: w => [C1 => C2 => C3 => C4] => out, C1 zostaną wznowione najpierw przez serwer gniazda przez standardowe fifo systemu opartego ale C2, C3, C4 Proces callback będzie bezpośrednio nazwać w C1 wątku Real-Time. Dla każdego dowolnego wykresu z możliwością równoległego sub-grafie, system aktywuje każdy kolejny ścieżki w grafie z tej metody bezpośredniego połączenia i wznowienia równoległe części za pomocą fifo systemu opartego aktywacji.

Wyniki: na 4 rdzenie Intel Mac Pro z systemem gniazdo na 64 klatek z 10 na-process “Metro jak” klientów podłączonych w kolejności, przy normalnym systemie aktywacji procesora jack obciążeniu wynosi 12% i 4% tylko z bezpośrednim systemem aktywacji połączenia.

Testowanie: bezpośredni oddział jest dostępny tutaj: co svn http://subversion.jackaudio.org/jack/jack2/branches/direct. Nowy-C parametr pozwala włączyć “tryb połączenia bezpośredniego. Domyślnie “bezpośrednie połączenie” tryb jest wyłączony.

Comments are closed.