Параллельные вычисления расчета факториала числа N

0. Rustig 1533 28.06.20 17:49 Сейчас в теме
Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)

Перейти к публикации

Лучшие комментарии
15. dusha0020 917 30.06.20 15:18 Сейчас в теме
Я кода-то делал подобные вещи, пытаясь ускорить расчеты в серверном режиме. Отсюда у меня ряд вопросов и замечаний:
1. Мне кажется намного удобнее делать количество потоков расчета параметром для вызываемой процедуры. Ядер и потоков на каждом сервере по разному, да и соображения управления нагрузкой не надо забывать.
2. Я бы, как указал echo77 в (1), не стал в таком случае флудить 4 или сколько еще функций расчета факториала, ибо количество потоков динамическое и сколько нужно функций не понятно. Достаточно и одной.
3. Ожидать завершения фоновых заданий можно не собирая их отбором по ключу, а сразу при запуске добавлять в массив. В этом случае нам не нужно будет их потом искать и плодить лишние функции для запуска разных заданий с одним ключом.
4. Как Вы правильно заметили, константы не могут содержать результат больше 32 разрядов. Ну и количество констант не может быть динамическим, определяемым переменной числа нужных потоков. В общем как по мне константы здесь не годятся вообще. Я использовал старый добрый метод ЗначениеВФайл(), передавая имя файла для записи результата как параметр вызываемой функции фонового задания. В этом случае по завершении всех заданий я обходил файлы по списку, получал результаты и обрабатывал.

Прошу не воспринимать мои замечания, как стремление обидеть или уязвить. Пришлось когда-то заниматься этим вопросом, а раз Вы хотите разобраться, то пара-тройка советов, думаю, будет не лишней:)
dammit666; Rustig; +2 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1161 29.06.20 07:08 Сейчас в теме
А что если использовать одну процедуру ФакториалДПоток при запуске фонового задания?
2. Rustig 1533 29.06.20 10:13 Сейчас в теме
(1) согласно синтакс-помощнику процедуры - обработчики фоновых заданий должны отличаться для фоновых заданий с одинаковым ключом. А ключ одинаковый мне нужен, чтобы фильтр наложить на ожидание одновременно завершающихся заданий.
В общем, я пробовал по разному - и текущий вариант оказался работоспособен.

Цитата из санткас-помощника:
<Ключ> (необязательный)
Тип: Строка.
Ключ задания. Если ключ задан, то он должен быть уникальным среди ключей активных фоновых заданий, имеющих такое же имя метода, что и у данного фонового задания.
3. echo77 1161 29.06.20 10:17 Сейчас в теме
(2) А что если сделать одну процедуру и разные ключи и ожидать завершения фоновых заданий с разными ключами?
4. Rustig 1533 29.06.20 10:21 Сейчас в теме
(3) в теории наверное так тоже можно - программировать придется больше проверок - проверять каждый запущенный фоновый процесс по ключу

просто одно дело теория, другое дело практика - я пока тестировал ряд фраз синтакс-помощника по разному "прочитывал" и натыкался на бездействие программы.

В итоге, сейчас на практике понял некоторые нюансы. Поэтому за нюансы вашего предложенного способа ручаться не могу, комментировать тоже. Тут надо один раз попробовать.

Надеюсь на силу сообщества - каждый внесет свою лепту в раздел "параллельных вычислений".
15. dusha0020 917 30.06.20 15:18 Сейчас в теме
Я кода-то делал подобные вещи, пытаясь ускорить расчеты в серверном режиме. Отсюда у меня ряд вопросов и замечаний:
1. Мне кажется намного удобнее делать количество потоков расчета параметром для вызываемой процедуры. Ядер и потоков на каждом сервере по разному, да и соображения управления нагрузкой не надо забывать.
2. Я бы, как указал echo77 в (1), не стал в таком случае флудить 4 или сколько еще функций расчета факториала, ибо количество потоков динамическое и сколько нужно функций не понятно. Достаточно и одной.
3. Ожидать завершения фоновых заданий можно не собирая их отбором по ключу, а сразу при запуске добавлять в массив. В этом случае нам не нужно будет их потом искать и плодить лишние функции для запуска разных заданий с одним ключом.
4. Как Вы правильно заметили, константы не могут содержать результат больше 32 разрядов. Ну и количество констант не может быть динамическим, определяемым переменной числа нужных потоков. В общем как по мне константы здесь не годятся вообще. Я использовал старый добрый метод ЗначениеВФайл(), передавая имя файла для записи результата как параметр вызываемой функции фонового задания. В этом случае по завершении всех заданий я обходил файлы по списку, получал результаты и обрабатывал.

Прошу не воспринимать мои замечания, как стремление обидеть или уязвить. Пришлось когда-то заниматься этим вопросом, а раз Вы хотите разобраться, то пара-тройка советов, думаю, будет не лишней:)
dammit666; Rustig; +2 Ответить
16. Rustig 1533 30.06.20 15:54 Сейчас в теме
(15) спасибо, вот про это не додумался:
3. Ожидать завершения фоновых заданий можно не собирая их отбором по ключу, а сразу при запуске добавлять в массив. В этом случае нам не нужно будет их потом искать и плодить лишние функции для запуска разных заданий с одним ключом.


а в остальном, все верно - и про константы и их замену на файл на жестком диске, и про параметр и одну функцию-обработчик - я уже позже домыслил реализацию, но не стал экспериментировать.
5. papami 30 29.06.20 17:47 Сейчас в теме
В БСП удобно все реализовано.
В Бух КОРП 3 дроблю проведение реализаций в разрезе подразделений (количество измеряется десятками) на 4 потока.
При этом 1 поток проводит 2,5 -3 часа, 4 потока - чуть больше часа. (~10000 документов в день)
Причем прибавлять ядра/потоки больше смысла нет, т.к. там уже в другом месте упирается.
6. Rustig 1533 29.06.20 17:53 Сейчас в теме
(5)
Причем прибавлять ядра


насколько я помню, дело не в кол-ве ядер...
и с одним ядром можно несколько рабочих процессов (потоков) запускать... за этим следит кластер серверов и платформа 1с. каждый фоновый процесс запускается в отдельном рабочем процессе.
9. papami 30 29.06.20 18:30 Сейчас в теме
(6)
с одним ядром можно несколько рабочих процессов (потоков) запускать...

Можно запускать, но вопрос в эффективности (я про производительность)
7. Rustig 1533 29.06.20 17:58 Сейчас в теме
(5) с проведением документов надо программировать непересекающиеся множества документов (записей в таблицах), чтобы не создавались блокировки записей в таблицах (документов)...
все-таки принцип проведения документов - особенно расчет себестоимости - основывается на последовательном проведении документов (или фиксации факта хоз.деятельности) - поэтому параллелить именно процесс проведения документов имеет ряд ограничений и нюансов...
8. papami 30 29.06.20 18:27 Сейчас в теме
10. Rustig 1533 29.06.20 19:27 Сейчас в теме
(5) все-таки научиться проводить документы в фоне (через фоновые задания) нельзя назвать задачей распараллеливания вычислений...
При проведении вы не ожидаете завершения фоновой задачи, чтобы произвести очередной расчет, и не используете полученные промежуточные результаты.
Для распараллеливания вычислений как раз и надо собрать все промежуточные результаты всех дочерних фоновых заданий и обработать их в родительском фоновом задании.

Для распараллеливания вам придется залезть в общий модуль конфигурации, дописать логику распараллеливания и сборки промежуточных результатов. А для типовой БП КОРП 3, я думаю это критично для последующих обновлений...

А вот запустить из внешней обработки длительную операцию перепроведения документов с отбором по подразделению - можно легко в БУХ КОРП 3...

Вы как реализовали свой метод?

Кто знает, заложена ли в БСП реализация разделения родительского фонового задания на дочерние и сборка промежуточных результатов?
11. papami 30 29.06.20 19:39 Сейчас в теме
(10)
Что-то Вы тут все как-то в кучу)
Дискуссия отнимет массу времени. Я пас.
13. Rustig 1533 29.06.20 19:46 Сейчас в теме
(11) все ок. можете не отвечать :)
я полагаю, что в БСП заложена модель , о которой я спрашиваю. Например из общего неглобального модуля происходит вызов процедуры из модуля внешней обработки - в модуле обработки можно прописать любую логику и функциональность. Задача решена! :)
12. tazhitkov 29.06.20 19:41 Сейчас в теме
А зачем такой факториал считать?
14. Rustig 1533 29.06.20 19:51 Сейчас в теме
(12) хочется написать мат.пакет алгоритмов для решения СЛАУ.
Начал с простого - с факториала. Изыскания привели к написанию двух публикаций.
Шаг за шагом изучаю возможности платформы.
17. TODD22 19 01.07.20 14:11 Сейчас в теме
(14)
хочется написать мат.пакет алгоритмов для решения СЛАУ.

Если ничего не путаю, 1С вроде в платформе что то реализовывала для решения СЛАУ.
Оставьте свое сообщение
Вопросы с вознаграждением