Here's the place for discussion related to coding in FreeCAD, C++ or Python. Design, interfaces and structures.
easyw-fc
Veteran
Posts: 3633 Joined: Thu Jul 09, 2015 9:34 am
Post
by easyw-fc » Fri Feb 03, 2017 3:29 pm
vejmarie wrote: Can you try the same test within a VM running linux on the same hardware ?
3428.98s (extremely slooow ...almost 1 our)
But I did expected that: VM are not very performant
I cannot test it on real hw with Ubuntu OS ...
May be someone having both OSes on the same PC (dual boot) or having two PCs with similar hw could do a comparison between FC in Ubuntu and CAD-Assistant in Win
Maurice
sgrogan
Veteran
Posts: 6499 Joined: Wed Oct 22, 2014 5:02 pm
Post
by sgrogan » Fri Feb 03, 2017 11:17 pm
easyw-fc wrote: May be someone having both OSes on the same PC (dual boot) or having two PCs with similar hw could do a comparison between FC in Ubuntu and CAD-Assistant in Win
I have the necessary set-up but it will take some some time.
vejmarie wrote: I am trying to figure out if we are missing some compilation switch on windows
I am worried too. I create and set "HAVE_TBB" from cmake gui when configuring FreeCAD because it doesn't exist by default. I'll reproduce this on Ubuntu and compare the results.
"fight the good fight"
sgrogan
Veteran
Posts: 6499 Joined: Wed Oct 22, 2014 5:02 pm
Post
by sgrogan » Sat Feb 04, 2017 3:37 am
@vejmarie, I had no problem building your OCCT7 fork with TBB.
I get these errors trying to build your FreeCAD/step fork
Code: Select all
Linking CXX shared library ../../../lib/libDriver.so
[ 0%] Built target Driver
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshIDFactory.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VtkCellIterator.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_EdgePosition.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/duplicate.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshElementIDFactory.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshElement.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_Mesh0DElement.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshEdge.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshCell.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_FaceOfNodes.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_Position.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_PolyhedralVolumeOfNodes.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/chrono.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_PolygonalFaceOfNodes.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VolumeOfNodes.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshVolume.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/Utils_SALOME_Exception.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_IteratorOfElements.cpp.o
[ 0%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshGroup.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_SpacePosition.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_QuadraticFaceOfNodes.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshFace.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_UnstructuredGrid.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VtkEdge.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshNode.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_QuadraticEdge.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VolumeOfFaces.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_LinearEdge.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VertexPosition.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VtkVolume.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VolumeTool.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshNodeIDFactory.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_FaceOfEdges.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_Downward.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_FacePosition.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_QuadraticVolumeOfNodes.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_VtkFace.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_BallElement.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/SMDS.dir/src/SMDS/SMDS_MeshObject.cpp.o
Linking CXX shared library ../../../lib/libSMDS.so
[ 1%] Built target SMDS
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_W_SMESHDS_Document.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_R_SMESHDS_Document.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_R_SMDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DAT_Test.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_W_SMDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverDAT.dir/src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cpp.o
Linking CXX shared library ../../../lib/libDriverDAT.so
[ 1%] Built target DriverDAT
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/src/DriverSTL/STL_Test.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/src/DriverSTL/SMESH_File.cpp.o
[ 1%] Building CXX object src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/src/DriverSTL/Basics_Utils.cpp.o
Linking CXX shared library ../../../lib/libDriverSTL.so
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `NCollection_DataMap<gp_Pnt, SMDS_MeshNode*, (anonymous namespace)::Hasher>::Clear(unsigned int)':
DriverSTL_R_SMDS_Mesh.cpp:(.text+0x1147): undefined reference to `NCollection_BaseMap::Destroy(void (*)(NCollection_ListNode*, opencascade::handle<NCollection_BaseAllocator>&), unsigned int)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_Type>::BeginScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI13Standard_TypeE10BeginScopeEv[_ZN11opencascade6handleI13Standard_TypeE10BeginScopeEv]+0x23): undefined reference to `Standard_Transient::IncrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_Type>::EndScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI13Standard_TypeE8EndScopeEv[_ZN11opencascade6handleI13Standard_TypeE8EndScopeEv]+0x23): undefined reference to `Standard_Transient::DecrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_DomainError>::get()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI20Standard_DomainErrorE3getEv[_ZN11opencascade13type_instanceI20Standard_DomainErrorE3getEv]+0x6b): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<NCollection_BaseAllocator>::EndScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI25NCollection_BaseAllocatorE8EndScopeEv[_ZN11opencascade6handleI25NCollection_BaseAllocatorE8EndScopeEv]+0x23): undefined reference to `Standard_Transient::DecrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_NoSuchObject>::BeginScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI21Standard_NoSuchObjectE10BeginScopeEv[_ZN11opencascade6handleI21Standard_NoSuchObjectE10BeginScopeEv]+0x23): undefined reference to `Standard_Transient::IncrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_NoSuchObject>::EndScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI21Standard_NoSuchObjectE8EndScopeEv[_ZN11opencascade6handleI21Standard_NoSuchObjectE8EndScopeEv]+0x23): undefined reference to `Standard_Transient::DecrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_NoSuchObject>::get()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI21Standard_NoSuchObjectE3getEv[_ZN11opencascade13type_instanceI21Standard_NoSuchObjectE3getEv]+0x6b): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_NoMoreObject>::BeginScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI21Standard_NoMoreObjectE10BeginScopeEv[_ZN11opencascade6handleI21Standard_NoMoreObjectE10BeginScopeEv]+0x23): undefined reference to `Standard_Transient::IncrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_NoMoreObject>::EndScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI21Standard_NoMoreObjectE8EndScopeEv[_ZN11opencascade6handleI21Standard_NoMoreObjectE8EndScopeEv]+0x23): undefined reference to `Standard_Transient::DecrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_NoMoreObject>::get()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI21Standard_NoMoreObjectE3getEv[_ZN11opencascade13type_instanceI21Standard_NoMoreObjectE3getEv]+0x6b): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::handle<NCollection_BaseAllocator>::BeginScope()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI25NCollection_BaseAllocatorE10BeginScopeEv[_ZN11opencascade6handleI25NCollection_BaseAllocatorE10BeginScopeEv]+0x23): undefined reference to `Standard_Transient::IncrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_Failure>::get()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI16Standard_FailureE3getEv[_ZN11opencascade13type_instanceI16Standard_FailureE3getEv]+0x6b): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_Transient>::get()':
DriverSTL_R_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI18Standard_TransientE3getEv[_ZN11opencascade13type_instanceI18Standard_TransientE3getEv]+0x75): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o:(.data.rel.ro._ZTV21Standard_NoMoreObject[_ZTV21Standard_NoMoreObject]+0x30): undefined reference to `Standard_Failure::GetMessageString() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o:(.data.rel.ro._ZTV21Standard_NoSuchObject[_ZTV21Standard_NoSuchObject]+0x30): undefined reference to `Standard_Failure::GetMessageString() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp.o:(.data.rel.ro._ZTV20Standard_DomainError[_ZTV20Standard_DomainError]+0x30): undefined reference to `Standard_Failure::GetMessageString() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_ConstructionError>::BeginScope()':
DriverSTL_W_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI26Standard_ConstructionErrorE10BeginScopeEv[_ZN11opencascade6handleI26Standard_ConstructionErrorE10BeginScopeEv]+0x23): undefined reference to `Standard_Transient::IncrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cpp.o: In function `opencascade::handle<Standard_ConstructionError>::EndScope()':
DriverSTL_W_SMDS_Mesh.cpp:(.text._ZN11opencascade6handleI26Standard_ConstructionErrorE8EndScopeEv[_ZN11opencascade6handleI26Standard_ConstructionErrorE8EndScopeEv]+0x23): undefined reference to `Standard_Transient::DecrementRefCounter() const'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cpp.o: In function `opencascade::type_instance<Standard_ConstructionError>::get()':
DriverSTL_W_SMDS_Mesh.cpp:(.text._ZN11opencascade13type_instanceI26Standard_ConstructionErrorE3getEv[_ZN11opencascade13type_instanceI26Standard_ConstructionErrorE3getEv]+0x6b): undefined reference to `Standard_Type::Register(char const*, char const*, unsigned long, opencascade::handle<Standard_Type> const&)'
CMakeFiles/DriverSTL.dir/src/DriverSTL/DriverSTL_W_SMDS_Mesh.cpp.o:(.data.rel.ro._ZTV26Standard_ConstructionError[_ZTV26Standard_ConstructionError]+0x30): undefined reference to `Standard_Failure::GetMessageString() const'
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libDriverSTL.so] Error 1
make[1]: *** [src/3rdParty/salomesmesh/CMakeFiles/DriverSTL.dir/all] Error 2
make: *** [all] Error 2
It could very well be how I'm linking your OCCT to FreeCAD.
"fight the good fight"
easyw-fc
Veteran
Posts: 3633 Joined: Thu Jul 09, 2015 9:34 am
Post
by easyw-fc » Sat Feb 04, 2017 3:16 pm
sgrogan wrote:
I have the necessary set-up but it will take some some time
would you mind to do also a comparison in loading time between FC latest dev release 9944-64b and CAD Assistant in windows on similar PC hw?
@vejmarie said that his TBB branch and the main branch should have very similar results in loading time, but on the contrary I have quite different performance (like 3:1 times)
vejmarie wrote: I can read the file now in a faster way on my Mac than with CAD Assistant ! (by using parallel OCCT, otherwise at roughly the same speed)
Thx
Maurice
sgrogan
Veteran
Posts: 6499 Joined: Wed Oct 22, 2014 5:02 pm
Post
by sgrogan » Sat Feb 04, 2017 7:56 pm
easyw-fc wrote: would you mind to do also a comparison in loading time between FC latest dev release 9944-64b and CAD Assistant in windows on similar PC hw?
@vejmarie said that his TBB branch and the main branch should have very similar results in loading time, but on the contrary I have quite different performance (like 3:1 times)
Will do, but it seems vejmarie's occt patch is the key. Linking vejmarie's FreeCAD fork to official OCCT7w/TBB and to vejmarie's OCCT7w/TBB has been, in the past, around 2x (clock on the wall). Next week I should be able to test with easy-fc's script.
@vejmarie, on your local builds, for FreCAD how do you handle -DCMake HAVE_TBB=1? I could definitely be botching this.
"fight the good fight"
triplus
Veteran
Posts: 9471 Joined: Mon Dec 12, 2011 4:45 pm
Post
by triplus » Sun Feb 05, 2017 2:13 pm
I don't know where but i know i have seen it somewhere. That is @vejmarie figured out the progress indicator "refreshing" contributes to the performance penalty when loading STEP file. And he fixed that.
Thanks for doing that!
vejmarie
Posts: 713 Joined: Mon Jan 04, 2016 4:52 pm
Location: Somewhere between France, USA and Taiwan
Contact:
Post
by vejmarie » Sun Feb 05, 2017 4:33 pm
sgrogan wrote: easyw-fc wrote: would you mind to do also a comparison in loading time between FC latest dev release 9944-64b and CAD Assistant in windows on similar PC hw?
@vejmarie said that his TBB branch and the main branch should have very similar results in loading time, but on the contrary I have quite different performance (like 3:1 times)
Will do, but it seems vejmarie's occt patch is the key. Linking vejmarie's FreeCAD fork to official OCCT7w/TBB and to vejmarie's OCCT7w/TBB has been, in the past, around 2x (clock on the wall). Next week I should be able to test with easy-fc's script.
@vejmarie, on your local builds, for FreCAD how do you handle -DCMake HAVE_TBB=1? I could definitely be botching this.
Hi, I am just turning TBB at cmake level with -DHAVE_TBB=1
.
vejmarie
Posts: 713 Joined: Mon Jan 04, 2016 4:52 pm
Location: Somewhere between France, USA and Taiwan
Contact:
Post
by vejmarie » Sun Feb 05, 2017 4:34 pm
triplus wrote: I don't know where but i know i have seen it somewhere. That is @vejmarie figured out the progress indicator "refreshing" contributes to the performance penalty when loading STEP file. And he fixed that.
Thanks for doing that!
Hi Triplus, you are welcome. The patch regarding the progress bar has been included last week, you probably have seen it going through the PR.