Konwersja za pomocą
lame dużej liczby plików trwa dosyć długo. Nie
pomaga tu liczba rdzeni procesora, bo lame jest
jednowątkowy. Jest to frustrujące, jeśli posiadamy procesor o 8,
16 czy nawet 24 rdzeniach. Jednak Linux od zawsze był wielowątkowy,
więc nic nie stoi na przeszkodzie, aby wykorzystać moc drzemiącą
w nowoczesnych CPU z użyciem prostych komend w powłoce Bash.
Wyznaczenie liczby
procesorów logicznych:
cc=`grep -c
^processor /proc/cpuinfo`
wyznaczenie liczy
procesów lame (oparcie o loadavg nie spełnia zadania, bo loadavg jest zbyt powolne):
#lavg=`cat
/proc/loadavg|cut -d. -f1`
cl=`ps -ef|grep -c "
lame "`
wstawienie
opóźnienia jeśli procesów lame więcej
niż rdzeni CPU:
if [ $((cc/2)) -lt
$((cl+1)) ] ; then sleep 4; fi;
poniższy skrypt
należy uruchamiać w katalogu z plikami mp3, tworzony jest
podkatalog aa z plikami po konwersji.
#!/bin/bash
cc=`grep -c
^processor /proc/cpuinfo`
mkdir aa; for ii
in *.mp3; do lame -a -V 8 --nohist "$ii" "aa/$ii"
& cl=`ps -ef|grep -c " lame "` ; if [ $((cc)) -lt
$((cl+1)) ] ; then sleep 4 ; fi; done
Warto poeksperymentować z wartościami sleep oraz z korektą parametrów cc i cl. Powyższe wartości sprawdzają się przy plikach audio kilka - kilkanaście MB i z procesorem Intel Xeon z 16 rdzeniami logicznymi (8 fizycznych).
Można też optymalizować dalej skrypt z użyciem wartości loadavg, żeby zapewnić dodatkowe opóźnienie przy przetwarzaniu długich plików, gdzie spowolnienie o 4 sekundy może być niewystarczające lub do zapobiegania przeciążeniu systemu przy realizacji innych obciążąjących CPU zadań.
Skrypt, po modyfikacjach, można wykorzytać do zrównoleglania innych zadań. Podane w powyższym przykładzie opcje do lame służą do konwersji dzwięku stereo na mono.