Griefin
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору bolega Можно ли реализовать в Кромсаторе простой process-based параллелизм для того, чтобы полностью задействовать многопроцессорные машины? О thread-based не прошу потому что такая реализация будет сложнее. Параллелизм на уровне процессов делается следующим образом. Если для обработки изображения из списка не нужны результаты обработки предыдущих элементов, то список файлов задания можно поделить на N частей (N -- количество процессоров в системе), запускать одновременно N процессов, каждый из которых будет обрабатывать свою часть списка. Планировщик ОС сам позаботится о том, чтобы каждый процесс выполнялся на отдельном процессоре. Может быть, лучше даже запускать не N, а 2*N процессов, чтобы одни могли ждать в состоянии iowait, а другие работать. Но точно не могу сказать, будет ли так быстрее. Для этого нужно будет часть кода реализовать в виде отдельной программы или, как минимум, сделать возможность запуска Кромсатора без GUI в пакетном режиме, а также создавать временные файлы заданий для кусков списка. Возможен также и другой подход, применяемый, например, в foobar2000 при конвертации. Cписок файлов не разбивается на части, мастер-процесс (GUI) поочередно запускает по одному дочернему процессу (так, чтобы их всегда было не более N), каждый из которых обрабатывает один следующий файл из списка. Очевидно, в этом случае появляются накладные расходы на создание и уничтожение процессов, поэтому такой метод будет работать несколько медленнее. | Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 15:41 13-12-2008 | Исправлено: Griefin, 20:30 13-12-2008 |
|