Режимы многопоточности ядра
Режим многопоточности ядра управляет распараллеливанием операций ядра и механизмами потокобезопасности ядра. Он включает или отключает параллельность вычислений в ядре и включает или отключает механизмы, обеспечивающие потокобезопасность объектов и операций ядра (что важно при организации многопоточных вычислений в пользовательском приложении).
Режим многопоточности ядра определен как перечисление MbeMultithreadedMode в файле tool_multithreading.h.
Ядро может работать в следующих режимах:
mtm_Off – многопоточность ядра отключена. В этом режиме все операции выполняются последовательно. Механизм, обеспечивающий потокобезопасность объектов ядра, отключен.
mtm_Standard – в стандартном режиме многопоточности работает ограниченное распараллеливание операций ядра, а именно распараллеливаются только операции, обрабатывающие независимые данные. Механизм потокобезопасности объектов ядра отключен.
mtm_SafeItems – режим потокобезопасности объектов ядра. В этом режиме включается механизм многопоточного кэширования, но по-прежнему работает ограниченное распараллеливание операций ядра. Данный режим нужен для поддержки многопоточных вычислений в пользовательских приложениях.
mtm_Items – режим многопоточности объектов. В этом режиме включено полное распараллеливание операций ядра, то есть распараллеливаются операции, обрабатывающие как независимые, так и зависимые данные. Данный режим также может использоваться для поддержки многопоточных вычислений в пользовательских приложениях.
mtm_Max – включена максимальная многопоточность ядра. В настоящее время фактически совпадает с режимом mtm_Items.
По умолчанию в ядре установлен режим mtm_Max.
Ядро предоставляет интерфейсы для динамического изменения режима многопоточности ядра.
Интерфейсы для динамического изменения режима многопоточности ядра объявлены в файле mb_variables.h.
Для переключения между режимами многопоточности предназначены статические методы класса Math:
bool Multithreaded() – проверяет, включен ли режим mtm_Standard (работает ли распараллеливание).
void SetMultithreaded( bool b ) – если b == false, устанавливает режим mtm_Off (отключает многопоточность). Если b == true, устанавливает режим mtm_Standard (включает ограниченную многопоточность).
MbeMultithreadedMode MultithreadedMode() – возвращает текущий режим многопоточности.
bool CheckMultithreadedMode( MbeMultithreadedMode mode ) – проверяет, что текущий режим многопоточности не ниже mode.
void SetMultithreadedMode( MbeMultithreadedMode mode ) – устанавливает режим многопоточности mode.