Технологии C3D оптимизированы под архитектуру многоядерных процессоров
Команда C3D Labs приняла участие в конференции Intel Software Conference 2016, где представила программный инструментарий C3D Toolkit 2016 для разработчиков инженерного софта. Отличительной особенностью обновленного ПО является возможность выбора режимов многопоточности при осуществлении математических расчётов и обеспечение оптимальных показателей производительности за счёт расширенного использования вычислительных способностей многоядерных процессоров Intel.
Сотрудничество C3D Labs и корпорации Intel началось около года назад: был проведён анализ отдельных участков кода ядра C3D, поддающихся распараллеливанию, по итогам которого специалисты из Intel выступили с рекомендациями по доработке программного обеспечения C3D Labs. В рамках доклада «Истории успеха использования программных инструментов Intel» разработчик из Нижнего Новгорода Алексей Горячих представил промежуточные результаты C3D Labs в ускорении вычислений на многоядерных процессорах с использованием технологии OpenMP, а также подробно описал реализацию потокобезопасного доступа к геометрическим объектам ядра C3D.
Из доклада Алексея следует, что на сегодняшний день многопоточность в модулях ядра C3D реализована на двух уровнях:
- внутренние многопоточные вычисления;
- пользовательская многопоточность.
ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ
В новой версии C3D Toolkit 2016 появилась возможность не только включать/выключать многопоточность с использованием булевого флага, но и настраивать многопоточность для целого класса задач. Специально для этого были введены различные режимы MbeMultithreadedMode:
Режим |
Описание |
mtm_Off |
Многопоточность отключена |
mtm_Base |
Многопоточность в базовых алгоритмах (включена во все остальные режимы) |
mtm_Converters |
Многопоточность в конверторах |
mtm_Sections |
Многопоточный расчет сечений |
mtm_Items |
Многопоточный доступ к геометрическим объектам |
mtm_Solids |
Многопоточный доступ к телам (включает mtm_Items) |
mtm_Standard |
Многопоточность, соответствующая версии 16, включает mtm_Base, mtm_Converters, mtm_Sections |
mtm_Max |
Максимальный многопоточный режим |
По умолчанию в ядре C3D установлен режим mtm_Standard. Переключение межу режимами mtm_Standard и mtm_Base соответствует включению/выключению многопоточности в предыдущих версиях ядра C3D.
Для переключения между режимами многопоточности добавлены методы:
Метод |
Описание |
Предыдущие версии |
bool Math::Multithreaded() |
Проверяет, включен ли режим mtm_Standard |
Проверяет, включена ли многопоточность |
void Math::SetMultithreaded(bool b) |
Если b false, тогда отключает многопоточность (mtm_Off). Если b true, тогда устанавливает режим mtm_Standard |
Устанавливает многопоточность согласно b |
MbeMultithreadedMode Math::MultithreadedMode() |
Запрашивает режим многопоточности |
— |
bool Math::CheckMultithreadedMode(MbeMultithreadedMode mode) |
Проверяет режим многопоточности |
— |
void Math::SetMultithreadedMode(MbeMultithreadedMode mode) |
Включает режим многопоточности |
— |
ПОДДЕРЖКА ПОЛЬЗОВАТЕЛЬСКОЙ МНОГОПОТОЧНОСТИ
В результате оптимизации кода в C3D Toolkit 2016 расширены возможности по использованию многопоточности при работе с геометрическими объектами – кривыми и поверхностями. Дополнительно обеспечено потокобезопасное использование любых константных методов, а также методов, принимающих константный параметр для всех классов, кроме топологических объектов и классов, которые содержат подобные объекты (MbFaceShell, MbFace, MbOrientedEdge, MbCurveEdge, MbSolid…). Однако для данных классов потокобезопасен и доступен отдельный функционал, например, построение проекций вида ::GetVestiges (…).
Для использования собственной многопоточности необходимо установить максимальный многопоточный режим mtm_Max.
Разберём, какие параметры могут принимать одни и те же объекты в разных потоках на примере многопоточного построения проекций вида ::GetVestiges (…):
MATH_FUNC (void) GetVestiges ( const MbPlacement3D & place, double znear, const RPArray & lumps, const MbProjectionsObjects & objects, MbVEFVestiges & result const MbMapVisibilityMode & visMode, VERSION version = Math::DefaultMathVersion(), bool merge = true );
В данном случае максимальный режим многопоточности гарантирует, что передача по константной ссылке одних и тех же объектов будет реализована в разных потоках.
Следовательно, можно обеспечить потокобезопасное построение проекций одного набора тел «lumps» в разных направлениях:
void BetaMultithreaded0() { < … > < Собираем массив проецируемых тел lumps > < Задаём плэйсменты, определяющие направление проецирования places > (в тестовом приложении это: вид сверху, фронтальный, слева и изометрия) > < Задаём параметры проецирования: перспектива znear и видимость visMode > /// Создаём 4 массива следов по количеству направлений проецирования, так как в ::GetVestiges (...) int count = (int)places.Count(); PArray<MbVEFVestiges>vestigesArray(count,1); for( int m = 0; m < count; m++ ) vestigesArray.Add( new MbVEFVestiges() ); /// Устанавливаем максимальный уровень многопоточности MbeMultithreadedMode mode = Math::MultithreadedMode(); Math::SetMultithreadedMode( mtm_Max ); /// Осуществляем многопоточное проецирование # pragma omp parallel for shared( znear, places, lumps, vestigesArray, visMode ) num_threads (count) if( Math::CheckMultithreadedMode(mtm_Max) ) for( int m = 0; m < count; m++ ) { MbProjectionsObjects prObjects; ::GetVestiges( places[m], znear, lumps, prObjects, *vestigesArray[m], visMode, Math::DefaultMathVersion() ); } /// Восстанавливаем уровень многопоточности Math::SetMultithreadedMode( mode ); < Используем полученные следы > }
Подробнее о технологиях C3D читайте в специальном разделе на нашем сайте: https://c3dlabs.ru/products/c3d-toolkit/
О компании C3D Labs
C3D Labs — дочерняя компания группы компаний АСКОН, работает на наукоемком рынке PLM-компонентов. Компания создаёт и продвигает программные модули для разработки инженерного ПО, в частности, ядро геометрического моделирования C3D, лежащее в основе популярной системы трехмерного моделирования КОМПАС-3D. В 2013 году C3D Labs получила статус резидента инновационного центра Сколково. На сегодняшний день пользователями программных компонентов C3D Toolkit являются многие разработчики САПР и учебные заведения в России и за рубежом.
О конференции Intel Software Conference 2016
Intel Software Conference 2016 — это ежегодная конференция, посвященная инновационным моделям программирования и реализующим их инструментам разработки корпорации Intel.
Конференция ориентирована на профессионалов в области разработки ПО, специалистов по тестированию, архитекторов, руководителей групп разработки, ведущих преподавателей и научных сотрудников, а также экспертов и руководителей ИТ-индустрии.
Программа конференции включает в себя доклады специалистов Intel и партнёров по достижению максимальной эффективности в приложениях на последних архитектурах Intel, в том числе на новейших процессорах Intel Xeon и сопроцессорах Xeon Phi, а также эффективному использованию инструментов Intel на высокопроизводительных многоядерных и кластерных системах Intel.