Теория
PPSS (Parallel Processing Shell Script) — это shell-скрипт для параллельной обработки файлов или других данных. Он разработан для того, чтобы в полной мере использовать многоядерные процессоры. Скрипт определяет количество доступных процессоров и запускает для каждого из них отдельный поток. Опционально использование Hyper-Threading. Вы можете вручную изменить количество параллельных процессов, если вам захочется (ключ -p N, где N — количество процессов).
PPSS будет принимать элементы из списка в качестве аргумента для указанной команды. Элементами могут быть как файлы из определенной директории, так и строки в текстовом файле (по одному в каждой строке).
Скрипт будет полезен в случае, когда обработка разделена на отдельные задачи, которые могут выполняться параллельно. Например, кодирование WAV-файлов в mp3, загрузка большого количества файлов, пакетная обработка изображений и т. д.
Практика
Пару слов об управлении этой «ракетой». Опции запуска:
- -c [ command ] Команда для выполнения. Пример: -c 'lame'
- -d [ directory ] Директория с файлами для обработки
- -f [ input file ] Файл, содержащий строки для обработки
- -l [ logfile ] Имя и путь к лог-файлу
- -p [ no of parallel processes ] Число одновременных процессов.
- -j ( enable hyperthreading ) Включение/отключение hyperthreading.
Для
lame
. Итак, исходные данные: 14 wav-файлов суммарным объемом 770 Mb и ноутбук Dell Inspiron 1525 с Core 2 Duo T7250 на борту.Без ppss выполнение команды:
for f in *.wav ; do lame -V2 "$f" ; done
заняло 234 секунды. Дубль два, теперь уже с параллельной обработкой:
./ppss.sh -c 'lame -V2 ' -l logfile -j
Барабанная дробь... Результат: 161 секунда, что почти в полтора раза быстрее, если сравнивать с первым опытом. Выходит, даже в домашних условиях в период зимних заморозков польза от скрипта неоспоримая :-)
3 комментариев: ответить
Интересный скриптик, заценим. Порой приходится много чего обрабатывать параллельно, а я - счастливый обладатель P4 с HyperThreading :-)
Там автор на гуглкоде обещает сделать параллельную обработку на нескольких машинах. Вот это будет да!
Спасибо за пост!
Как всегда приятно почитать :)
А не пора ли нам на линуксовку собраться?
> Там автор на гуглкоде обещает сделать параллельную обработку на нескольких машинах.
Приятно обладать пусть маленьким, но кластером :-)
2antono
Линуксовка — святое дело :) Давай обсудим в jabber'е. Жду авторизации.