Newsletter Subscribe

To subscribe for ASCON Newsletter, please, fill the data below.

Your personal information is confidential.
We use it only to send you ASCON Newsletter.

30.09.2016

Параллельное измерение C3D Labs и сотрудничество с Intel

Технологии 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
Многопоточное проецирование в C3D Toolkit 2016

ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ

В новой версии 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» в разных направлениях:

  1. void BetaMultithreaded0()
  2. {
  3.  
  4. <>
  5. < Собираем массив проецируемых тел lumps >
  6. < Задаём плэйсменты, определяющие направление проецирования places > < (в тестовом приложении это: вид сверху, фронтальный, слева и изометрия) >
  7. < Задаём параметры проецирования: перспектива znear и видимость visMode >
  8.  
  9. /// Создаём 4 массива следов по количеству направлений проецирования, так как в ::GetVestiges (...)
  10. int count = (int)places.Count();
  11. PArray<MbVEFVestiges>vestigesArray(count,1);
  12. for( int m = 0; m < count; m++ )
  13. vestigesArray.Add( new MbVEFVestiges() );
  14.  
  15. /// Устанавливаем максимальный уровень многопоточности
  16. MbeMultithreadedMode mode = Math::MultithreadedMode();
  17. Math::SetMultithreadedMode( mtm_Max );
  18.  
  19. /// Осуществляем многопоточное проецирование
  20. # pragma omp parallel for shared( znear, places, lumps, vestigesArray, visMode ) num_threads (count) if( Math::CheckMultithreadedMode(mtm_Max) )
  21. for( int m = 0; m < count; m++ )
  22. {
  23. MbProjectionsObjects prObjects;
  24. ::GetVestiges( places[m], znear, lumps, prObjects, *vestigesArray[m], visMode, Math::DefaultMathVersion() );
  25. }
  26.  
  27. /// Восстанавливаем уровень многопоточности
  28. Math::SetMultithreadedMode( mode );
  29.  
  30. < Используем полученные следы >
  31. }

Подробнее о технологиях C3D читайте в специальном разделе на нашем сайте: http://c3dlabs.com/ru/products/c3d-kernel/

Взять ядро на тестирование

О компании 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.


Input on a site

e-mail:
heslo:
  I do not remember the password.

Password restoration

e-mail:
To initiate the password reset process, please follow the instructions sent to your email address