Russian Qt Forum
Ноябрь 22, 2024, 21:44
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
параллельная обработка файлов
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: параллельная обработка файлов (Прочитано 20185 раз)
Bepec
Гость
Re: параллельная обработка файлов
«
Ответ #15 :
Февраль 15, 2016, 22:33 »
Уж вас ли не знать, что наличие в руках непонятной фигни, увеличиваем шансы на разбор и правильный сбор этой фигни
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: параллельная обработка файлов
«
Ответ #16 :
Февраль 15, 2016, 23:27 »
по-моему всю необходимую информацию я предоставил: имеется хэш «строка-массив» (ну или просто массив массивов, непринципиально), необходимо поэлементно сравнить каждый массив с каждым, это сравнение я хочу распараллелить.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
Re: параллельная обработка файлов
«
Ответ #17 :
Февраль 16, 2016, 03:37 »
Ну я вообще то брал в расчёт все расходы - на чтение, на вычисление хеша и на сравнение.
PS я имел в виду дать данные для работы, эти 10к файлов или что там
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: параллельная обработка файлов
«
Ответ #18 :
Февраль 16, 2016, 11:22 »
так толку с файлов, если ты не знаешь как их читать (алгоритм там нетривиальный). а вычленить минимальный проект непросто, как я уже сказал.
главный затык в перекрестном сравнении (потому что много сравнивать), а что там внутри — неважно.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
poru
Самовар
Offline
Сообщений: 103
Re: параллельная обработка файлов
«
Ответ #19 :
Февраль 16, 2016, 14:06 »
Цитата: kambala от Февраль 15, 2016, 22:13
трудно будет вычленить минимальный
тема создана не для «напишите мне», а «расскажите как правильно сделать и что почитать».
Цитата: Igors от Февраль 13, 2016, 17:15
Цитата: kambala от Февраль 13, 2016, 16:52
то есть хэш разрезать на n/2 частей и на каждую выделить нить, которая будет проводить 3 сравнения?
Не нужно никого резать, и хеш не нужен. Есть контейнер в котором каждый эл-т соответствует файлу (данные). Теперь формируем "задачи" которые будем скармливать ниткам (число задач не зависит от числа ниток)
Первая задача будет сравнивать первый файл со всеми остальными
Вторая задача будет сравнивать второй файл со всеми последующими + предпоследний с последним
Третья - третий файл со всеми последующими + 3 последних
и.т.д
Задаче надо знать только контейнер и 2 индекса с которых начинать
вот это буду пробовать
В случае когда 1-я задача в первом потоке будет сравнивать 1-й и 2-й файлы, а 2-я задача во втором потоке будет сравнивать 2-й и 3-й файлы, то два потока будут обращаться к одному и тому же 2-му массиву данных. Это приведет к снижению производительности.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: параллельная обработка файлов
«
Ответ #20 :
Февраль 16, 2016, 14:53 »
Цитата: poru от Февраль 16, 2016, 14:06
В случае когда 1-я задача в первом потоке будет сравнивать 1-й и 2-й файлы, а 2-я задача во втором потоке будет сравнивать 2-й и 3-й файлы, то два потока будут обращаться к одному и тому же 2-му массиву данных. Это приведет к снижению производительности.
Читать одно и то же могут хоть все нитки сразу. Это будет даже чуть шустрее за счет кеша процессора
Записан
poru
Самовар
Offline
Сообщений: 103
Re: параллельная обработка файлов
«
Ответ #21 :
Февраль 16, 2016, 15:33 »
Да, если адреса данных для 2х потоков будут совпадать. Я смотрел с другой стороны, а если за квант времени каждый поток обрабатывает по 40 байт и адреса данных перекрываются, то будет постоянная перезагрузка кэша.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: параллельная обработка файлов
«
Ответ #22 :
Февраль 16, 2016, 15:37 »
Цитата: poru от Февраль 16, 2016, 15:33
Да, если адреса данных для 2х потоков будут совпадать. Я смотрел с другой стороны, а если за квант времени каждый поток обрабатывает по 40 байт и адреса данных перекрываются, то будет постоянная перезагрузка кэша.
При использовании QString и (я так подозреваю) "регулярки" о таких вещах говорить просто неприлично
Записан
poru
Самовар
Offline
Сообщений: 103
Re: параллельная обработка файлов
«
Ответ #23 :
Февраль 16, 2016, 16:03 »
главный вопрос темы: как ускорить обработку, отсюда Q'стринги просто не применимы
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: параллельная обработка файлов
«
Ответ #24 :
Февраль 16, 2016, 16:07 »
Цитата: poru от Февраль 16, 2016, 16:03
главный вопрос темы: как ускорить обработку, отсюда Q'стринги просто не применимы
Давайте спокойнее относиться к моде/увлечениям молодежи
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: параллельная обработка файлов
«
Ответ #25 :
Февраль 16, 2016, 16:12 »
Цитата: Igors от Февраль 16, 2016, 15:37
Цитата: poru от Февраль 16, 2016, 15:33
Да, если адреса данных для 2х потоков будут совпадать. Я смотрел с другой стороны, а если за квант времени каждый поток обрабатывает по 40 байт и адреса данных перекрываются, то будет постоянная перезагрузка кэша.
При использовании QString и (я так подозреваю) "регулярки" о таких вещах говорить просто неприлично
мимо
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: параллельная обработка файлов
«
Ответ #26 :
Февраль 21, 2016, 11:10 »
Цитата: poru от Февраль 15, 2016, 12:52
Вспомнилась мне точно такая же история. Нужно было в строго определенное время анализировать ~40000 техпроцессов (1 тп - 1 файл). Программа была написана задолго до меня в Delphi и отрабатывала за 2,5 часа. Руководству для принятия каких-то там решений оставалось 30 минут и попросили ускорить. Переписал все в Builder 2006 и результат получал через 40 минут. Все в восторге! Но какой то гвоздь в заднице не давал покоя и в одну из новогодних ночей переписал все на чистом "С" без шаблонов, классов, с загрузкой файлов в память и расчета смещения указателей и все на 2-х потоках. Программа обсчитала все эти файлы за полторы минуты. Я в шоке! Руководство в испуге! Попросили больше таких программ не писать) Использование привычных классов будет вас тормозить.
http://bash.im/quote/438082
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: параллельная обработка файлов
«
Ответ #27 :
Февраль 21, 2016, 16:54 »
всем спасибо, все получилось. результаты (дебаг сборка без подключенного дебаггера):
загрузка файлов и обработка по отдельности (эту часть я не менял):
1000 файлов: 17 секунд
10000 файлов: 220 секунд
перекрестное сравнение:
1000 файлов: 30 секунд => 13 секунд
10000 файлов: 2850 секунд => 1420 секунд
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: параллельная обработка файлов
«
Ответ #28 :
Февраль 23, 2016, 17:38 »
в релиз сборке студией 2015 10к файлов обрабатывается чуть менее 3-х минут
правда, тут машина чуть помощнее.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: параллельная обработка файлов
«
Ответ #29 :
Февраль 24, 2016, 09:50 »
Цитата: kambala от Февраль 21, 2016, 16:54
1000 файлов: 30 секунд => 13 секунд
Наверное 4 ядра? Маловато КПД. Если интересно сравните с OMP, там главная забота - подключить либу, (в MSVC она есть), дальше так
Код
C++ (Qt)
#pragma omp parallel for
for
(
int
i
=
0
;
i
<
task.
size
(
)
;
++
i
)
DoTask
(
task
[
i
]
)
;
Ну и воткнуть omp_set_num_threads на старте приложения
Записан
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...