¬аше окно в мир —јѕ–
 
Ќовости —татьи јвторы —обыти€ ¬акансии Ёнциклопеди€ –екламодател€м
—татьи

21 феврал€ 2020

ѕоддержка многопоточности в геометрическом €дре C3D

“ать€на ћитина, руководитель отдела программировани€ C3D Labs

“ать€на ћитина


ѕараллельные вычислени€ Ч наше будущее.
» так будет всегда!

Ёта стара€ программистска€ шутка напоминает о важности использовани€ многопоточности в приложени€х и о перспективах развити€ параллельных вычислений, а также намекает на сложности параллельного программировани€.

–аботы по организации многопоточной обработки данных в геометрическом €дре C3D начались несколько лет назад и активно продолжаютс€ сейчас.

ѕоддержка многопоточности в €дре C3D включает в себ€:

  • использование многопоточных вычислений в €дре;
  • обеспечение потокобезопасности €дра, которое кроме поддержки параллельных вычислений €дра также обеспечивает поддержку пользовательской многопоточности, т.е. обеспечивает безопасность использовани€ интерфейсов €дра в параллельных вычислени€х в пользовательском приложении.
ƒл€ организации внутренней многопоточности €дро C3D использует технологию OpenMP.

OpenMP Ч это открытый стандарт дл€ распараллеливани€ программ на €зыках —, —++ и Fortran, который реализуетс€ в той или иной степени большинством попул€рных компил€торов. ѕрименение технологии OpenMP дл€ оптимизации кода €дра C3D позвол€ет решить проблемы его кроссплатформенности и совместимости.

 омпил€торы обеспечивают поддержку OpenMP в разной степени. Ќапример, на данный момент компил€тор Intel —++ реализует OpenMP версии 4.5 и некоторое подмножество OpenMP версии 5.0, тогда как компил€тор Microsoft C++ обеспечивает поддержку только OpenMP версии 2.0.

ѕараллельные вычислени€ в €дре C3D

ќсновные многопоточные операции €дра включают в себ€:

  • построение плоских проекций;
  • расчет полигональных сеток;
  • расчет массо-центровочных характеристик;
  • операции конвертеров.
Ќо не ограничиваютс€ данным списком.
многопоточность в C3D

¬рем€ работы функции MassInertiaProperties() в разных режимах €дра

–еализаци€ параллельной обработки независимых данных, как правило, относительно проста и достаточно эффективна.

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

—амым простым способом €вл€етс€ использование блокировок, когда поток получает монопольный доступ к совместно используемым данным путем их блокировани€.
“акой пр€молинейный способ нередко ведет к росту времени ожидани€ на блокировках, что может свести на нет потенциальную выгоду от использовани€ параллельных вычислений, а иногда и замедлить вычислени€.

¬ €дре C3D эффективность параллельных вычислений и потокобезопасность объектов обеспечиваетс€ специальным механизмом Ч многопоточными кэшами.

ѕотокобезопасный доступ к объектам €дра
ќдним из методов оптимизации вычислений €вл€етс€ кэширование данных. ќно основано на предположении, что значени€ параметров, дл€ которых провод€тс€ вычислени€, не €вл€ютс€ произвольными, а подчин€ютс€ некоторой (предопределенной или статистически предсказуемой) закономерности. Ёто позвол€ет повторно использовать уже вычисленные ранее результаты.

»спользование кэшировани€ данных, обычно эффективное при последовательном выполнении вычислений, при параллельном выполнении может спровоцировать так называемые гонки данных, когда несколько потоков соперничают за обладание общими кэшированными данными.

ƒл€ решени€ проблемы потокобезопасного доступа к данным в €дре C3D реализовано и используетс€ многопоточное кэширование.

 ак работают многопоточные кэши
»спользование механизма многопоточных кэшей обеспечивает потокобезопасный доступ к данным объектов €дра и делает возможным эффективное распараллеливание вычислений в случа€х, когда данные обрабатываютс€ одновременно в нескольких потоках.

 аждый поток работает со своей копией кэшированных данных. Ёто предотвращает конкуренцию за данные между потоками и минимизирует использование блокировок.

”правл€ет многопоточными кэшами в конкретном объекте его менеджер кэшей, который отвечает за создание, хранение и выдачу кэшированных данных объекта дл€ текущего потока.

ћногопоточное кэширование эффективно работает как при последовательном выполнении вычислений, так и при параллельных вычислени€х. Ќесомненным плюсом €вл€етс€ и то, что переход к использованию многопоточных кэшей требует минимальной переработки кода.

–абота механизма многопоточных кэшей управл€етс€ переключением режима многопоточности €дра.

–ежимы многопоточности €дра
–ежим многопоточности €дра управл€ет механизмом потокобезопасности объектов €дра, а также определ€ет, какие операции в €дре будут распараллеливатьс€.

C3D может работать в следующих режимах:

  • –ежим Off Ч многопоточность €дра отключена. ¬се операции €дра выполн€ютс€ последовательно. ћеханизм, обеспечивающий потокобезопасность объектов €дра, отключен.
  • –ежим Standard Ч стандартный режим многопоточности. –аботает ограниченное распараллеливание операций €дра: распараллеливаютс€ только операции, обрабатывающие независимые данные. ћеханизм потокобезопасности объектов €дра отключен.
  • –ежим SafeItems Ч режим потокобезопасности объектов €дра, при котором включаетс€ механизм многопоточного кэшировани€, но по-прежнему работает ограниченное распараллеливание операций €дра. –азработан дл€ поддержки многопоточных операций в пользовательских приложени€х.
  • –ежим Items Ч максимальный режим многопоточности €дра, когда включен механизм многопоточного кэшировани€ и осуществл€етс€ распараллеливание всех операций €дра, где вычислени€ могут выполн€тьс€ параллельно.
C3D предоставл€ет пользовател€м возможность динамически измен€ть режим многопоточности €дра.

ќписание режимов многопоточности €дра C3D и менеджера многопоточных кэшей смотрите в онлайн-документации: https://c3d.ascon.ru/doc/math/tool__multithreading_8h.html.

ѕоддержка пользовательской многопоточности

–еализаци€ €дра ориентирована на поддержку многопоточного использовани€ интерфейсов €дра в пользовательских приложени€х.
 ак обеспечиваетс€ потокобезопасность €дра
¬се геометрические объекты €дра €вл€ютс€ потокобезопасными при условии использовани€ механизма многопоточного кэшировани€ (режим многопоточности не ниже SafeItems).

Ѕольшинство операций €дра (включа€ те, которые не €вл€ютс€ многопоточными) €вл€ютс€ потокобезопасными, то есть могут использоватьс€ в нескольких потоках, если используетс€ режим многопоточности не ниже SafeItems.

Ѕлокировки €дра реализованы на базе нативных механизмов синхронизации (таких как WinAPI на Windows и pthread API на Linux), что обеспечивает безопасность использовани€ интерфейсов €дра в пользовательских приложени€х, использующих различные механизмы распараллеливани€.

ядро C3D предоставл€ет интерфейсы дл€ уведомлени€ €дра о начале и конце параллельных вычислений, в которых используютс€ интерфейсы C3D.

¬ажно! ѕользовательское приложение, вызывающее интерфейсы C3D из нескольких потоков, должно уведомл€ть €дро о входе в параллельные вычислени€ и выходе из них.

ќписание интерфейсов синхронизации €дра C3D смотрите в онлайн-документации: https://c3d.ascon.ru/doc/math/tool__mutex_8h.html.

”правление режимами многопоточности €дра

C3D предоставл€ет пользовател€м возможность динамически мен€ть режим многопоточности €дра. »зменение режима многопоточности позвол€ет:

  • управл€ть потокобезопасностью объектов €дра (включать/выключать многопоточное кэширование);
  • определ€ть, какие операции €дра будут распараллеливатьс€ Ч все или только те, которые обрабатывают независимые данные.
 огда это может пригодитьс€? ¬ некоторых случа€х наличие внутренних параллельных циклов €дра может оказывать вли€ние на эффективность внешнего распараллеливани€ в пользовательском приложении.
¬ажно! Ќеобходимость переключени€ режима многопоточности €дра надо анализировать в каждом конкретном случае!

ќписание интерфейсов дл€ просмотра и управлени€ режимом многопоточности €дра C3D смотрите в онлайн-документации: https://c3d.ascon.ru/doc/math/class_math.html.

»спользование интерфейсов C3D в многопоточном приложении
ѕеред началом использовани€ интерфейсов C3D в нескольких потоках необходимо убедитьс€, что в €дре установлен режим многопоточности не ниже SafeItems. ѕо умолчанию €дро работает в максимальном режиме многопоточности.

ѕри использовании параллельных механизмов, отличных от OpenMP, пользовательское приложение об€зано уведомл€ть €дро о входе в параллельный регион и выходе из него.

ƒл€ этого может быть использован один из следующих способов:

  • класс ParallelRegionGuard (защитник параллельного региона в области видимости);
  • функции EnterParallelRegion и ExitParallelRegion;
  • макросы ENTER_PARALLEL и EXIT_PARALLEL.
многопоточность в C3D

ѕримеры уведомлени€ €дра о входе в параллельный регион и выходе из него

«аключение

ѕодведем итоги. ядро C3D активно использует внутренние многопоточные вычислени€. ќсобенностью €дра €вл€етс€ возможность выбора режимов многопоточности при осуществлении математических расчетов. ядро предоставл€ет пользовател€м возможность динамически мен€ть режим внутренней многопоточности.

ядро C3D поддерживает пользовательскую многопоточность, обеспечива€ потокобезопасность операций €дра и предоставл€€ потокобезопасный доступ к данным объектов €дра. ядро может быть сконфигурировано под особенности организации многопоточности в пользовательском приложении.


„итайте также:


¬акансии:

јктуальное обсуждение

RSS-лента комментариев

-->

ƒавид Ћевин
ƒавид Ћевин
ќт редактора: ”даленка мобилизует работающих в информационных технологи€х
ѕроект ЂЌародное —јѕ–-интервьюї

—лучайна€ стать€:

isicad Top 10

—амые попул€рные материалы

   ‘орумы isicad:

isicad-2010 isicad-2008
isicad-2006 isicad-2004

ќ проекте

ѕриглашаем публиковать на сайте isicad.ru новости и пресс-релизы о новых решени€х и продуктах, о проводимых меропри€ти€х и другую информацию. јдрес дл€ корреспонденции - info@isicad.ru

ѕроект isicad нацелен на

  • укрепление контактов между разработчиками, поставщиками и потребител€ми промышленных решений в област€х PLM и ERP...
ѕодробнее

»нформаци€ дл€ рекламодателей


¬се права защищены. © 2004-2020 √руппа компаний «Ћ≈ƒј—»

ѕерепечатка материалов сайта допускаетс€ с согласи€ редакции, ссылка на isicad.ru об€зательна.
¬ы можете обратитьс€ к нам по адресу info@isicad.ru.