-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Diffing_Engine: profiling #1119
Comments
Update(branch After removing the call to The inefficient section above is now replaced by a more efficient search in the dictionaries by hash. Execution timeExecution time for Collection-level diffing only is now practically zero. Execution time for Property-level diffing is same as before, the bottleneck being the Kellerman Library in Cpu profileThe processor bottleneck now is (as it should) the "property level diffing", that is implemented through the Kellerman Library in The picture shows the result for 1000 elements compared by property. For 100 elements, This demonstrates that the more elements, the more the computation is taken by the "property-level diffing", as expected. |
After #1248 |
New profiling results after df3d1c9 I am now logging also the time it takes to compute the hashes. The latest change introduces the main difference that the hash computing takes significantly longer and becomes the main resource hog for smaller collections. This is due to the correction that had to be done for #1639. Regarding the diffing only:
|
This has been profiled as described in: #1119 (comment)
This has been profiled as described in: #1119 (comment)
With #1952, performance is about x100 better, especially on large collections. |
Measuring performance after changes in #2105. Only slightly slower, same order of magnitude. |
Testing on main at 42bccae, I noticed a significant difference (~2x slower). No changes were made to the |
Profiling at 6b7f790 (under WIP #2647) shows results that are in line with the previous diffing. Slightly faster on smaller numbers, slightly slower on larger numbers. |
Create profiling tests and record results.
I will edit this post with added tests.
ProfilingTest_01 - bars only
Test file: https://github.com/BHoM/BHoM_Engine/blob/Diffing_Engine-initialImplementation/Engine_Test/Diffing_Engine/Profiling01.cs
Execution time
Here I'm testing
BH.oM.Structure.Bars
only.Collection-level diffing only:
O(n log n)
.Collection AND Property-level diffing :
n²
for relatively small numbers (5000).Cpu profile
A big, probably unnecessary performance hit is caused by how we are forced to retrieve a specific fragment:
This might be food for thought on how we implemented the Fragments.
However, the largest percentage is lost in the following section, which I can definitely improve
Conclusions
Other profiling tests
Other tests are needed to account for different cases:
The text was updated successfully, but these errors were encountered: