Режимы многопоточности ядра

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

Режим многопоточности ядра определен как перечисление 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.