| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Есть модульная прога |
| Автор: GrayCardinal 3.10.2006, 11:58 |
| Косяк в том, что писалась в те времена, когда про двухядерки еще и не подозревали Добавлено @ 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-й поток сильно завязан на дисковую подсистему, поэтому больше всего времени будет простаивать в ожидании данных с дисков. Остальные же только ждут появления файлов в списке. Но что-то мне подсказывает, что в любом случае самым узким местом будет первый поток. |
| Автор: GrayCardinal 4.10.2006, 05:30 |
| bsa, Да, про него я, про кого ж еще Вот с первыми двумя пунктами, которые ты написал, еще что-то понятно, но там еще третий... Сборка все в одну кучу |
| Автор: MAKCim 4.10.2006, 08:56 | ||
Смотри, можно сделать программу 2-ух процессной, процессы чем-нибудь соединить (IPC, каналы, локальные сокеты, ...). Первый процесс - многопоточный, реализует обработку файлов, как сказал bsa, второй процесс - собирает выходные данные. Главное унифицировать эти выходные данные, чтоб это не было просто потоком байт |
| Автор: GrayCardinal 4.10.2006, 09:04 | ||
Вот с этим как раз большие проблемы............................ ОК, ладно, понял.... |