2009-01-10

PPSS: Согреваю многоядерные камни

Теория
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.

Для очистки совести проверки я решил сравнить время кодирования wav'ок с помощью 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 комментариев: ответить

10.01.2009, 18:26   virens комментирует...

Интересный скриптик, заценим. Порой приходится много чего обрабатывать параллельно, а я - счастливый обладатель P4 с HyperThreading :-)

Там автор на гуглкоде обещает сделать параллельную обработку на нескольких машинах. Вот это будет да!

Спасибо за пост!

11.01.2009, 05:30   Анонимный комментирует...

Как всегда приятно почитать :)

А не пора ли нам на линуксовку собраться?

11.01.2009, 13:14   drakulavich комментирует...

> Там автор на гуглкоде обещает сделать параллельную обработку на нескольких машинах.
Приятно обладать пусть маленьким, но кластером :-)

2antono
Линуксовка — святое дело :) Давай обсудим в jabber'е. Жду авторизации.

Отправить комментарий