View Issue Details

IDProjectCategoryView StatusLast Update
0030435Open CASCADEOCCT:Modeling Algorithmspublic2019-04-27 13:08
Reporterifv Assigned Toifv  
PrioritynormalSeverityminor 
Status closedResolutionfixed 
Product Version7.4.0 
Target Version7.4.0Fixed in Version7.4.0 
Summary0030435: Improving performance of Approx_ComputeCLine
DescriptionAlgorithm, implemented in Approx_ComputeCLine (approximation of continuous parametric function) is wide used in projection algorithm.
Steps To Reproducetest perf moddata bug30435
TagsNo tags attached.
Test case numberperf/moddata/bug30435

Relationships

related to 0027651 assignedifv Modeling Algorithms - Add projection support in sewing pcurves handling 
related to 0027711 assignedmsv Modeling Algorithms - Blend-on-blend corrupts the shape 

Activities

git

2019-01-10 13:11

administrator   ~0081712

Branch CR30435 has been created by ifv.

SHA-1: 995e77f66621cd2f9e3370ba9d59bff9f1ab5302


Detailed log of new commits:

Author: ifv
Date: Thu Jan 10 13:07:01 2019 +0300

    0030435: Improving performance of Approx_ComputeCLine

git

2019-01-11 15:24

administrator   ~0081754

Branch CR30435 has been updated by ifv.

SHA-1: 027e964478c09a312c5942eb06bb3e500c459ec9


Detailed log of new commits:

Author: ifv
Date: Fri Jan 11 15:20:17 2019 +0300

    Fix regression 1

git

2019-01-15 16:48

administrator   ~0081786

Branch CR30435 has been updated forcibly by ifv.

SHA-1: 886844df71a7c4b3920fbd46520917aae331b4e4

git

2019-01-18 16:21

administrator   ~0081818

Branch CR30435 has been updated by ifv.

SHA-1: 00494f92e2ea7a98370de5f6c580abae58eccc15


Detailed log of new commits:

Author: ifv
Date: Fri Jan 18 16:14:56 2019 +0300

    Fix for performance problems (boolean volumemaker E4, E5, E6)

git

2019-01-21 16:22

administrator   ~0081852

Branch CR30435 has been updated by ifv.

SHA-1: adb7a48a2e5b314c383f3ec7d0aedb94d9b36acd


Detailed log of new commits:

Author: ifv
Date: Mon Jan 21 16:17:08 2019 +0300

    Fix for boolean volumemaker E6

Author: ifv
Date: Mon Jan 21 09:36:18 2019 +0300

    Revert "Fix for performance problems (boolean volumemaker E4, E5, E6)"
    
    This reverts commit 00494f92e2ea7a98370de5f6c580abae58eccc15.

git

2019-01-25 16:39

administrator   ~0081882

Branch CR30435 has been updated by ifv.

SHA-1: aa63e31beb706d6a860bbe8776bbee4c091ced70


Detailed log of new commits:

Author: ifv
Date: Fri Jan 25 16:32:58 2019 +0300

    Fix some bugs

git

2019-01-28 11:58

administrator   ~0081904

Branch CR30435 has been updated forcibly by ifv.

SHA-1: 1c9b639ff29a80171ffbf33b2d2d020b4c2d8b51

git

2019-01-29 17:41

administrator   ~0081919

Branch CR30435 has been updated forcibly by ifv.

SHA-1: 83cd458533ce0b45ee24dc5586c60c2aa25e6188

git

2019-02-05 15:23

administrator   ~0082037

Branch CR30435 has been updated forcibly by ifv.

SHA-1: c7e3522a5d38505f71227db84a1bee0b2f9700c5

ifv

2019-02-05 17:38

developer   ~0082038

Branch CR300435 is ready for review

See CR30435-master-IFV for test results

msv

2019-02-08 16:57

developer   ~0082092

src/Approx/Approx_ComputeCLine.gxx
- 414: incorrect comment
- 312: it seems must be "deg == mydegremin"

src/Approx/Approx_FitAndDivide.hxx
- 67: Actually myInvOrder is true by default, it is worth to tell it here.

src/IntTools/IntTools_EdgeEdge.cxx
- 228: please add comment for this code (copy from commit).

tests/perf/moddata/bug30435
- Put bug title along with its number.

tests/lowalgos/intss/bug27263
- Add check of length of the second curve.

What is the performance gain of this fix. Can you give some figures?

git

2019-02-15 16:31

administrator   ~0082199

Branch CR30435 has been updated forcibly by ifv.

SHA-1: c88524a3c114f34c196f4b4e843f722a5ef47269

git

2019-03-05 17:02

administrator   ~0082697

Branch CR30435 has been updated forcibly by ifv.

SHA-1: a12d40a5d15023fc4085fad1e8d9e1620d46c514

git

2019-04-02 12:19

administrator   ~0083356

Branch CR30435 has been deleted by ifv.

SHA-1: a12d40a5d15023fc4085fad1e8d9e1620d46c514

git

2019-04-05 17:14

administrator   ~0083441

Branch CR30435 has been created by ifv.

SHA-1: de9574633fe91ada6dfa35fea248123bc87b4c2a


Detailed log of new commits:

Author: ifv
Date: Thu Jan 10 13:07:01 2019 +0300

    0030435: Improving performance of Approx_ComputeCLine
    
    1. Approx_ComputeCLine.gxx, Approx_FitAndDivide.hxx, Approx_FitAndDivide2d.hxx, BRepFill_ComputeCLine.hxx
    It is base modification, which allows improve performance of approximation with help of Approx_ComputeCLine.
    
    2. ProjLib_ComputeApprox, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ProjectOnPlane
    It is additional modification of methods using Approx_ComputeCLine.
    
    3. BRepCheck_Face
    Small improvement of method Intersect(...), which intersects two wires on face.
    
    4. BRepTopAdaptor_FClass2d
    Impovement of treatment infinitely narrow faces.
    
    5. ChFi3d/ChFi3d_Builder_6.cxx
    Small improvement, which forbids extension of singular boundary of surface.
    It was TODO problem in tests/bugs/modalg_7/bug27711_3
    
    6. IntTools_EdgeEdge.cxx
    Improvement of performance for cases of searching common parts between line and analytical curve
    
    7. GeomliteTest_CurveCommands.cxx
    Adding Draw command fitcurve. This command is analog of approxcurve, but uses Approx_FitAndDivide algorithm.
    Mainly to have direct draw command for testing Approx_ComputeCLine.
    
    8. Extrema_ExtElC.cxx
    
    Treatment of case "infinite solutions" for extrema line-ellipse
    
    9. Modification of some tests according to new behavior of algorithm.
    
    10. tests/perf/moddata/bug30435
    Test for new improved algorithm.
    
    11. Implementation QAcommand OCC40435 in QABugs_20.cxx used in test bug30435

git

2019-04-08 11:37

administrator   ~0083476

Branch CR30435 has been updated forcibly by ifv.

SHA-1: 28d87c06bc7eadface8d9d3fe5de25b602b644df

ifv

2019-04-08 14:16

developer   ~0083520

CR30435 is ready for review.
Results is CR30435-master-IFV
Improving:
there are 14 tests with improving performance > then 50% (see CPU difference)
According to test perf moddata bug30435 improving of performance is
3.86 times for Win
4.375 for Lin

msv

2019-04-08 18:29

developer   ~0083537

Commit message:

>1. Approx_ComputeCLine.gxx, Approx_FitAndDivide.hxx, Approx_FitAndDivide2d.hxx, BRepFill_ComputeCLine.hxx
>It is base modification, which allows improve performance of approximation with help of Approx_ComputeCLine.
It is needed to point the main idea of changes.

>2. ProjLib_ComputeApprox, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ProjectOnPlane
>It is additional modification of methods using Approx_ComputeCLine.
It is needed to point the main idea of changes.

>11. Implementation QAcommand OCC40435 in QABugs_20.cxx used in test bug30435
Misprint OCC40435.

src/Approx/Approx_FitAndDivide.hxx and others:
- Make description of SetInvOrder the same in all headers.
- Please describe which value of InvOrder is used by default.

src/Extrema/Extrema_ExtElC.cxx
- replace tabs with spaces in the added code.

src/IntTools/IntTools_EdgeEdge.cxx
- replace tabs with spaces in the added code.

tests/perf/moddata/bug30435
- Give the second counter unique name like OCC30435_1.

Why the following test showed worse performance (both Windows and Linux)?
CPU ifc doc_1 B4: 2102.78125 / 830.6875 [+153.14%]

git

2019-04-19 11:44

administrator   ~0083875

Branch CR30435 has been updated forcibly by ifv.

SHA-1: 1eec944a238d99679e7a388a203e34c15624d6c4

ifv

2019-04-19 16:22

developer   ~0083883

CR30435 is ready for review

git

2019-04-22 14:10

administrator   ~0083929

Branch CR30435 has been updated forcibly by ifv.

SHA-1: ba7f665dce92eb21ac0031497558d14de17fa4d3

ifv

2019-04-22 16:10

developer   ~0083932

CR30435 is updated according to remarks

msv

2019-04-22 16:33

developer   ~0083934

Reviewed.

bugmaster

2019-04-22 19:21

administrator   ~0083936

Combination -
OCCT branch : CR30435
master SHA - ba7f665dce92eb21ac0031497558d14de17fa4d3
d67d4b811012eef8913d3c535c29654d0acf3c4c
Products branch : master SHA - 8518fc0ce61f27cb5fd038357f978ec6e3a20df5
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: 16328.27999999997 / 16536.609999999906 [-1.26%]
Products
Total CPU difference: 10520.86000000006 / 10546.95000000005 [-0.25%]
Windows-64-VC14:
OCCT
Total CPU difference: 17662.578125 / 17960.6875 [-1.66%]
Products
Total CPU difference: 12066.265625 / 12065.3125 [+0.01%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2019-04-27 13:08

administrator   ~0084028

Branch CR30435 has been deleted by inv.

SHA-1: ba7f665dce92eb21ac0031497558d14de17fa4d3

Related Changesets

occt: master ba7f665d

2019-01-10 10:07:01

ifv

Details Diff
0030435: Improving performance of Approx_ComputeCLine

1. Approx_ComputeCLine.gxx, Approx_FitAndDivide.hxx, Approx_FitAndDivide2d.hxx, BRepFill_ComputeCLine.hxx
It is base modification, which allows improve performance of approximation with help of Approx_ComputeCLine. The main idea of improvement is using degree selection by inverse order - from maxdegree to mindegree. If tolerance for maxdegree is not reached, there is no sense to make approximation for current number of knots with lower degree, it is necessary to cut parametric interval.

2. ProjLib_ComputeApprox, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ComputeApproxOnPolarSurface, ProjLib_ProjectOnPlane
It is additional modification of methods using Approx_ComputeCLine.
Mainly, modifications concern to more optimal choosing parameters for approximation algorithm.

3. BRepCheck_Face
Small improvement of method Intersect(...), which intersects two wires on face.

4. BRepTopAdaptor_FClass2d
Impovement of treatment infinitely narrow faces.

5. ChFi3d/ChFi3d_Builder_6.cxx
Small improvement, which forbids extension of singular boundary of surface.
It was TODO problem in tests/bugs/modalg_7/bug27711_3

6. IntTools_EdgeEdge.cxx
Improvement of performance for cases of searching common parts between line and analytical curve

7. GeomliteTest_CurveCommands.cxx
Adding Draw command fitcurve. This command is analog of approxcurve, but uses Approx_FitAndDivide algorithm.
Mainly to have direct draw command for testing Approx_ComputeCLine.

8. Extrema_ExtElC.cxx

Treatment of case "infinite solutions" for extrema line-ellipse

9. Modification of some tests according to new behavior of algorithm.

10. tests/perf/moddata/bug30435
Test for new improved algorithm.

11. Implementation QAcommand OCC30435 in QABugs_20.cxx used in test bug30435
Affected Issues
0030435
mod - src/Approx/Approx_ComputeCLine.gxx Diff File
mod - src/Approx/Approx_FitAndDivide.hxx Diff File
mod - src/Approx/Approx_FitAndDivide2d.hxx Diff File
mod - src/BRepCheck/BRepCheck_Face.cxx Diff File
mod - src/BRepFill/BRepFill_ComputeCLine.hxx Diff File
mod - src/BRepTopAdaptor/BRepTopAdaptor_FClass2d.cxx Diff File
mod - src/ChFi3d/ChFi3d_Builder_6.cxx Diff File
mod - src/Extrema/Extrema_ExtElC.cxx Diff File
mod - src/GeomliteTest/GeomliteTest_CurveCommands.cxx Diff File
mod - src/IntTools/IntTools_EdgeEdge.cxx Diff File
mod - src/ProjLib/ProjLib_ComputeApprox.cxx Diff File
mod - src/ProjLib/ProjLib_ComputeApproxOnPolarSurface.cxx Diff File
mod - src/ProjLib/ProjLib_ComputeApproxOnPolarSurface.hxx Diff File
mod - src/ProjLib/ProjLib_ProjectOnPlane.cxx Diff File
mod - src/QABugs/QABugs_20.cxx Diff File
mod - tests/bugs/mesh/bug30008_2 Diff File
mod - tests/bugs/modalg_7/bug27711_3 Diff File
mod - tests/de/step_4/D9 Diff File
mod - tests/de/step_4/E1 Diff File
mod - tests/lowalgos/intss/bug27263 Diff File
add - tests/perf/moddata/bug30435 Diff File

Issue History

Date Modified Username Field Change
2019-01-10 13:05 ifv New Issue
2019-01-10 13:05 ifv Assigned To => ifv
2019-01-10 13:06 ifv Relationship added related to 0027651
2019-01-10 13:07 ifv Status new => assigned
2019-01-10 13:11 git Note Added: 0081712
2019-01-11 15:24 git Note Added: 0081754
2019-01-15 16:48 git Note Added: 0081786
2019-01-18 16:21 git Note Added: 0081818
2019-01-21 16:22 git Note Added: 0081852
2019-01-25 16:39 git Note Added: 0081882
2019-01-28 11:58 git Note Added: 0081904
2019-01-29 17:41 git Note Added: 0081919
2019-02-05 15:23 git Note Added: 0082037
2019-02-05 17:38 ifv Note Added: 0082038
2019-02-05 17:38 ifv Assigned To ifv => msv
2019-02-05 17:38 ifv Status assigned => resolved
2019-02-05 17:38 ifv Steps to Reproduce Updated
2019-02-08 16:44 msv Relationship added related to 0027711
2019-02-08 16:57 msv Note Added: 0082092
2019-02-08 16:57 msv Assigned To msv => ifv
2019-02-08 16:57 msv Status resolved => assigned
2019-02-15 16:31 git Note Added: 0082199
2019-03-05 17:02 git Note Added: 0082697
2019-04-02 12:19 git Note Added: 0083356
2019-04-05 17:14 git Note Added: 0083441
2019-04-08 11:37 git Note Added: 0083476
2019-04-08 14:16 ifv Note Added: 0083520
2019-04-08 14:16 ifv Assigned To ifv => msv
2019-04-08 14:16 ifv Status assigned => resolved
2019-04-08 18:29 msv Note Added: 0083537
2019-04-08 18:30 msv Assigned To msv => ifv
2019-04-08 18:30 msv Status resolved => assigned
2019-04-19 11:44 git Note Added: 0083875
2019-04-19 16:22 ifv Note Added: 0083883
2019-04-19 16:22 ifv Assigned To ifv => msv
2019-04-19 16:22 ifv Status assigned => resolved
2019-04-22 11:20 msv Assigned To msv => ifv
2019-04-22 11:20 msv Status resolved => assigned
2019-04-22 14:10 git Note Added: 0083929
2019-04-22 16:10 ifv Note Added: 0083932
2019-04-22 16:10 ifv Assigned To ifv => msv
2019-04-22 16:10 ifv Status assigned => resolved
2019-04-22 16:33 msv Note Added: 0083934
2019-04-22 16:33 msv Assigned To msv => bugmaster
2019-04-22 16:33 msv Status resolved => reviewed
2019-04-22 19:17 bugmaster Test case number => perf/moddata/bug30435
2019-04-22 19:21 bugmaster Note Added: 0083936
2019-04-22 19:21 bugmaster Status reviewed => tested
2019-04-27 12:38 ifv Changeset attached => occt master ba7f665d
2019-04-27 12:38 ifv Assigned To bugmaster => ifv
2019-04-27 12:38 ifv Status tested => verified
2019-04-27 12:38 ifv Resolution open => fixed
2019-04-27 13:08 git Note Added: 0084028