Вопрос про распараллеливание задачи
От: CyberDemon Россия  
Дата: 29.12.08 15:52
Оценка:
Столкнулся с задачей (кодирование видео), сильно грузящей как винт, так и процессор.
Точнее, есть основной поток, который делает всякие полезные вещи, его не трогаем.
Из этого потока получаются данные для обработки в больших количествах и лопатятся в другом потоке.
Рассматриваем ситуацию с неодноядерной (-процессорной) системой.
Возникают 2 проблемы:
1. Если винт не очень быстрый, то в определенный момент возникает bottleneck в производительности винта
2. Если винт быстрый, то в определенный момент возникнет ситуация, что второй поток не будет успевать за первым.

Что я думаю:
В случае с двумя ядрами (процами) все ясно и ничего (кроме оптимизации алгоритмов) не сделаешь.
Что будет с 3+ ядрами?
1. Вынести запись на диск в отдельный поток. Вопрос синхронизации и прочее не стоит. Меня интересует будет ли все так же тормозить или нет? Предполагается, что когда я пишу на диск инфу, больше никому диск не нужен. Другими словами — будут ли спокойно работать остальные потоки, пока "пишущий" сбрасывает на диск информацию?
2. Разделение на потоки алгоритма кодека. Тут, конечно, вопрос больше в "алгоритмы", но все же. Кодеки бывают разные, в данный момент меня интересует JPEG. Я в деталях алгоритма не шарю, у меня есть сорцы и знаю, что он кусками кодирует. Есть ли там зависимость линий друг от друга? То есть, можно ли спокойно разделить кадр на 2,3... потока?

Надеюсь, объяснил популярно А то вроде уже получил хорошие результаты, но клиенты хотят еще больше и лучше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.