View Issue Details

IDProjectCategoryView StatusLast Update
0032539Open CASCADEOCCT:Modeling Algorithmspublic2021-12-13 14:56
Reporterasuraven Assigned Tosmoskvin  
PrioritynormalSeverityminor 
Status closedResolutionfixed 
Target Version7.6.0Fixed in Version7.6.0 
Summary0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm
DescriptionParallelize the algorithm to increase performance.
Add -parallel option to distmini DRAW command
Steps To Reproducenot required
TagsNo tags attached.
Test case numberperf\modalg\bug32539_1 perf\modalg\bug32539_2

Attached Files

  • CR32549 compare_1.xlsx (11,225 bytes)
  • bug32539_1.7z (163,659 bytes)

Relationships

related to 0031942 closedbugmaster Modeling Algorithms - add possibility to abort the BRepExtrema_DistShapeShape algorithm 
related to 0032552 closedsmoskvin Modeling Algorithms - BRepExtrema_DistShapeShape algorithm consumes too much memory 

Activities

asuraven

2021-08-19 13:40

developer   ~0103302

Last edited: 2021-08-23 11:33

asuraven

2021-08-23 18:48

developer   ~0103346

asuraven

2021-08-25 10:59

developer   ~0103429

asuraven

2021-08-25 18:59

developer   ~0103437

asuraven

2021-08-26 19:50

developer   ~0103442

git

2021-08-27 18:37

administrator   ~0103457

Branch CR32539 has been created by asuraven.

SHA-1: 8d42d728fdd923b068aba806df915407cd7aaf24


Detailed log of new commits:

Author: asuraven
Date: Fri Aug 27 18:34:31 2021 +0300

    0032539: Parallelize distance pair

Author: asuraven
Date: Fri Aug 27 13:06:02 2021 +0300

    0032539: using std::vector

Author: asuraven
Date: Thu Aug 26 18:41:05 2021 +0300

    0032539: Optimize vertex dist

Author: asuraven
Date: Wed Aug 25 21:19:00 2021 +0300

    0032539: Parallelize distance

Author: asuraven
Date: Wed Aug 25 12:23:13 2021 +0300

    0032539: Optimize vert/vert dist + throw to break

Author: asuraven
Date: Wed Aug 18 20:23:07 2021 +0300

    0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm

asuraven

2021-08-27 19:37

developer   ~0103458

git

2021-08-30 13:14

administrator   ~0103534

Branch CR32539 has been updated forcibly by asuraven.

SHA-1: 4382336060e3a7aa4b3f09aa942749c82f21b623

git

2021-08-30 13:59

administrator   ~0103535

Branch CR32539 has been updated forcibly by asuraven.

SHA-1: df96ada625c120cba4c348225402d565da933572

git

2021-08-30 14:07

administrator   ~0103536

Branch CR32539_1 has been created by asuraven.

SHA-1: ab714c353af012d5fa0bc1635ef5384676630447


Detailed log of new commits:

Author: asuraven
Date: Wed Aug 18 20:23:07 2021 +0300

    0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm

asuraven

2021-08-30 14:29

developer   ~0103537

Michael, could you please make your remarks for current issue's code

kgv

2021-08-30 15:12

developer   ~0103539

Last edited: 2021-08-30 15:12

> RAM using, MB
> BRepExtrema_DistShapeShape::Perform() time, s
These metrics are confusing without description of testing methodology.
Please clarify which counter has been collected for "RAM using" - "meminfo heap", "meminfo wset", or something else?

Why there is such a huge memory consumption difference compared to master (2.9 GB -> 152 MB)?

> master/single
Normally, comparison chart should show a change from old (current) to new (patch), while your table shows the opposite.

git

2021-08-30 16:07

administrator   ~0103550

Branch CR32539 has been updated forcibly by asuraven.

SHA-1: f3f1887f5a605226bd0536534754a01a4d3f56e1

git

2021-08-30 16:07

administrator   ~0103551

Branch CR32539_1 has been updated forcibly by asuraven.

SHA-1: ec63dc41ad2538e12a5a8e1977ae69db2f48470e

asuraven

2021-08-30 17:34

developer   ~0103552

> Why there is such a huge memory consumption difference compared to master (2.9 GB -> 152 MB)?
This difference is so big because the new function DistanceVertVert() is being used instead DistanceMapMap(). The DistanceVertVert() function does not create a map of distances between points of a very large (n^2) size

asuraven

2021-08-30 17:35

developer  

CR32549 compare_1.xlsx (11,225 bytes)

kgv

2021-08-30 22:48

developer   ~0103565

-                                             const Message_ProgressRange& theRange = Message_ProgressRange());
+                                             const Message_ProgressRange& theRange = Message_ProgressRange(),
+                                             const Standard_Boolean theIsMultiThread = Standard_False);

I doubt that it is worth overloading class constructor further - user would better using an empty constructor and Perform() method.

-  Standard_EXPORT Standard_Boolean Perform(const Message_ProgressRange& theRange = Message_ProgressRange());
+  Standard_EXPORT Standard_Boolean Perform(const Message_ProgressRange& theRange = Message_ProgressRange(),
+                                           const Standard_Boolean theIsMultiThread = Standard_False);

It is unusual passing multithreaded parameter to Perform() method and making any arguments after Progress Indicator.
I guess that storing multithreading flag as class argument defined by a dedicated setter would be better.

+    myMutex.reset(new Standard_HMutex());
...
+    myMutex = NULL;

myMutex is a normal Handle object - .Nullify() and normal assignment is a preferred syntax for Handles.

+  VertexTask(Standard_Integer theFirtsIndex,
+             Standard_Integer theLastIndex,
+             std::vector<BRepExtrema_SolutionElem>* theSolutionsShape1,
+             std::vector<BRepExtrema_SolutionElem>* theSolutionsShape2,
+             const TopTools_IndexedMapOfShape* theMap1,
+             const TopTools_IndexedMapOfShape* theMap2,
+             const std::vector<Bnd_Box>* theLBox1,
+             const std::vector<Bnd_Box>* theLBox2,
+             const Message_ProgressRange theRange,
+             Standard_Boolean* theIsBreak,
+             Standard_Real* theDistRef,
+             Standard_Real theEps,
+             Handle(Standard_HMutex) theMutex)

This constructor is completely unreadable - please define individual properties setters instead.

+
+  Standard_Integer myFirtsIndex;
+  Standard_Integer myLastIndex;
+  std::vector<BRepExtrema_SolutionElem>* mySolutionsShape1;

Public structure fields are normally named without "my" prefix and starts with upper case.

+        Standard_Atomic_CompareAndSwap((int*) *theTask.myIsBreak, Standard_False, Standard_True);

You shouldn't reinterpret cast a "bool" type (1 byte) to "int" (4 bytes).
Practically speaking there is no much benefit in using Standard_Atomic_CompareAndSwap here at all for a trivial assignment, as returned value is never used.
Assignments to bool and 32-bit types are always written/read atomically on all modern CPU architectures even without explicit atomic operations.
Moreover your then accesses to variable without any atomic operations.
This would work as expected just by declaring a variable "volatile" just to avoid compiler overoptimization in a loop,
which is still a valid use case for a volatile keyword in C++20 (apart from it's deprecation in C++ for some other cases).

+          else if (fabs(aDistTool.DistValue() - myDistRef) < myEps)
...
+        if (aDist < myDistRef - myEps || fabs (aDist - myDistRef) < myEps)

Abs()

+  if (myMutex.IsNull())
+  {
+  Message_ProgressRange aBoxRange(aTwinScope.Next());
+    Message_ProgressScope aBoxScope(aBoxRange, NULL, aCount1);

Broken indentation.

+    OSD_Parallel::ForEach(aTaskArray.begin(), aTaskArray.end(), DistancePairFunctor(), Standard_False);

Why using ForEach() instead of preferred For() for an array collection?

+      const gp_Pnt& aPnt = BRep_Tool::Pnt(aVertex);

Unexpected reference to returned temporary variable.

+    SolidTreatmentMulty(theShape, theVertexMap, theRange);

Multi?

+        if ((*it).Dist() > myDistRef + myEps)

it->Dist()

+  if (n >= 5 && strncmp(a[4], "-", 1))

Please avoid implicit cast of integer to bool.

+  Standard_Boolean anIsMultiThread = Standard_False;

isMultiThread

-  BRepExtrema_SeqOfSolution SeqSolShape1;
-  BRepExtrema_SeqOfSolution SeqSolShape2;
+  std::vector<BRepExtrema_SolutionElem> SeqSolShape1;
+  std::vector<BRepExtrema_SolutionElem> SeqSolShape2;

Why this change is necessary in this patch?
I haven't found any indexed access to these collections within multi-threaded code.
Iteration loop within TRI_SOLUTION could be trivially replaced by BRepExtrema_SeqOfSolution::Iterator.

kgv

2021-08-30 22:50

developer   ~0103566

> This difference is so big because the new function DistanceVertVert() is being used instead DistanceMapMap().
> The DistanceVertVert() function does not create a map of distances between points of a very large (n^2) size
This change looks localized, so it would be worthwhile extracting it to a separate bug.

msv

2021-09-01 17:49

developer   ~0103642

src/BRepCheck/BRepCheck_Analyzer.cxx
The changes are not relevant.

src/BRepTest/BRepTest_ExtremaCommands.cxx
  if (n >= 5 && strncmp(a[4], "-", 1))

Use a[4][0] != '-' instead of strncmp

  for (Standard_Integer anAI = 4; anAI < n; anAI++)

If deflection parameter is given then anAI must start from 5.

    for (Standard_Integer i1 = 0; i1 < dst.NbSolution(); i1++)

You must not change the index of the first solution.

src/BRepExtrema/BRepExtrema_DistShapeShape.cxx

Do not change sequence to vector. It is better to use NCollection_IncAllocator to initialize sequence in order to facilitate its destruction.

The flag myIsBreak is not needed. You may always get it from any progress scope.

  if (theIsMultiThread && myMutex.IsNull())
  {
    myMutex.reset(new Standard_HMutex());
  }
  else
  {
    myMutex = NULL;
  }

The logic is incorrect: if theIsMultiThread is true and myMutex is not null myMutex will be nullified.

asuraven

2021-09-01 18:35

developer   ~0103645

asuraven

2021-09-03 20:25

developer   ~0103740

asuraven

2021-09-06 18:57

developer   ~0103876

asuraven

2021-09-07 19:11

developer   ~0103903

asuraven

2021-09-08 20:16

developer   ~0103931

git

2021-09-09 13:06

administrator   ~0103935

Branch CR32539_3 has been created by asuraven.

SHA-1: 15b0446033f94179a66a1ee80f1f96e92c6351f9


Detailed log of new commits:

Author: asuraven
Date: Wed Sep 8 18:34:28 2021 +0300

    0032539: ForEach -> For: DistancePair

Author: asuraven
Date: Wed Sep 8 18:41:11 2021 +0300

    0032539: Debug log

Author: asuraven
Date: Wed Sep 8 17:18:11 2021 +0300

    0032539: ForEach -> For: stage 1

Author: asuraven
Date: Tue Sep 7 14:20:30 2021 +0300

    0032539: change DistanceTask order

Author: asuraven
Date: Fri Sep 3 20:29:32 2021 +0300

    0032539: fix remarks 1

Author: asuraven
Date: Wed Aug 18 20:23:07 2021 +0300

    0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm

git

2021-09-10 15:07

administrator   ~0103986

Branch CR32539_3 has been updated forcibly by asuraven.

SHA-1: b91ea2b8477f949136f6cbeadca4e3758f71e15b

asuraven

2021-09-10 19:20

developer   ~0103991

asuraven

2021-09-13 18:02

developer   ~0104066

asuraven

2021-09-14 19:34

developer   ~0104080

git

2021-09-20 17:30

administrator   ~0104238

Branch CR32539_5 has been created by asuraven.

SHA-1: 7cebe097771dae0d93186d5457d80f99e6d8467e


Detailed log of new commits:

Author: asuraven
Date: Wed Aug 18 20:23:07 2021 +0300

    0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm

asuraven

2021-09-20 17:33

developer  

bug32539_1.7z (163,659 bytes)

git

2021-09-21 13:44

administrator   ~0104257

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: 8465baf152af477b1c6488d43716e3e9e91e01c9

asuraven

2021-09-21 15:08

developer   ~0104260

git

2021-09-21 16:46

administrator   ~0104271

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: 015a5e33d454fff30e1ba80386c89c891c5ad203

git

2021-09-21 18:33

administrator   ~0104275

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: 92309d7f94712383c962f29ce2c836c4f18a2f8c

git

2021-09-22 11:39

administrator   ~0104287

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: 7b8ec84d792c7a9759d9a742aaf9b4abc46bb3ff

asuraven

2021-09-22 15:31

developer   ~0104290

Kirill, please review the branch CR32539_5
Tests results are here:
http://jenkins-test-occt/view/CR32539_5-master-ASURAVEN/view/COMPARE/

kgv

2021-09-23 11:14

developer   ~0104308

   }
+  //! If isMultiThread == Standard_True then computation will be performed in parallel.
+  void SetMultiThread(Standard_Boolean theIsMultiThread)
+  {
+    myIsMultiThread = theIsMultiThread;
+  }

While adding a setter, please add getter as well with documented default value.
Methods should be separated by an empty line.

+  const Message_ProgressRange& myRange;

Such class fields will generate compiler warnings due to inability to generate assign operator.
Please either use "const Message_ProgressRange*" or ensure to explicitly remove assign operator / copy constructor marked with Standard_DELETE attribute.
Why this myRange is necessary at all? It is a misconception storing it as a class field, and it seems to be unsued anyway.

+  //! isMultiThread - computation will be performed in parallel if Standard_True
   Standard_EXPORT Standard_Boolean Perform(const Message_ProgressRange& theRange = Message_ProgressRange());

Method doesn't have such argument.

+  //! Parameters F and A are not used in computation and are obsolete. 
   Standard_EXPORT BRepExtrema_DistShapeShape(const TopoDS_Shape& Shape1,

Please use Doxygen tags @param to document arguments and make sure that all arguments are documented.

-      BoxCalculation (myMapV1, myBV1);
-      BoxCalculation (myMapE1, myBE1);
-      BoxCalculation (myMapF1, myBF1);
+      BoxCalculation(myMapV1, myBV1);
+      BoxCalculation(myMapE1, myBE1);
+      BoxCalculation(myMapF1, myBF1);

Unrelated and unexpected change.

 }
 
+
+
 //=======================================================================

Please don't add more than a single empty line between blocks.

+    for (Standard_Integer i = 0; i < ArrayOfArrays->Value(theIndex).Size(); i++)
+    {
+      if (!aScope.More())
+      {
+        break;
+      }
...
+      if (*IsDone)
+      {
+        break;
+      }

`return` will be clear in this context than `break`.

kgv

2021-09-23 13:49

developer   ~0104310

git

2021-09-23 14:01

administrator   ~0104311

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: c38874189330112189e5dc4efb62698d5ca27f76

asuraven

2021-09-23 14:02

developer   ~0104312

Remarks fixed

git

2021-09-27 11:42

administrator   ~0104391

Branch CR32539_5 has been updated forcibly by asuraven.

SHA-1: cd349df9d8033a84c4c713ee30bc650a0508ddcd

asuraven

2021-09-27 13:32

developer   ~0104397

new tests results: http://jenkins-test-occt/view/CR32539_5-master-ASURAVEN/view/COMPARE/

msv

2021-09-28 12:44

developer   ~0104414

src/BRepExtrema/BRepExtrema_DistShapeShape.hxx
- Misprint in "@aparam"
- Declare the method IsMultiThread as const.

src/BRepExtrema/BRepExtrema_DistShapeShape.cxx
//struct   : IndexRange

IndexRange -> IndexBand

        TopoDS_Vertex aVertex1 = TopoDS::Vertex(Map1->FindKey(anIdx1));
        TopoDS_Vertex aVertex2 = TopoDS::Vertex(Map2->FindKey(anIdx2));

Use "const TopoDS_Vertex&".

Line 192: Move definition of aVertex1 and aPoint1 out of inner loop.

  Standard_Integer aNbTasks = aNbThreads;
  ...
  Standard_Integer aNbPairTasks = aNbThreads;
  ...
    Standard_Integer aNbTasks = aMapSize < aNbThreads ? aMapSize : aNbThreads;
    ...
  Standard_Integer aNbTasks = aNbThreads * 10;

In order to get well balanced work of threads the number of tasks must be greater than the number of threads. So, I consider the last variant is correct, and the others must be corrected accordingly.

    if (aCount1 < aFirstIndex + 2*aTaskSize - 1)

Why "2*"? It ruins the logic.

      if (IsDone[theIndex])
      {
        return;
      }

In this place IsDone[theIndex] cannot be true, so this check is redundant. Moreover, I see the field IsDone is not used nowhere else and can be removed.

        if (aDist < anEpsDist || Abs(aDist - DistRef) < Eps)

This can be simplified "aDist < DistRef + Eps"

  Message_ProgressScope aTwinScope(theRange, NULL, 1.0);

aTwinScope is advanced on the value 1+0.7, so in constructor 1.7 is expected.

  Message_ProgressRange aBoxRange(aTwinScope.Next());
  Message_ProgressScope aBoxScope(aBoxRange, NULL, aNbPairTasks);
  DistancePairFunctor aPairFunctor(&aBandArray, aBoxScope.Next());

aBoxScope is extra level, aTwinScope.Next() can be used to init aPairFunctor.

    Message_ProgressRange aDistRange(aTwinScope.Next(0.7));
    Message_ProgressScope aDistScope(aDistRange, NULL, 1);
    DistanceFunctor aFunctor(&anArrayOfArray, aDistScope.Next());

aDistScope is extra level, aTwinScope.Next(0.7) can be used to init aPairFunctor.

  NCollection_Vector<BRepExtrema_CheckPair> aPairList;

It is better to not create container if the pair list is empty. I propose to count the number of pairs and if it is not zero then create Array1 and fill it in.

    Standard_Integer aLastRowLimit = ((aMapSize % aNbTasks) == 0) ? aNbTasks : (aMapSize % aNbTasks);
    for (Standard_Integer anI = 0; anI < aTaskSize; ++anI)

This loop (at line 547) has incorrect logic. I cannot understand it.

      else if (Abs(aDist - myDistRef) < myEps)
      {
        mySolutionsShape1.Append(aFunctor.Solution.Shape1[anI]);
        mySolutionsShape2.Append(aFunctor.Solution.Shape2[anI]);
        myDistRef = aDist;
      }

At line 602, you must update myDistRef only if it is greater than aDist, as it is in master.

  const TopoDS_Shape*                        Shape;

No need to pass a shape by pointer, it is better to use value.

      Message_ProgressRange aRange = aScope.Next();

aRange is not used.

    Scope(theRange, "Vertices distances calculating", theBandArray->Size()),

The name of scope is not relevant in case of DistancePairFunctor and TreatmentFunctor.

        Standard_Mutex::Sentry aLock(Mutex.get());

Mutex is null handle and not initialized. I see no reason to use handle here. The simple mutex is enough.

msv

2021-09-28 12:44

developer   ~0104415

git

2021-09-29 13:51

administrator   ~0104425

Branch CR32539_6 has been created by asuraven.

SHA-1: 99aa57b6edc11856da8ce62d2de83290784d06eb


Detailed log of new commits:

Author: asuraven
Date: Wed Aug 18 20:23:07 2021 +0300

    0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm

asuraven

2021-09-30 14:34

developer   ~0104453

Last edited: 2021-10-04 14:58

fixed in branch CR32539_6
test results: http://jenkins-test-occt.nnov.opencascade.com/view/CR32539_6-master-ASURAVEN/view/COMPARE/

msv

2021-09-30 21:35

developer   ~0104459

        if (aDist < DistRef + Eps)

It is better to subtract the similar values: "aDist - DistRef < Eps"

  Message_ProgressRange aBoxRange(aTwinScope.Next(0.15));

This variable is not used.

  if(aPairFunctor.IsListEmpty())
  {
    return Standard_True;
  }
  NCollection_Vector<BRepExtrema_CheckPair> aPairList;

It is better to count the number of pairs instead of simply defining if the list is empty. Then create NCollection_Array1 instead of vector.

git

2021-10-01 13:03

administrator   ~0104464

Branch CR32539_6 has been updated forcibly by asuraven.

SHA-1: 3383f40bea0b6531c58e7e514991a965bd8671cf

asuraven

2021-10-01 15:32

developer   ~0104465

Last edited: 2021-10-04 14:58

fixed, tests rerunned

msv

2021-10-01 19:10

developer   ~0104467

For integration:
occt - CR32539_6
products - none

smoskvin

2021-10-02 10:36

administrator   ~0104487

Combination -
OCCT branch : IR-2021-10-01
master SHA - 0f05f21194a6711251182a118643efc9eb6c322b
49e51745631c52b6c452c65adae4d6dfa21a1b1e
Products branch : IR-2021-10-01 SHA - a7a409985492330e4f25011465bc659dfe7d7562
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: 17464.590000000462 / 17476.150000000354 [-0.07%]
Products
Total CPU difference: 11405.930000000111 / 11390.180000000097 [+0.14%]
Windows-64-VC14:
OCCT
Total CPU difference: 19332.171875 / 19335.34375 [-0.02%]
Products
Total CPU difference: 12772.859375 / 12782.828125 [-0.08%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2021-12-13 14:56

administrator   ~0105861

Branch CR32539 has been deleted by kgv.

SHA-1: f3f1887f5a605226bd0536534754a01a4d3f56e1

git

2021-12-13 14:56

administrator   ~0105862

Branch CR32539_1 has been deleted by kgv.

SHA-1: ec63dc41ad2538e12a5a8e1977ae69db2f48470e

git

2021-12-13 14:56

administrator   ~0105863

Branch CR32539_3 has been deleted by kgv.

SHA-1: b91ea2b8477f949136f6cbeadca4e3758f71e15b

git

2021-12-13 14:56

administrator   ~0105864

Branch CR32539_5 has been deleted by kgv.

SHA-1: cd349df9d8033a84c4c713ee30bc650a0508ddcd

git

2021-12-13 14:56

administrator   ~0105865

Branch CR32539_6 has been deleted by kgv.

SHA-1: 3383f40bea0b6531c58e7e514991a965bd8671cf

Related Changesets

occt: master 0f05f211

2021-08-18 17:23:07

asuraven


Committer: smoskvin Details Diff
0032539: Modeling Algorithms - Parallelize BRepExtrema_DistShapeShape algorithm Affected Issues
0032539
mod - src/BRepExtrema/BRepExtrema_DistanceSS.cxx Diff File
mod - src/BRepExtrema/BRepExtrema_DistShapeShape.cxx Diff File
mod - src/BRepExtrema/BRepExtrema_DistShapeShape.hxx Diff File
mod - src/BRepTest/BRepTest_ExtremaCommands.cxx Diff File
add - tests/perf/modalg/bug32539_1 Diff File
add - tests/perf/modalg/bug32539_2 Diff File

Issue History

Date Modified Username Field Change
2021-08-17 17:32 asuraven New Issue
2021-08-17 17:32 asuraven Assigned To => asuraven
2021-08-17 17:33 asuraven Relationship added related to 0031942
2021-08-18 18:33 szy Target Version Unscheduled => 7.6.0
2021-08-18 18:33 szy Status new => assigned
2021-08-19 13:40 asuraven Note Added: 0103302
2021-08-23 11:33 szy Note Edited: 0103302
2021-08-23 18:48 asuraven Note Added: 0103346
2021-08-25 10:59 asuraven Note Added: 0103429
2021-08-25 18:59 asuraven Note Added: 0103437
2021-08-26 19:50 asuraven Note Added: 0103442
2021-08-27 18:37 git Note Added: 0103457
2021-08-27 19:37 asuraven Note Added: 0103458
2021-08-30 13:14 git Note Added: 0103534
2021-08-30 13:59 git Note Added: 0103535
2021-08-30 14:07 git Note Added: 0103536
2021-08-30 14:25 asuraven File Added: CR32549 compare_1.xlsx
2021-08-30 14:29 asuraven Note Added: 0103537
2021-08-30 14:29 asuraven Assigned To asuraven => msv
2021-08-30 14:29 asuraven Status assigned => feedback
2021-08-30 15:12 kgv Note Added: 0103539
2021-08-30 15:12 kgv Note Edited: 0103539
2021-08-30 16:07 git Note Added: 0103550
2021-08-30 16:07 git Note Added: 0103551
2021-08-30 17:34 asuraven Note Added: 0103552
2021-08-30 17:35 asuraven File Deleted: CR32549 compare_1.xlsx
2021-08-30 17:35 asuraven File Added: CR32549 compare_1.xlsx
2021-08-30 22:48 kgv Note Added: 0103565
2021-08-30 22:50 kgv Note Added: 0103566
2021-09-01 17:49 msv Note Added: 0103642
2021-09-01 18:20 msv Assigned To msv => asuraven
2021-09-01 18:20 msv Status feedback => assigned
2021-09-01 18:35 asuraven Note Added: 0103645
2021-09-01 18:35 asuraven Relationship added related to 0032552
2021-09-03 20:25 asuraven Note Added: 0103740
2021-09-06 18:57 asuraven Note Added: 0103876
2021-09-07 19:11 asuraven Note Added: 0103903
2021-09-08 20:16 asuraven Note Added: 0103931
2021-09-09 13:06 git Note Added: 0103935
2021-09-10 15:07 git Note Added: 0103986
2021-09-10 19:20 asuraven Note Added: 0103991
2021-09-13 18:02 asuraven Note Added: 0104066
2021-09-14 19:34 asuraven Note Added: 0104080
2021-09-20 17:30 git Note Added: 0104238
2021-09-20 17:32 asuraven Test case number => perf\modalg\bug32539_1 perf\modalg\bug32539_2
2021-09-20 17:33 asuraven File Added: bug32539_1.7z
2021-09-21 13:44 git Note Added: 0104257
2021-09-21 15:08 asuraven Note Added: 0104260
2021-09-21 16:46 git Note Added: 0104271
2021-09-21 18:33 git Note Added: 0104275
2021-09-22 11:39 git Note Added: 0104287
2021-09-22 15:31 asuraven Note Added: 0104290
2021-09-22 15:31 asuraven Assigned To asuraven => kgv
2021-09-22 15:31 asuraven Status assigned => resolved
2021-09-22 15:31 asuraven Steps to Reproduce Updated
2021-09-23 11:14 kgv Note Added: 0104308
2021-09-23 13:49 kgv Note Added: 0104310
2021-09-23 14:01 git Note Added: 0104311
2021-09-23 14:02 asuraven Note Added: 0104312
2021-09-24 17:54 kgv Assigned To kgv => msv
2021-09-27 11:42 git Note Added: 0104391
2021-09-27 13:32 asuraven Note Added: 0104397
2021-09-28 12:44 msv Note Added: 0104414
2021-09-28 12:44 msv Note Added: 0104415
2021-09-28 12:44 msv Assigned To msv => asuraven
2021-09-28 12:44 msv Status resolved => assigned
2021-09-29 13:51 git Note Added: 0104425
2021-09-30 14:34 asuraven Note Added: 0104453
2021-09-30 14:34 asuraven Assigned To asuraven => msv
2021-09-30 14:34 asuraven Status assigned => resolved
2021-09-30 21:35 msv Note Added: 0104459
2021-09-30 21:36 msv Assigned To msv => asuraven
2021-09-30 21:36 msv Status resolved => assigned
2021-10-01 13:03 git Note Added: 0104464
2021-10-01 15:32 asuraven Note Added: 0104465
2021-10-01 15:32 asuraven Assigned To asuraven => msv
2021-10-01 15:32 asuraven Status assigned => resolved
2021-10-01 19:10 msv Note Added: 0104467
2021-10-01 19:10 msv Assigned To msv => bugmaster
2021-10-01 19:10 msv Status resolved => reviewed
2021-10-02 10:36 smoskvin Note Added: 0104487
2021-10-02 10:36 smoskvin Status reviewed => tested
2021-10-02 11:32 smoskvin Changeset attached => occt master 0f05f211
2021-10-02 11:32 smoskvin Assigned To bugmaster => smoskvin
2021-10-02 11:32 smoskvin Status tested => verified
2021-10-02 11:32 smoskvin Resolution open => fixed
2021-10-04 14:58 asuraven Note Edited: 0104453
2021-10-04 14:58 asuraven Note Edited: 0104465
2021-12-13 14:56 git Note Added: 0105861
2021-12-13 14:56 git Note Added: 0105862
2021-12-13 14:56 git Note Added: 0105863
2021-12-13 14:56 git Note Added: 0105864
2021-12-13 14:56 git Note Added: 0105865