Для ускорения расчёта алгоритма предусмотрена возможность использования многопоточного расчёта, позволяющего выполнять расчёт с помощью нескольких потоков, действующих одновременно.
Выполнение многопоточного расчёта происходит в несколько этапов:
Инициализация. На этапе инициализации для каждого потока создаётся своя коллекция отметок измерений источников данных для блоков расчёта. При однопоточном расчёте коллекция отметок измерений источников данных создаётся только один раз.
Примечание. При увеличении числа потоков, участвующих в многопоточном расчёте, увеличивается время, требуемое для выполнения этапа инициализации.
Расчёт. На этапе расчёта все коллекции отметок измерений источников данных распределяются по потокам, после чего каждый поток выполняет последовательный расчёт алгоритма для каждой отметки из коллекции.
По окончании выполнения действий на каждом этапе многопоточный расчёт завершается.
По умолчанию расчёт алгоритма выполняется в многопоточном режиме. При необходимости снимите флажок «Многопоточный расчет» на странице «Приёмник» в мастере редактирования блока расчёта для выполнения однопоточного расчёта блока или флажок «Многопоточный расчет» в окне «Настройка выполнения расчёта» для однопоточного расчёта всего алгоритма. Рекомендуется использовать однопоточный расчёт, если:
при расчёте алгоритма выполняются несложные арифметические операции и/или выполняются операции над справочниками с большим количеством элементов в отметке. В этом случае при использовании многопоточного расчёта создание коллекций отметок измерений источников данных может привести к излишним временным затратам, превышающим время самого расчёта;
в приёмниках данных блока расчёта содержатся параметры. В этом случае при использовании многопоточного расчёта на этапе инициализации для каждого потока, помимо коллекции отметок измерений источников данных, создаётся также коллекция параметров для расчёта. Из-за этого этап инициализации значительно замедляется и общее время многопоточного расчёта может превысить общее время однопоточного расчёта;
при задании фильтрации по данным в блоке расчёта количество рассчитываемых точек в источниках данных меньше количества потоков. Подробнее описано в подразделе «Многопоточный расчёт с настроенной фильтрацией по данным».
Если блок расчёта содержит формулы, вычисления которых выполняются в течение длительного времени, и количество итераций в формулах превышает число потоков, то используйте многопоточный расчёт для увеличения производительности и ускорения расчёта блока за счёт параллельного расчёта итераций. Многопоточный расчёт доступен на системах с многоядерными процессорами: число потоков равно числу ядер процессора.
Примечание. Использование многопоточного расчёта для блока расчёта доступно только при отметке хотя бы одного измерения приёмника данных.
По умолчанию при многопоточном расчёте используется максимум 8 потоков. Для изменения максимального числа потоков, по которым будет выполняться параллельный расчёт итераций, создайте параметр MsNumThreads типа DWORD и задайте ему значение в разделе реестра [HKEY_CURRENT_USER\Software\Foresight\Foresight Analytics Platform\9.0\Debug] на локальных компьютерах всех пользователей. Если заданное значение параметра меньше числа ядер процессора, то будет использоваться число потоков, заданное в параметре. Если заданное значение параметра больше числа ядер процессора, то будет использоваться число потоков, равное числу ядер.
Примечание. При указании параметра MsNumThreads учитывайте особенность архитектуры процессора Intel от 2019 года выпуска и выше. При расчёте итераций будет использоваться удвоенное число потоков относительно заданного значения параметра.
В случае совпадения одного из кубов-источников с кубом-приёмником блока расчёта при настройке фильтрации по данным флажок «Многопоточный расчет» на странице «Приёмник» в мастере редактирования блока расчёта и флажок «Многопоточный расчет» в окне «Настройка выполнения расчёта» будут проигнорированы и расчёт будет выполняться в однопоточном режиме. В противном случае многопоточный расчёт будет выполняться в соответствии с установленными флажками.
При заданной фильтрации по данным многопоточный расчёт будет происходить по данным в источниках, а не по отметке. Соответственно, разбиение по потокам будет происходить по точкам с данными в источниках. Производительность расчёта в этом случае будет зависеть от количества точек данных, изменяемых при расчёте. Если количество изменяемых точек данных будет меньше количества потоков, то многопоточный расчёт будет выполняться медленнее по сравнению с однопоточным, поскольку инициализация нескольких потоков требует дополнительного времени.
См. также:
Вопросы и ответы | Расчёт алгоритма | Выбор и настройка приёмника данных