Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
1

Алгоритм оптимального распараллеливания задач на несколько потоков

25.06.2014, 17:11. Показов 807. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеем 4-ядерный процессор и 100 задач. Задачи разные по сложности - могут выполняться от 1 до 10 секунд каждая. Необходимо равномерно загружать 4 ядра процессора задачами - таким образом, чтобы постоянно была максимальная загрузка, ядра процессора не простаивали, и общее время работы было минимальным.

Мне представляется, что, например, сложные задачи (которые медленно выполняются) нужно накидывать на процессор в первую очередь. Потому что если сначала раскидать мелкие задачи, а потом останется одна сложная, то она загрузит только одно ядро процессора, а остальные три будут простаивать. Ну, и много аналогичных оптимизаций можно учесть.

Кто знает, есть ли подобные готовые алгоритмы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2014, 17:11
Ответы с готовыми решениями:

Замедление работы потоков если запущено несколько потоков
Есть отдельный поток который движет красным квадратом. Он каждую миллисекунду меняет положение...

Алгоритм оптимального сложения
Нужно написать диплом на тему реализация алгоритма оптимального сложения на ПЛИС Нужна любая...

Алгоритм поиска оптимального сочетания
Уважаемы программисты, всех приветствую! Помогите плиз написать алгоритм, задачу задали, над...

Алгоритм оптимального расположения на графе
Дан неориентированый граф. Необходимо вычислить, какие узлы отмечать, так, что бы расстояние до...

9
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
25.06.2014, 17:17 2
конечно есть.
вот это например посмотрите
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
25.06.2014, 17:17  [ТС] 3
Алгоритм должен учитывать:
1) количество ядер в процессоре;
2) список задач. Для каждой задачи известна сложность (например, программа обрабатывает файлы, известны размеры файлов);

Добавлено через 13 секунд
korep,
не открывается ссылка.
0
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
25.06.2014, 17:20 4
алгоритм оптимизации потоков процессора
это в гугле введите там куча ссылок.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
26.06.2014, 10:43 5
Цитата Сообщение от Suppir Посмотреть сообщение
Потому что если сначала раскидать мелкие задачи, а потом останется одна сложная, то она загрузит только одно ядро процессора, а остальные три будут простаивать
Не факт. Сложная задача может задействовать и все ядра.
Цитата Сообщение от Suppir Посмотреть сообщение
2) список задач. Для каждой задачи известна сложность (например, программа обрабатывает файлы, известны размеры файлов);
Размер файла это не сложность, это объем данных, и не всегда есть зависимость между объемом работ и сложностью.
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
26.06.2014, 12:11  [ТС] 6
Размер файла для примера привел. Допустим, задача - написать парсер для файлов. Время обработки файла обычно пропорционально его размеру. Известен список файлов, размеры каждого файла.

Добавлено через 27 секунд
Один файл можно обрабатываться только в рамках одного потока.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
26.06.2014, 12:26 7
Suppir, про thread pool не слышал?
Создаешь количество потоков равное количество потоков процессора + 1.
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
26.06.2014, 12:30  [ТС] 8
Я сейчас как раз использую ThreadPool. Но он неоптимально распределяет - загрузка процессора не более 60 - 70% получается.

А зачем создавать количество потоков процессора +1?

И использую просто количество логических ядер процессора:
C#
1
2
int cores = Environment.ProcessorCount;
ThreadPool.SetMaxThreads(cores, cores);
0
1864 / 764 / 105
Регистрация: 01.10.2012
Сообщений: 4,121
26.06.2014, 14:50 9
Цитата Сообщение от Suppir Посмотреть сообщение
Имеем 4-ядерный процессор и 100 задач. Задачи разные по сложности - могут выполняться от 1 до 10 секунд каждая. Необходимо равномерно загружать 4 ядра процессора задачами - таким образом, чтобы постоянно была максимальная загрузка, ядра процессора не простаивали, и общее время работы было минимальным.
Как правило неизвестно заранее сколько времени будет выполняться та или иная задача. Если известно - да, лучше большие первыми как Вы сказали.

Основная проблема (о которой не упоминалось) в том что не так уж просто "дать следующую задачу", это довольно затратно если кластеры малы. У Вас мин время = 1 сек т.е. огромно, и этой проблемы нет. Поэтому не буду пускаться в дальнейшие объяснения
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
26.06.2014, 14:54 10
Цитата Сообщение от Suppir Посмотреть сообщение
Но он неоптимально распределяет - загрузка процессора не более 60 - 70% получается.
Он вообще не распределяет.
Возможно стоит поиграться с количеством потоков.
0
26.06.2014, 14:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2014, 14:54
Помогаю со студенческими работами здесь

Алгоритм поиска оптимального пути.
Привет всем :) Вот заранее начал готовится к диплому, нашел ваш форум и понял что именно тут...

Алгоритм оптимального кодирования Хаффмена
Добрый день! Помогите, пожалуйста, написать алгоритм оптимального кодирования Хаффмена.

Реализовать алгоритм оптимального кодирования Хаффмана
Добрый день! Нужно реализовать алгоритма Хаффмана. Помогите, пожалуйста.

Генетический алгоритм оптимального расположения файлов на диске
Добрый вечер. Не понимаю одну вещь. Есть набор последовательностей обращений к файлам на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru