MantisBT
Mantis Bug Tracker Workflow

View Issue Details Jump to Notes ] Related Changesets ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0026365Open CASCADE[OCCT] OCCT:Foundation Classespublic2015-06-23 14:282021-05-29 13:12
Reporternbv 
Assigned Tobugmaster 
PrioritynormalSeverityminor 
StatusverifiedResolutionfixed 
PlatformOSOS Version
Product Version 
Target Version[OCCT] 7.6.0*Fixed in Version 
Summary0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface
DescriptionExisting OCCT parallelization algorithm (without TBB) requires using many system resources (it creates a thread for every parallel process) and much time (time spent on thread creation sometimes is much more than time for execution this thread).

It is not optimal and we need to recode this algorithm.
Steps To ReproduceNot required
Additional information
and documentation updates
1. See OSD_Parallel class. Especially, OSD_Parallel::For(...) member.

2. After the fix, please change the following fragment of BRepLib_CheckCurveOnSurface::Compute(...) method:

#ifdef HAVE_TBB
  OSD_Parallel::For(anIntervals.Lower(), anIntervals.Upper(), aComp);
#else
  ...
  OSD_Parallel::For(anIntervals.Lower(), anIntervals.Upper(), aComp, Standard_True);
#endif

should be replaced with
OSD_Parallel::For(anIntervals.Lower(), anIntervals.Upper(), aComp);
TagsNo tags attached.
Test case numberNot required
Attached Files

- Relationships
related to 0026506closedbugmaster Open CASCADE Change class BRepLib_CheckCurveOnSurface 
related to 0028931closedbugmaster Open CASCADE Eliminate dependency from TBB in OSD_Parallel header 
related to 0028199assignedski Open CASCADE Add possibility to set number of threads for parallel execution 
related to 0022146closedabv Open CASCADE Foundation Classes - Integration of OCC in-house parallelization tool 
related to 0029935closedbugmaster Open CASCADE Foundation Classes - introduce OSD_ThreadPool class defining a thread pool 
related to 0029059assignedasuraven Open CASCADE It is necessary to have a unique way of checking of the validity of the edge and its 2D curves 

-  Notes
(0042363)
msv (developer)
2015-06-23 15:41

Dear Andrey, please include this task in planning.
(0081722)
git (administrator)
2019-01-10 16:39

Branch CR26365 has been created by kgv.

SHA-1: 1984a15e669e7f8567d13956ed65a71966b72809


Detailed log of new commits:

Author: kgv
Date: Thu Jan 10 16:35:25 2019 +0300

    0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface
    
    Removed workaround within GeomLib_CheckCurveOnSurface.
(0081733)
kgv (developer)
2019-01-10 20:44

The issue with threads re-creation has been handled within patch for 0029935.

This bug describes the problem, but does not provide any reproducer nor numbers, so that it is difficult to check how parallelization affects performance in this particular case.

Patch CR26365 removes HAVE_TBB check; through it is desired verifying performance - hints / test cases are welcome.
(0081743)
msv (developer)
2019-01-11 09:32

Dear Nikolay, could you recommend the test cases to check performance of the considered code?
(0081744)
nbv (developer)
2019-01-11 10:11
edited on: 2019-01-11 10:53

Unfortunately I do not remember all problematic test cases. However, you can find the tests where following DRAW commands are used: "xdistef", "checkcurveonsurf".

Additionally, this algorithm has already been implemented in "bopargcheck" algorithm and in FACE/FACE intersection algorithm called from Boolean operation.

Please try to switch on Parallel mode option in corresponding test cases and check their performance.

(0081749)
msv (developer)
2019-01-11 10:48
edited on: 2019-01-11 10:48

Actually, this algorithm works each time when intersection of 2 faces is performed inside PaveFiller. I.e., during each Boolean operation. So, any BO test can be impacted by this change if HAVE_TBB is not defined.
There is another simple way to call this code from Draw, it is to run the command:

checkcurveonsurf shape

It will call this code for each pcurve of the shape.

I have another concern about this patch. BO has the option IsParallel. If the user does not set it to true he expects all the code will run in one thread. But the code of GeomLib_CheckCurveOnSurface is always called in multi-thread mode (the argument of Perform() method isTheMultyTheradDisabled = Standard_False).

So, in order to make consistent behavior of the code regarding the flag myRunParallel of BO, it is needed to pass this flag through the chain of calls BOPAlgo_PaveFiller::PerformFF() -> IntTools_FaceFace -> IntTools_Tools::ComputeTolerance() -> GeomLib_CheckCurveOnSurface::Perform().

I propose to include this change in the current patch.

(0081750)
msv (developer)
2019-01-11 11:10

My proposed above change can be done later in scope of another bug, e.g. linked 0028199. And the current patch is worth to be integrated as is.
(0081752)
msv (developer)
2019-01-11 11:14

For simplicity, please just run the standard tests to check the patch if there is no regressions in no HAVE_TBB mode.
(0083357)
git (administrator)
2019-04-02 12:39

Branch CR26365_1 has been created by kgv.

SHA-1: 35785ecaa27eee8a7e7a9b1cc466bf6fa4132655


Detailed log of new commits:

Author: kgv
Date: Thu Jan 10 16:35:25 2019 +0300

    0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface
    
    Removed workaround within GeomLib_CheckCurveOnSurface.
(0101367)
msv (developer)
2021-05-25 20:40

Dear Kirill, please rebase the patch and test it.
(0101395)
git (administrator)
2021-05-26 15:48

Branch CR26365_2 has been created by kgv.

SHA-1: 91c69af4983d19e5403a33c60984135c38b61ce8


Detailed log of new commits:

Author: kgv
Date: Thu Jan 10 16:35:25 2019 +0300

    0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface
    
    Removed workaround within GeomLib_CheckCurveOnSurface.
(0101402)
kgv (developer)
2021-05-26 17:34
edited on: 2021-05-26 17:35

Rebased patch has been pushed
- OCCT: branch CR26365_2.

http://jenkins-test-occt/view/CR26365_2-master-KGV/ [^]
(de/step_4/G6 is unstable on Jenkins within this week)

(0101407)
msv (developer)
2021-05-26 18:35

Please raise CR26365_2 into occt.
(0101473)
bugmaster (administrator)
2021-05-29 12:02

Combination -
OCCT branch : IR-2021-05-28
master SHA - 2315a044240803013da63dd2f5209c739ab03727
a87b7ddc8cb44606b91e3f37113847c3f5f50fdc
Products branch : IR-2021-05-28 SHA - 2131ac830b9e3c707d427f2aac9c50dcfa5c74db
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 17574.5700000004 / 17867.41000000037 [-1.64%]
Products
Total CPU difference: 11533.700000000124 / 11535.680000000108 [-0.02%]
Windows-64-VC14:
OCCT
Total CPU difference: 19393.5625 / 19367.75 [+0.13%]
Products
Total CPU difference: 12891.8125 / 12920.9375 [-0.23%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention
(0101484)
git (administrator)
2021-05-29 13:12

Branch CR26365 has been deleted by mnt.

SHA-1: 1984a15e669e7f8567d13956ed65a71966b72809
(0101485)
git (administrator)
2021-05-29 13:12

Branch CR26365_1 has been deleted by mnt.

SHA-1: 35785ecaa27eee8a7e7a9b1cc466bf6fa4132655
(0101486)
git (administrator)
2021-05-29 13:12

Branch CR26365_2 has been deleted by mnt.

SHA-1: 91c69af4983d19e5403a33c60984135c38b61ce8

- Related Changesets
occt: master 3738565a
Timestamp: 2019-01-10 13:35:25
Author: kgv
Committer: bugmaster
Details ] Diff ]
0026365: Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface

Removed workaround within GeomLib_CheckCurveOnSurface.
mod - src/BOPAlgo/BOPAlgo_CheckerSI.cxx Diff ] File ]
mod - src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx Diff ] File ]
mod - src/BOPTest/BOPTest_BOPCommands.cxx Diff ] File ]
mod - src/GeomLib/GeomLib_CheckCurveOnSurface.cxx Diff ] File ]
mod - src/IntTools/IntTools_FaceFace.cxx Diff ] File ]
mod - src/IntTools/IntTools_FaceFace.hxx Diff ] File ]
mod - src/IntTools/IntTools_Tools.cxx Diff ] File ]
mod - src/IntTools/IntTools_Tools.hxx Diff ] File ]

- Issue History
Date Modified Username Field Change
2015-06-23 14:28 nbv New Issue
2015-06-23 14:28 nbv Assigned To => msv
2015-06-23 14:32 nbv Relationship added related to 0025613
2015-06-23 15:41 msv Note Added: 0042363
2015-06-23 15:41 msv Assigned To msv => abv
2015-07-31 16:02 nbv Relationship added related to 0026506
2016-11-03 17:07 abv Target Version 7.1.0 => 7.2.0
2017-04-02 11:03 kgv Relationship added related to 0028531
2017-04-15 18:10 kgv Relationship added related to 0028657
2017-04-15 18:48 kgv Relationship deleted related to 0028657
2017-07-20 12:34 kgv Relationship added related to 0028199
2017-07-20 12:37 kgv Relationship added related to 0022146
2017-07-26 16:41 abv Target Version 7.2.0 => 7.4.0
2017-08-11 13:05 apv Test case number => Not required
2017-08-11 13:07 oan Relationship added related to 0028931
2018-07-07 02:32 kgv Relationship added related to 0029935
2019-01-10 16:38 kgv Summary Optimization of work of OSD_Parallel class members => Optimization of work of OSD_Parallel class members for GeomLib_CheckCurveOnSurface
2019-01-10 16:39 git Note Added: 0081722
2019-01-10 20:44 kgv Note Added: 0081733
2019-01-10 20:44 kgv Assigned To abv => msv
2019-01-10 20:44 kgv Status new => feedback
2019-01-11 09:31 msv Assigned To msv => nbv
2019-01-11 09:32 msv Note Added: 0081743
2019-01-11 10:04 msv Assigned To nbv => msv
2019-01-11 10:11 nbv Note Added: 0081744
2019-01-11 10:48 msv Note Added: 0081749
2019-01-11 10:48 msv Note Edited: 0081749 View Revisions
2019-01-11 10:53 nbv Note Edited: 0081744 View Revisions
2019-01-11 11:10 msv Note Added: 0081750
2019-01-11 11:14 msv Note Added: 0081752
2019-01-11 11:14 msv Assigned To msv => kgv
2019-01-11 11:14 msv Status feedback => assigned
2019-04-02 12:39 git Note Added: 0083357
2019-08-13 12:04 kgv Target Version 7.4.0 => 7.5.0
2020-09-11 16:13 utverdov Target Version 7.5.0 => 7.6.0*
2021-04-21 17:17 asuraven Relationship added related to 0029059
2021-05-25 20:40 msv Note Added: 0101367
2021-05-26 15:48 git Note Added: 0101395
2021-05-26 17:34 kgv Note Added: 0101402
2021-05-26 17:34 kgv Assigned To kgv => msv
2021-05-26 17:34 kgv Status assigned => resolved
2021-05-26 17:35 kgv Note Edited: 0101402 View Revisions
2021-05-26 18:35 msv Note Added: 0101407
2021-05-26 18:35 msv Assigned To msv => bugmaster
2021-05-26 18:35 msv Status resolved => reviewed
2021-05-29 12:02 bugmaster Note Added: 0101473
2021-05-29 12:02 bugmaster Status reviewed => tested
2021-05-29 12:12 bugmaster Changeset attached => occt master 3738565a
2021-05-29 12:12 bugmaster Status tested => verified
2021-05-29 12:12 bugmaster Resolution open => fixed
2021-05-29 13:12 git Note Added: 0101484
2021-05-29 13:12 git Note Added: 0101485
2021-05-29 13:12 git Note Added: 0101486


Copyright © 2000 - 2021 MantisBT Team
Powered by Mantis Bugtracker