91 lines
5.3 KiB
XML
91 lines
5.3 KiB
XML
|
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||
|
|
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
|
||
|
|
<compounddef id="namespaceserif_1_1utils_1_1parallel" kind="namespace" language="C++">
|
||
|
|
<compoundname>serif::utils::parallel</compoundname>
|
||
|
|
<innernamespace refid="namespaceserif_1_1utils_1_1parallel_1_1detail">serif::utils::parallel::detail</innernamespace>
|
||
|
|
<sectiondef kind="func">
|
||
|
|
<memberdef kind="function" id="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" noexcept="yes" virt="non-virtual">
|
||
|
|
<type>int</type>
|
||
|
|
<definition>int serif::utils::parallel::worker_count</definition>
|
||
|
|
<argsstring>() noexcept</argsstring>
|
||
|
|
<name>worker_count</name>
|
||
|
|
<qualifiedname>serif::utils::parallel::worker_count</qualifiedname>
|
||
|
|
<briefdescription>
|
||
|
|
<para>Workers an element loop may use: OpenMP's thread limit (OMP_NUM_THREADS), or 1 without OpenMP or inside an enclosing parallel region. </para>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
</detaileddescription>
|
||
|
|
<inbodydescription>
|
||
|
|
</inbodydescription>
|
||
|
|
<location file="src/lib/serif/backend/mfem/shared/parallel.cpp" line="12" column="9" bodyfile="src/lib/serif/backend/mfem/shared/parallel.cpp" bodystart="12" bodyend="18" declfile="src/include/serif/backend/mfem/shared/parallel.hpp" declline="16" declcolumn="10"/>
|
||
|
|
</memberdef>
|
||
|
|
<memberdef kind="function" id="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
||
|
|
<templateparamlist>
|
||
|
|
<param>
|
||
|
|
<type>typename BodyT</type>
|
||
|
|
</param>
|
||
|
|
</templateparamlist>
|
||
|
|
<type>void</type>
|
||
|
|
<definition>void serif::utils::parallel::for_each_index</definition>
|
||
|
|
<argsstring>(const int count, BodyT &&body)</argsstring>
|
||
|
|
<name>for_each_index</name>
|
||
|
|
<qualifiedname>serif::utils::parallel::for_each_index</qualifiedname>
|
||
|
|
<param>
|
||
|
|
<type>const int</type>
|
||
|
|
<declname>count</declname>
|
||
|
|
</param>
|
||
|
|
<param>
|
||
|
|
<type>BodyT &&</type>
|
||
|
|
<declname>body</declname>
|
||
|
|
</param>
|
||
|
|
<briefdescription>
|
||
|
|
<para>Call body(index, worker) once for every index in [0, count), possibly concurrently. </para>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
<para><simplesect kind="note"><para>Results do not depend on the thread count when each call writes only index-owned results and scratch owned by its worker (0 <= worker < <ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">worker_count()</ref>). Every index runs; the exception of the lowest throwing index is then rethrown, which is the one a serial loop would have raised. </para>
|
||
|
|
</simplesect>
|
||
|
|
</para>
|
||
|
|
</detaileddescription>
|
||
|
|
<inbodydescription>
|
||
|
|
</inbodydescription>
|
||
|
|
<location file="src/include/serif/backend/mfem/shared/parallel.hpp" line="32" column="10" bodyfile="src/include/serif/backend/mfem/shared/parallel.hpp" bodystart="32" bodyend="49"/>
|
||
|
|
</memberdef>
|
||
|
|
<memberdef kind="function" id="namespaceserif_1_1utils_1_1parallel_1a8e0e78d02ab6c49ae588644e579bed79" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
|
||
|
|
<type>void</type>
|
||
|
|
<definition>void serif::utils::parallel::element_transformation</definition>
|
||
|
|
<argsstring>(const ::mfem::Mesh &mesh, int element, ::mfem::IsoparametricTransformation &transformation)</argsstring>
|
||
|
|
<name>element_transformation</name>
|
||
|
|
<qualifiedname>serif::utils::parallel::element_transformation</qualifiedname>
|
||
|
|
<param>
|
||
|
|
<type>const ::mfem::Mesh &</type>
|
||
|
|
<declname>mesh</declname>
|
||
|
|
</param>
|
||
|
|
<param>
|
||
|
|
<type>int</type>
|
||
|
|
<declname>element</declname>
|
||
|
|
</param>
|
||
|
|
<param>
|
||
|
|
<type>::mfem::IsoparametricTransformation &</type>
|
||
|
|
<declname>transformation</declname>
|
||
|
|
</param>
|
||
|
|
<briefdescription>
|
||
|
|
<para>Mesh::GetElementTransformation(element, transformation), safe in concurrent element loops. </para>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
<para><simplesect kind="note"><para>MFEM's version gathers curved-mesh nodes through FiniteElementSpace::GetElementVDofs(int, Array&), which writes the space's shared mutable DofTransformation. This copy performs the same steps with a local DofTransformation, so the transformation and every value derived from it are identical. </para>
|
||
|
|
</simplesect>
|
||
|
|
</para>
|
||
|
|
</detaileddescription>
|
||
|
|
<inbodydescription>
|
||
|
|
</inbodydescription>
|
||
|
|
<location file="src/lib/serif/backend/mfem/shared/parallel.cpp" line="36" column="10" bodyfile="src/lib/serif/backend/mfem/shared/parallel.cpp" bodystart="36" bodyend="63" declfile="src/include/serif/backend/mfem/shared/parallel.hpp" declline="57" declcolumn="10"/>
|
||
|
|
</memberdef>
|
||
|
|
</sectiondef>
|
||
|
|
<briefdescription>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
</detaileddescription>
|
||
|
|
<location file="src/include/serif/backend/mfem/shared/parallel.hpp" line="11" column="1"/>
|
||
|
|
</compounddef>
|
||
|
|
</doxygen>
|