Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Есть модульная прога


Автор: GrayCardinal 3.10.2006, 11:58
Косяк в том, что писалась в те времена, когда про двухядерки еще и не подозревали  smile Внимание вопрос - где бы почитать как это делается (распараллеливание) ? Что-нить умное желательно. Тема-то серьезная. Мне же надо каждую функцию того... распараллелить. А писать многопоточную обертку для каждой не очень хочется (мягко говоря).  smile

Добавлено @ 12:00 
ЗЫ
Функции - в смысле функциональная часть. Не математическая. Обработка инфы (файлов и не только), вывод результата (специфического для каждой функции)

Автор: maxim1000 3.10.2006, 12:26
просто замечание, основанное только на общих представлениях о параллельном выполнении программ, не подкреплённых опытом:

совсем необязательно распараллеливать каждую функцию
в некотором смысле количество распараллеливаний желательно даже уменьшать
два ядра дадут двойную скорость только в одном случае: когда между двумя параллельными потоками нет зависимостей, т.е. в начале программы запускаются два потока и делают свою работу независимо друг от друга
а чем больше пересылок данных (а значит, всяких взаимных проверок, синхронизаций и пр.), чем меньше производительность по самой задаче
потому распараллеливать нужно стараться на как можно более высоком уровне
(конечно, эта рекомендация для общего случая, в некоторых ситуациях всё может быть по-другому)

Автор: GrayCardinal 3.10.2006, 12:48
maxim1000, 
Спасибо и на том...

Автор: bsa 3.10.2006, 16:28
Если это относится к твоей проге silentbob, то делаешь 1+n потоков (где n - число ядер):
1. Составляет список файлов.
2... n. Обрабатывают файлы из списка, составленного первым потоком.

1-й поток сильно завязан на дисковую подсистему, поэтому больше всего времени будет простаивать в ожидании данных с дисков.
Остальные же только ждут появления файлов в списке.
Но что-то мне подсказывает, что в любом случае самым узким местом будет первый поток. smile

Автор: GrayCardinal 4.10.2006, 05:30
bsa, 
Да, про него я, про кого ж еще  smile 
Вот с первыми двумя пунктами, которые ты написал, еще что-то понятно, но там еще третий... Сборка все в одну кучу  smile А выходная инфа разная... Писать для каждой части (в каждый плагин) функцию результирующей "сборки" работы всех процессов ? Ничего лучше в голову не приходит...

Автор: MAKCim 4.10.2006, 08:56
Цитата

но там еще третий... Сборка все в одну кучу  smile А выходная инфа разная... Писать для каждой части (в каждый плагин) функцию результирующей "сборки" работы всех процессов ?

Смотри, можно сделать программу 2-ух процессной, процессы чем-нибудь соединить (IPC, каналы, локальные сокеты, ...). Первый процесс - многопоточный, реализует обработку файлов, как сказал 
bsa, второй процесс - собирает выходные данные. Главное унифицировать эти выходные данные, чтоб это не было просто потоком байт

Автор: GrayCardinal 4.10.2006, 09:04
Цитата

унифицировать эти выходные данные

Вот с этим как раз большие проблемы............................  smile 
ОК, ладно, понял....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)