Skip to content

Improve build times: cut time almost in half by using PCH#5622

Open
jmarrec wants to merge 10 commits into
developfrom
improve_build_times
Open

Improve build times: cut time almost in half by using PCH#5622
jmarrec wants to merge 10 commits into
developfrom
improve_build_times

Conversation

@jmarrec
Copy link
Copy Markdown
Collaborator

@jmarrec jmarrec commented May 15, 2026

Pull request overview

Our build times have always been bad, but as we start including epmodel/ they become horrendous.

I used clang -ftime-trace to find the longest operations, and managed to cut build times in almost half by using:

  • Pre compiled headers
  • extern template

Using my M1 Max mac, with clang21 and Ninja.

Each time I wipe the build dir and clear the ccache cache

conan install --build=missing -c tools.cmake.cmaketoolchain:generator=Ninja -s compiler.cppstd=20 -s build_type=Release --output-folder=../OS-build-release && cmake --preset conan-release -DENABLE_BUILD_TIME_TRACE:BOOL=ON -DUSE_PCH:BOOL=ON . && ccache --clear

Metric Before After Delta
Wall time 18m 40s 11m 13s −40%
User time 162m 7s 94m 1s −42%
Sys time 11m 15s 5m 29s −51%
Frontend (parsing) 8241 s 2728 s −67%
Backend (codegen) 2903 s 2809 s −3%
Total compile 11144 s 5536 s −50%

codegen didn't change, that's normal. It's heavily dominated by SWIG

You can find the details of the ftime-trace analysis

capture_develop.txt
capture_improve_9ef2274fd8.txt

This is produced via

ClangBuildAnalyzer --start .
time ninja; ClangBuildAnalyzer --stop . capture_improve_9ef2274fd8.bin
ClangBuildAnalyzer --analyze capture_improve_9ef2274fd8.bin > capture_improve_9ef2274fd8.txt

Pull Request Author

  • Model API Changes / Additions
  • Any new or modified fields have been implemented in the EnergyPlus ForwardTranslator (and ReverseTranslator as appropriate)
  • Model API methods are tested (in src/model/test)
  • EnergyPlus ForwardTranslator Tests (in src/energyplus/Test)
  • If a new object or method, added a test in NREL/OpenStudio-resources: Add Link
  • If needed, added VersionTranslation rules for the objects (src/osversion/VersionTranslator.cpp)
  • Verified that C# bindings built fine on Windows, partial classes used as needed, etc.
  • All new and existing tests passes
  • If methods have been deprecated, update rest of code to use the new methods

Labels:

  • If change to an IDD file, add the label IDDChange
  • If breaking existing API, add the label APIChange
  • If deemed ready, add label Pull Request - Ready for CI so that CI builds your PR

Review Checklist

This will not be exhaustively relevant to every PR.

  • Perform a Code Review on GitHub
  • Code Style, strip trailing whitespace, etc.
  • All related changes have been implemented: model changes, model tests, FT changes, FT tests, VersionTranslation, OS App
  • Labeling is ok
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified

@jmarrec jmarrec self-assigned this May 15, 2026
@jmarrec jmarrec added Enhancement Request Developer Issue Pull Request - Ready for CI This pull request if finalized and is ready for continuous integration verification prior to merge. labels May 15, 2026
@jmarrec jmarrec changed the title Improve build times Improve build times: cut time almost in half by using PCH + extern template May 15, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 15, 2026

🧪 Test Results Dashboard

Summary

Metric Value
Total Tests 4184
Passed 4121
Failed 63
Errors 0
Skipped 0
Success Rate 98.5%
Generated 2026-05-18 12:55:13 UTC

⚠️ Minor Issues Detected

🔍 Failed Tests (63 failures)

Linux-c++ (63 failures)

RubyEngineFixture.BadMeasure.RubyEngineFixture.BadMeasure (run1)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.WrongMethodMeasure.RubyEngineFixture.WrongMethodMeasure (run1)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.StackLevelTooDeepMeasure.RubyEngineFixture.StackLevelTooDeepMeasure (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.OpenStudioCLI.Run_RubyOnly (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.absolute_path.OpenStudioCLI.Run_RubyOnly.absolute_path (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly.OpenStudioCLI.Run_PythonOnly (run1)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly_TwoMeasure.OpenStudioCLI.Run_PythonOnly_TwoMeasure (run1)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_RubyPython.OpenStudioCLI.Run_RubyPython (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonRuby.OpenStudioCLI.Run_PythonRuby (run1)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_AlfalfaWorkflow.OpenStudioCLI.Run_AlfalfaWorkflow (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyPythonPlugin.OpenStudioCLI.Run_RubyPythonPlugin (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_with_analysis.OpenStudioCLI.test_with_analysis (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_runner_errors.OpenStudioCLI.test_runner_errors (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_outdated_measure.OpenStudioCLI.test_outdated_measure (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_output_files.OpenStudioCLI.test_output_files (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_reporting_modeloutputrequests.OpenStudioCLI.test_reporting_modeloutputrequests (run1)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_measure_manager.OpenStudioCLI.test_measure_manager (run1)

Error Message:

Failed

Full Details:

No details available
PythonEngineFixture.BadMeasure.PythonEngineFixture.BadMeasure (run1)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.WrongMethodMeasure.PythonEngineFixture.WrongMethodMeasure (run1)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.StackLevelTooDeepMeasure.PythonEngineFixture.StackLevelTooDeepMeasure (run1)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.AlfalfaMeasure.PythonEngineFixture.AlfalfaMeasure (run1)

Error Message:

SEGFAULT

Full Details:

No details available
RubyEngineFixture.BadMeasure.RubyEngineFixture.BadMeasure (run3)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.WrongMethodMeasure.RubyEngineFixture.WrongMethodMeasure (run3)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.StackLevelTooDeepMeasure.RubyEngineFixture.StackLevelTooDeepMeasure (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.OpenStudioCLI.Run_RubyOnly (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.absolute_path.OpenStudioCLI.Run_RubyOnly.absolute_path (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly.OpenStudioCLI.Run_PythonOnly (run3)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly_TwoMeasure.OpenStudioCLI.Run_PythonOnly_TwoMeasure (run3)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_RubyPython.OpenStudioCLI.Run_RubyPython (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonRuby.OpenStudioCLI.Run_PythonRuby (run3)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_AlfalfaWorkflow.OpenStudioCLI.Run_AlfalfaWorkflow (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyPythonPlugin.OpenStudioCLI.Run_RubyPythonPlugin (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_with_analysis.OpenStudioCLI.test_with_analysis (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_runner_errors.OpenStudioCLI.test_runner_errors (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_outdated_measure.OpenStudioCLI.test_outdated_measure (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_output_files.OpenStudioCLI.test_output_files (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_reporting_modeloutputrequests.OpenStudioCLI.test_reporting_modeloutputrequests (run3)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_measure_manager.OpenStudioCLI.test_measure_manager (run3)

Error Message:

Failed

Full Details:

No details available
PythonEngineFixture.BadMeasure.PythonEngineFixture.BadMeasure (run3)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.WrongMethodMeasure.PythonEngineFixture.WrongMethodMeasure (run3)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.StackLevelTooDeepMeasure.PythonEngineFixture.StackLevelTooDeepMeasure (run3)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.AlfalfaMeasure.PythonEngineFixture.AlfalfaMeasure (run3)

Error Message:

SEGFAULT

Full Details:

No details available
RubyEngineFixture.BadMeasure.RubyEngineFixture.BadMeasure (run2)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.WrongMethodMeasure.RubyEngineFixture.WrongMethodMeasure (run2)

Error Message:

Failed

Full Details:

No details available
RubyEngineFixture.StackLevelTooDeepMeasure.RubyEngineFixture.StackLevelTooDeepMeasure (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.OpenStudioCLI.Run_RubyOnly (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyOnly.absolute_path.OpenStudioCLI.Run_RubyOnly.absolute_path (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly.OpenStudioCLI.Run_PythonOnly (run2)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_PythonOnly_TwoMeasure.OpenStudioCLI.Run_PythonOnly_TwoMeasure (run2)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_RubyPython.OpenStudioCLI.Run_RubyPython (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_PythonRuby.OpenStudioCLI.Run_PythonRuby (run2)

Error Message:

SEGFAULT

Full Details:

No details available
OpenStudioCLI.Run_AlfalfaWorkflow.OpenStudioCLI.Run_AlfalfaWorkflow (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.Run_RubyPythonPlugin.OpenStudioCLI.Run_RubyPythonPlugin (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_with_analysis.OpenStudioCLI.test_with_analysis (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_runner_errors.OpenStudioCLI.test_runner_errors (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_outdated_measure.OpenStudioCLI.test_outdated_measure (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_output_files.OpenStudioCLI.test_output_files (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_reporting_modeloutputrequests.OpenStudioCLI.test_reporting_modeloutputrequests (run2)

Error Message:

Failed

Full Details:

No details available
OpenStudioCLI.test_measure_manager.OpenStudioCLI.test_measure_manager (run2)

Error Message:

Failed

Full Details:

No details available
PythonEngineFixture.BadMeasure.PythonEngineFixture.BadMeasure (run2)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.WrongMethodMeasure.PythonEngineFixture.WrongMethodMeasure (run2)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.StackLevelTooDeepMeasure.PythonEngineFixture.StackLevelTooDeepMeasure (run2)

Error Message:

SEGFAULT

Full Details:

No details available
PythonEngineFixture.AlfalfaMeasure.PythonEngineFixture.AlfalfaMeasure (run2)

Error Message:

SEGFAULT

Full Details:

No details available

📊 Test Run Information

Run XML File Status
run1 results.xml ✅ Found
run3 results.xml ✅ Found
run2 results.xml ✅ Found

@jmarrec
Copy link
Copy Markdown
Collaborator Author

jmarrec commented May 15, 2026

There a lot of things I'd like to do that may improve this even further:

But this is already a hefty improvement without spending too much time and effort.

jmarrec added 7 commits May 18, 2026 12:52
```
ClangBuildAnalyzer --analyze capture.bin
Analyzing build trace from 'capture.bin'...
**** Time summary:
Compilation (2453 times):
  Parsing (frontend):         8269.1 s
  Codegen & opts (backend):   2926.0 s

**** Files that took longest to parse (compiler frontend):
 43492 ms: ./ruby/engine/CMakeFiles/rubyengine.dir/embedded_files.cxx.o
 32344 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 31823 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
 24287 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 24156 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 22654 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 22366 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 21922 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/embedded_files.cxx.o
 17180 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/idd/IddFactory_EnergyPlus.cxx.o
 17141 ms: ./src/model/CMakeFiles/openstudio_model.dir/Model.cpp.o

**** Files that took longest to codegen (compiler backend):
141580 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
103410 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 99099 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 95356 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 77023 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 66977 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 60301 ms: ./src/model/CMakeFiles/python_OpenStudioModelGeometry.dir/python_OpenStudioModelGeometry_wrap.cxx.o
 52455 ms: ./src/model/CMakeFiles/python_OpenStudioModelCore.dir/python_OpenStudioModelCore_wrap.cxx.o
 52090 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelGeometry.dir/ruby_OpenStudioModelGeometry_wrap.cxx.o
 49565 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelCore.dir/ruby_OpenStudioModelCore_wrap.cxx.o

**** Templates that took longest to instantiate:
104447 ms: EnumBase<openstudio::IddFileType>::EnumBase (4151 times, avg 25 ms)
104176 ms: EnumBase<openstudio::IddFileType>::lookupValue (4150 times, avg 25 ms)
 61562 ms: boost::date_time::parse_iso_time<boost::posix_time::ptime> (1600 times, avg 38 ms)
 48275 ms: EnumBase<openstudio::IddFileType>::getValues (2045 times, avg 23 ms)
 48085 ms: EnumBase<openstudio::IddFileType>::buildValues (2038 times, avg 23 ms)
 46871 ms: boost::date_time::parse_date<boost::gregorian::date> (1600 times, avg 29 ms)
 43410 ms: EnumBase<openstudio::IddFileType>::getLookupMap (2023 times, avg 21 ms)
 42662 ms: EnumBase<openstudio::IddFileType>::buildLookupMap (2023 times, avg 21 ms)
 42148 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (1600 times, avg 26 ms)
 37549 ms: boost::multi_index::multi_index_container<openstudio::detail::DataDi... (560 times, avg 67 ms)
 36684 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (1600 times, avg 22 ms)
 31536 ms: EnumBase<openstudio::IddFileType>::getNames (2027 times, avg 15 ms)
 30920 ms: EnumBase<openstudio::IddFileType>::buildStrings (2027 times, avg 15 ms)
 30093 ms: std::map<std::string, int>::operator[] (2276 times, avg 13 ms)
 29908 ms: std::map<int, std::string>::operator[] (2339 times, avg 12 ms)
 27807 ms: boost::date_time::month_str_to_ushort<boost::gregorian::greg_month> (1600 times, avg 17 ms)
 27614 ms: boost::gregorian::to_simple_string_type<wchar_t> (1601 times, avg 17 ms)
 26245 ms: std::vector<std::pair<bool, boost::re_detail_500::re_syntax_base *>>... (2373 times, avg 11 ms)
 26077 ms: std::vector<std::pair<bool, boost::re_detail_500::re_syntax_base *>>... (2373 times, avg 10 ms)
 25404 ms: testing::internal::ValueArray<bool, bool>::operator ParamGenerator<b... (839 times, avg 30 ms)
 25260 ms: std::vector<std::pair<std::string, int>>::push_back (2269 times, avg 11 ms)
 25215 ms: boost::date_time::string_parse_tree<char>::string_parse_tree (3200 times, avg 7 ms)
 25107 ms: std::vector<std::pair<std::string, int>>::emplace_back<std::pair<std... (2269 times, avg 11 ms)
 24694 ms: boost::basic_regex<char>::assign (125 times, avg 197 ms)
 24375 ms: std::basic_string<char>::rbegin (2457 times, avg 9 ms)
 23070 ms: std::vector<boost::re_detail_500::named_subexpressions::name>::push_... (2373 times, avg 9 ms)
 22950 ms: std::vector<boost::re_detail_500::named_subexpressions::name>::empla... (2373 times, avg 9 ms)
 22917 ms: std::vector<std::pair<bool, boost::re_detail_500::re_syntax_base *>>... (2373 times, avg 9 ms)
 22068 ms: std::vector<std::pair<std::string, int>>::__emplace_back_slow_path<s... (2269 times, avg 9 ms)
 20973 ms: std::vector<boost::re_detail_500::named_subexpressions::name>::__emp... (2373 times, avg 8 ms)

**** Template sets that took longest to instantiate:
179270 ms: std::vector<$> (71987 times, avg 2 ms)
138054 ms: EnumBase<$>::EnumBase (18639 times, avg 7 ms)
135672 ms: EnumBase<$>::lookupValue (17197 times, avg 7 ms)
124366 ms: std::vector<$>::emplace_back<$> (14104 times, avg 8 ms)
122786 ms: std::vector<$>::push_back (13845 times, avg 8 ms)
116431 ms: std::reverse_iterator<$> (19203 times, avg 6 ms)
108129 ms: std::vector<$>::__emplace_back_slow_path<$> (11567 times, avg 9 ms)
102687 ms: std::vector<$>::__swap_out_circular_buffer (13837 times, avg 7 ms)
 96171 ms: std::__make_exception_guard<$> (20520 times, avg 4 ms)
 94071 ms: std::__uninitialized_allocator_relocate<$> (13680 times, avg 6 ms)
 91958 ms: std::__exception_guard_exceptions<$>::~__exception_guard_exceptions (20434 times, avg 4 ms)
 77278 ms: std::__tree<$> (30458 times, avg 2 ms)
 75613 ms: std::vector<$>::__init_with_size<$> (11368 times, avg 6 ms)
 75418 ms: std::allocator_traits<$> (47318 times, avg 1 ms)
 74263 ms: std::map<$> (18672 times, avg 3 ms)
 71295 ms: std::vector<$>::vector (12210 times, avg 5 ms)
 69703 ms: std::vector<$>::__construct_at_end<$> (12535 times, avg 5 ms)
 62856 ms: EnumBase<$>::getValues (6718 times, avg 9 ms)
 62036 ms: EnumBase<$>::buildValues (6414 times, avg 9 ms)
 61562 ms: boost::date_time::parse_iso_time<$> (1600 times, avg 38 ms)
 52931 ms: std::__uninitialized_allocator_copy<$> (10836 times, avg 4 ms)
 51841 ms: std::pair<$> (48604 times, avg 1 ms)
 51615 ms: EnumBase<$>::getLookupMap (3874 times, avg 13 ms)
 50316 ms: EnumBase<$>::buildLookupMap (3326 times, avg 15 ms)
 48697 ms: std::__tree<$>::__emplace_unique_key_args<$> (7543 times, avg 6 ms)
 46871 ms: boost::date_time::parse_date<$> (1600 times, avg 29 ms)
 44832 ms: std::__copy_move_unwrap_iters<$> (15918 times, avg 2 ms)
 43177 ms: std::unique_ptr<$> (39470 times, avg 1 ms)
 42256 ms: std::__copy<$> (10921 times, avg 3 ms)
 42148 ms: boost::date_time::special_values_parser<$>::special_values_parser (1600 times, avg 26 ms)

**** Functions that took longest to compile:
 11399 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (/Users/julien/Software/Others/OpenStudio/src/radiance/ForwardTranslator.cpp)
  3055 ms: Init_openstudiomodelhvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelHVAC_wrap.cxx)
  2787 ms: Init_openstudiomodelstraightcomponent (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelStraightComponent_wrap.cxx)
  2396 ms: Init_openstudiomodelresources (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelResources_wrap.cxx)
  1959 ms: openstudio::model::detail::Model_Impl::ModelObjectCreator::ModelObje... (/Users/julien/Software/Others/OpenStudio/src/model/Model.cpp)
  1560 ms: Init_openstudiomodelgeometry (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGeometry_wrap.cxx)
  1552 ms: openstudio::IddFactory::IddFactory() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory.cxx)
  1294 ms: openstudio::isomodel::ForwardTranslator::translateModel(openstudio::... (/Users/julien/Software/Others/OpenStudio/src/isomodel/ForwardTranslator.cpp)
  1145 ms: Init_openstudiomodelcore (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelCore_wrap.cxx)
  1031 ms: openstudio::model::detail::OutputTableMonthly_Impl::standardReports() (/Users/julien/Software/Others/OpenStudio/src/model/OutputTableMonthly.cpp)
   993 ms: Init_openstudiomodelzonehvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelZoneHVAC_wrap.cxx)
   886 ms: Init_openstudiomodelgenerators (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGenerators_wrap.cxx)
   883 ms: openstudio::IddFactory::registerEnergyPlusObjectsInCallbackMap() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory_EnergyPlus.cxx)
   754 ms: ModelFixture_CoilCoolingDXSingleSpeedThermalStorage_GettersSetters_T... (/Users/julien/Software/Others/OpenStudio/src/model/test/CoilCoolingDXSingleSpeedThermalStorage_GTest.cpp)
   748 ms: openstudio::sdd::ReverseTranslator::translateSDD(pugi::xml_node cons... (/Users/julien/Software/Others/OpenStudio/src/sdd/ReverseTranslator.cpp)
   709 ms: gbXMLFixture_ForwardTranslator_IDs_Names_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/gbxml/Test/ForwardTranslator_GTest.cpp)
   652 ms: EnergyPlusFixture_ForwardTranslator_HeatPumpAirToWater_Test::TestBod... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/HeatPumpAirToWater_GTest.cpp)
   648 ms: openstudio::model::ThreeJSReverseTranslator::modelFromThreeJS(openst... (/Users/julien/Software/Others/OpenStudio/src/model/ThreeJSReverseTranslator.cpp)
   640 ms: openstudio::gltf::GltfUserData::GltfUserData(tinygltf::Value const&) (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfUserData.cpp)
   638 ms: EnergyPlusFixture_ForwardTranslator_CoilCoolingDXSingleSpeedThermalS... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/CoilCoolingDXSingleSpeedThermalStorage_GTest.cpp)
   590 ms: openstudio::model::ScheduleTypeRegistry::ScheduleTypeRegistry() (/Users/julien/Software/Others/OpenStudio/src/model/ScheduleTypeRegistry.cpp)
   554 ms: ModelFixture_ChillerElectricASHRAE205_Loops_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/ChillerElectricASHRAE205_GTest.cpp)
   527 ms: EnergyPlusFixture_ForwardTranslatorZoneMixing_DifferentZones_Test::T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/ZoneMixing_GTest.cpp)
   506 ms: EnergyPlusFixture_ForwardTranslator_AirLoopHVACUnitarySystem_Nodes_T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/AirLoopHVACUnitarySystem_GTest.cpp)
   502 ms: tinygltf::SerializeGltfModel(tinygltf::Model const*, nlohmann::json_... (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfForwardTranslator.cpp)
   497 ms: openstudio::osversion::VersionTranslator::update_3_6_1_to_3_7_0(open... (/Users/julien/Software/Others/OpenStudio/src/osversion/VersionTranslator.cpp)
   494 ms: openstudio::FloorplanJS::makeGeometries(Json::Value const&, Json::Va... (/Users/julien/Software/Others/OpenStudio/src/utilities/geometry/FloorplanJS.cpp)
   471 ms: ISOModelFixture_UserModel_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/isomodel/Test/UserModel_GTest.cpp)
   461 ms: Init_openstudiomodelsimulation (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelSimulation_wrap.cxx)
   446 ms: openstudio::energyplus::GeometryTranslator::convertSimpleSurfaces(op... (/Users/julien/Software/Others/OpenStudio/src/energyplus/GeometryTranslator.cpp)

**** Function sets that took longest to compile / optimize:
 12173 ms: std::__1::__wrap_iter<$> std::__1::vector<$>::__insert_with_size[abi... (1520 times, avg 8 ms)
 11399 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (1 times, avg 11399 ms)
  6928 ms: EnumBase<$>::buildStrings(bool) (2478 times, avg 2 ms)
  6259 ms: EnumBase<$>::lookupValue(int) (2311 times, avg 2 ms)
  5879 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (1996 times, avg 2 ms)
  5423 ms: std::__1::basic_stringstream<$>::basic_stringstream[abi:nqe210106]() (1854 times, avg 2 ms)
  5408 ms: void swig::setslice<$>(std::__1::vector<$>*, long, long, long, std::... (713 times, avg 7 ms)
  5142 ms: std::__1::vector<$>* swig::getslice<$>(std::__1::vector<$> const*, l... (713 times, avg 7 ms)
  4620 ms: EnumBase<$>::buildValues() (2312 times, avg 1 ms)
  4531 ms: void swig::delslice<$>(std::__1::vector<$>*, long, long, long) (713 times, avg 6 ms)
  4022 ms: std::__1::ostreambuf_iterator<$> std::__1::__pad_and_output[abi:nqe2... (1939 times, avg 2 ms)
  3834 ms: boost::optional<$> openstudio::IdfObject::optionalCast<$>() const (2979 times, avg 1 ms)
  3805 ms: std::__1::basic_string<$>& std::__1::basic_string<$>::__assign_no_al... (3217 times, avg 1 ms)
  3800 ms: std::__1::vector<$>::reserve(unsigned long) (2683 times, avg 1 ms)
  3699 ms: void std::__1::__tree_balance_after_insert[abi:nqe210106]<$>(std::__... (1758 times, avg 2 ms)
  3679 ms: std::__1::basic_ostream<$>& std::__1::__put_character_sequence[abi:n... (1939 times, avg 1 ms)
  3648 ms: std::__1::basic_stringbuf<$>::__init_buf_ptrs[abi:nqe210106]() (1885 times, avg 1 ms)
  3161 ms: boost::re_detail_500::basic_regex_parser<$>::parse_perl_extension() (59 times, avg 53 ms)
  3074 ms: std::__1::vector<$>::~vector[abi:nqe210106]() (2025 times, avg 1 ms)
  2959 ms: std::__1::vector<$> openstudio::model::Model::getModelObjectsByName<... (1098 times, avg 2 ms)
  2690 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (992 times, avg 2 ms)
  2422 ms: swig::traits_asptr_stdseq<$>::asptr(unsigned long, std::__1::vector<... (761 times, avg 3 ms)
  2323 ms: boost::re_detail_500::basic_regex_creator<$>::append_set(boost::re_d... (118 times, avg 19 ms)
  2295 ms: swig::traits_info<$>::type_info() (2820 times, avg 0 ms)
  2204 ms: swig::traits_asptr_stdseq<$>::asptr(_object*, std::__1::vector<$>**) (761 times, avg 2 ms)
  2121 ms: boost::optional<$> openstudio::model::Model::getConcreteModelObjectB... (1074 times, avg 1 ms)
  2094 ms: boost::optional<$>::~optional() (1240 times, avg 1 ms)
  2045 ms: boost::optional<$> openstudio::model::Model::getModelObject<$>(opens... (1120 times, avg 1 ms)
  1742 ms: std::__1::vector<$>* swig::getslice<$>(std::__1::vector<$> const*, i... (713 times, avg 2 ms)
  1665 ms: std::__1::vector<$>::vector[abi:nqe210106](std::__1::vector<$> const&) (1168 times, avg 1 ms)

**** Expensive headers:
3555838 ms: /Users/julien/Software/Others/OpenStudio/src/model/ModelObject.hpp (included 2072 times, avg 1716 ms), included via:
  672x: ForwardTranslator.hpp Model.hpp
  490x: ModelFixture.hpp Model.hpp
  182x: ReverseTranslator.hpp Model.hpp
  84x: Model.hpp
  15x: OSWorkflow.hpp OSRunner.hpp Model.hpp
  10x: OSRunner.hpp Model.hpp
  ...

3492746 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idf/IdfObject.hpp (included 2135 times, avg 1635 ms), included via:
  672x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp
  182x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp
  83x: Model.hpp ModelObject.hpp WorkspaceObject.hpp
  27x: <direct include>
  15x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp
  ...

3452893 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idf/WorkspaceObject.hpp (included 2098 times, avg 1645 ms), included via:
  672x: ForwardTranslator.hpp Model.hpp ModelObject.hpp
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp
  182x: ReverseTranslator.hpp Model.hpp ModelObject.hpp
  83x: Model.hpp ModelObject.hpp
  25x: <direct include>
  15x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp
  ...

2833626 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/Logger.hpp (included 2359 times, avg 1201 ms), included via:
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  461x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  214x: EnergyPlusFixture.hpp
  181x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  63x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  19x: Assert.hpp
  ...

2674027 ms: /Users/julien/Software/Others/OpenStudio/src/model/Model.hpp (included 1865 times, avg 1433 ms), included via:
  673x: ForwardTranslator.hpp
  490x: ModelFixture.hpp
  476x: <direct include>
  182x: ReverseTranslator.hpp
  15x: OSWorkflow.hpp OSRunner.hpp
  10x: OSRunner.hpp
  ...

2218866 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/LogMessage.hpp (included 2362 times, avg 939 ms), included via:
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  461x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  214x: EnergyPlusFixture.hpp Logger.hpp
  181x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  63x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  19x: IdfObject.hpp Logger.hpp
  ...

1400000 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/UUID.hpp (included 2178 times, avg 642 ms), included via:
  672x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp
  181x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp
  73x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp
  21x: IdfObject.hpp Handle.hpp
  15x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp
  ...

1394035 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idf/Handle.hpp (included 2132 times, avg 653 ms), included via:
  672x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  181x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  73x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  21x: IdfObject.hpp
  15x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  ...

1287461 ms: /Users/julien/Software/Others/OpenStudio/src/model/test/ModelFixture.hpp (included 490 times, avg 2627 ms), included via:
  490x: <direct include>

1267685 ms: /Users/julien/.conan2/p/boost43f2563a0ca26/p/include/boost/regex.hpp (included 2373 times, avg 534 ms), included via:
  490x: ModelFixture.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp UUID.hpp
  461x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp UUID.hpp
  214x: EnergyPlusFixture.hpp Logger.hpp LogSink.hpp
  181x: ReverseTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp UUID.hpp
  63x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Handle.hpp UUID.hpp
  17x: IdfObject.hpp Handle.hpp UUID.hpp
  ...

  done in 2.7s.
```

After

  ┌──────────┬────────────┬───────────┬──────────────────┐
  │          │ Before PCH │ After PCH │      Delta       │
  ├──────────┼────────────┼───────────┼──────────────────┤
  │ Frontend │ 8269 s     │ 3482 s    │ -58%             │
  ├──────────┼────────────┼───────────┼──────────────────┤
  │ Backend  │ 2926 s     │ 3037 s    │ ~flat (expected) │
  └──────────┴────────────┴───────────┴──────────────────┘

  The PCH is clearly working — ModelObject.hpp, IdfObject.hpp, WorkspaceObject.hpp, Model.hpp, UUID.hpp, boost/regex.hpp have all vanished from the expensive headers list.

```
Analyzing build trace from 'capture_pch.bin'...
**** Time summary:
Compilation (2455 times):
  Parsing (frontend):         3482.1 s
  Codegen & opts (backend):   3036.7 s

**** Files that took longest to parse (compiler frontend):
 44954 ms: ./ruby/engine/CMakeFiles/rubyengine.dir/embedded_files.cxx.o
 31722 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
 29898 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 29226 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 26784 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 24015 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 23551 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/embedded_files.cxx.o
 22328 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 20502 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelGeometry.dir/ruby_OpenStudioModelGeometry_wrap.cxx.o
 17939 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/idd/IddFactory_EnergyPlus.cxx.o

**** Files that took longest to codegen (compiler backend):
121860 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
112898 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 97915 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 94005 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 83890 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 64953 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 64465 ms: ./src/model/CMakeFiles/python_OpenStudioModelGeometry.dir/python_OpenStudioModelGeometry_wrap.cxx.o
 53453 ms: ./src/model/CMakeFiles/python_OpenStudioModelCore.dir/python_OpenStudioModelCore_wrap.cxx.o
 52658 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelGeometry.dir/ruby_OpenStudioModelGeometry_wrap.cxx.o
 43522 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelCore.dir/ruby_OpenStudioModelCore_wrap.cxx.o

**** Templates that took longest to instantiate:
180243 ms: EnumBase<openstudio::IddFileType>::EnumBase (4410 times, avg 40 ms)
179250 ms: EnumBase<openstudio::IddFileType>::lookupValue (4407 times, avg 40 ms)
 88930 ms: EnumBase<openstudio::IddFileType>::getValues (2195 times, avg 40 ms)
 88353 ms: EnumBase<openstudio::IddFileType>::buildValues (2188 times, avg 40 ms)
 75915 ms: boost::date_time::parse_iso_time<boost::posix_time::ptime> (1600 times, avg 47 ms)
 71570 ms: EnumBase<openstudio::IddFileType>::getLookupMap (2186 times, avg 32 ms)
 70621 ms: EnumBase<openstudio::IddFileType>::buildLookupMap (2185 times, avg 32 ms)
 62967 ms: boost::date_time::parse_date<boost::gregorian::date> (1600 times, avg 39 ms)
 60378 ms: EnumBase<openstudio::IddFileType>::getNames (2187 times, avg 27 ms)
 59226 ms: EnumBase<openstudio::IddFileType>::buildStrings (2187 times, avg 27 ms)
 51979 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (1600 times, avg 32 ms)
 50993 ms: std::map<int, std::string>::operator[] (2384 times, avg 21 ms)
 49466 ms: boost::multi_index::multi_index_container<openstudio::detail::DataDi... (560 times, avg 88 ms)
 45848 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (1600 times, avg 28 ms)
 38961 ms: std::map<std::string, int>::operator[] (2321 times, avg 16 ms)
 36839 ms: boost::gregorian::to_simple_string_type<wchar_t> (1603 times, avg 22 ms)
 36056 ms: testing::internal::ValueArray<bool, bool>::operator ParamGenerator<b... (839 times, avg 42 ms)
 33886 ms: boost::date_time::month_str_to_ushort<boost::gregorian::greg_month> (1600 times, avg 21 ms)
 30918 ms: boost::basic_regex<char>::assign (125 times, avg 247 ms)
 29262 ms: boost::date_time::string_parse_tree<char>::string_parse_tree (3200 times, avg 9 ms)
 27989 ms: std::__tree<std::__value_type<int, std::string>, std::__map_value_co... (2319 times, avg 12 ms)
 27400 ms: boost::multi_index::detail::multi_index_node_type<openstudio::detail... (560 times, avg 48 ms)
 27191 ms: boost::algorithm::to_upper_copy<std::string> (2319 times, avg 11 ms)
 26787 ms: boost::algorithm::detail::transform_range_copy<std::string, std::str... (2319 times, avg 11 ms)
 26709 ms: boost::re_detail_500::get_default_class_id<char> (2405 times, avg 11 ms)
 26200 ms: std::map<std::string, unsigned short>::map (1600 times, avg 16 ms)
 26107 ms: std::vector<std::string>::push_back (2501 times, avg 10 ms)
 25240 ms: std::__tree<std::__value_type<std::string, int>, std::__map_value_co... (2319 times, avg 10 ms)
 24535 ms: boost::mpl::reverse_iter_fold<boost::multi_index::indexed_by<boost::... (560 times, avg 43 ms)
 23230 ms: std::map<std::string, unsigned short>::insert<const std::pair<const ... (1600 times, avg 14 ms)

**** Template sets that took longest to instantiate:
218132 ms: EnumBase<$>::EnumBase (26410 times, avg 8 ms)
210761 ms: EnumBase<$>::lookupValue (18765 times, avg 11 ms)
103820 ms: EnumBase<$>::getValues (7194 times, avg 14 ms)
102549 ms: EnumBase<$>::buildValues (6835 times, avg 15 ms)
 78880 ms: EnumBase<$>::getLookupMap (3915 times, avg 20 ms)
 77307 ms: EnumBase<$>::buildLookupMap (3501 times, avg 22 ms)
 76837 ms: std::vector<$> (27202 times, avg 2 ms)
 75915 ms: boost::date_time::parse_iso_time<$> (1600 times, avg 47 ms)
 73273 ms: std::reverse_iterator<$> (10521 times, avg 6 ms)
 71647 ms: EnumBase<$>::getNames (6195 times, avg 11 ms)
 69896 ms: EnumBase<$>::buildStrings (6103 times, avg 11 ms)
 69847 ms: std::vector<$>::emplace_back<$> (7787 times, avg 8 ms)
 69033 ms: std::__tree<$>::__emplace_unique_key_args<$> (7686 times, avg 8 ms)
 67716 ms: std::vector<$>::push_back (7517 times, avg 9 ms)
 62967 ms: boost::date_time::parse_date<$> (1600 times, avg 39 ms)
 62399 ms: std::vector<$>::__swap_out_circular_buffer (7378 times, avg 8 ms)
 60854 ms: std::__make_exception_guard<$> (9714 times, avg 6 ms)
 59889 ms: std::vector<$>::__construct_at_end<$> (8132 times, avg 7 ms)
 59276 ms: std::vector<$>::__emplace_back_slow_path<$> (5168 times, avg 11 ms)
 58353 ms: std::__exception_guard_exceptions<$>::~__exception_guard_exceptions (9587 times, avg 6 ms)
 56561 ms: std::__uninitialized_allocator_relocate<$> (7232 times, avg 7 ms)
 55287 ms: std::vector<$>::__init_with_size<$> (6964 times, avg 7 ms)
 53801 ms: std::vector<$>::vector (8444 times, avg 6 ms)
 51979 ms: boost::date_time::special_values_parser<$>::special_values_parser (1600 times, avg 32 ms)
 50993 ms: std::map<int, std::string>::operator[] (2384 times, avg 21 ms)
 50306 ms: boost::gregorian::to_simple_string_type<$> (4798 times, avg 10 ms)
 49466 ms: boost::multi_index::multi_index_container<$> (560 times, avg 88 ms)
 47534 ms: std::__tree<$> (17966 times, avg 2 ms)
 45848 ms: boost::date_time::special_values_parser<$>::sv_strings (1600 times, avg 28 ms)
 45213 ms: boost::date_time::date_formatter<$>::date_to_string (9600 times, avg 4 ms)

**** Functions that took longest to compile:
 10544 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (/Users/julien/Software/Others/OpenStudio/src/radiance/ForwardTranslator.cpp)
  4053 ms: Init_openstudiomodelhvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelHVAC_wrap.cxx)
  2696 ms: Init_openstudiomodelresources (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelResources_wrap.cxx)
  2054 ms: Init_openstudiomodelstraightcomponent (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelStraightComponent_wrap.cxx)
  1957 ms: openstudio::IddFactory::IddFactory() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory.cxx)
  1806 ms: Init_openstudiomodelgeometry (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGeometry_wrap.cxx)
  1753 ms: openstudio::model::detail::Model_Impl::ModelObjectCreator::ModelObje... (/Users/julien/Software/Others/OpenStudio/src/model/Model.cpp)
  1508 ms: openstudio::isomodel::ForwardTranslator::translateModel(openstudio::... (/Users/julien/Software/Others/OpenStudio/src/isomodel/ForwardTranslator.cpp)
  1157 ms: Init_openstudiomodelcore (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelCore_wrap.cxx)
  1126 ms: openstudio::model::detail::OutputTableMonthly_Impl::standardReports() (/Users/julien/Software/Others/OpenStudio/src/model/OutputTableMonthly.cpp)
  1038 ms: openstudio::IddFactory::registerEnergyPlusObjectsInCallbackMap() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory_EnergyPlus.cxx)
   931 ms: Init_openstudiomodelgenerators (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGenerators_wrap.cxx)
   900 ms: Init_openstudiomodelzonehvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelZoneHVAC_wrap.cxx)
   773 ms: EnergyPlusFixture_ForwardTranslator_HeatPumpAirToWater_Test::TestBod... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/HeatPumpAirToWater_GTest.cpp)
   760 ms: gbXMLFixture_ForwardTranslator_IDs_Names_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/gbxml/Test/ForwardTranslator_GTest.cpp)
   746 ms: ModelFixture_CoilCoolingDXSingleSpeedThermalStorage_GettersSetters_T... (/Users/julien/Software/Others/OpenStudio/src/model/test/CoilCoolingDXSingleSpeedThermalStorage_GTest.cpp)
   716 ms: openstudio::sdd::ReverseTranslator::translateSDD(pugi::xml_node cons... (/Users/julien/Software/Others/OpenStudio/src/sdd/ReverseTranslator.cpp)
   628 ms: openstudio::model::ScheduleTypeRegistry::ScheduleTypeRegistry() (/Users/julien/Software/Others/OpenStudio/src/model/ScheduleTypeRegistry.cpp)
   599 ms: openstudio::energyplus::GeometryTranslator::convertSimpleSurfaces(op... (/Users/julien/Software/Others/OpenStudio/src/energyplus/GeometryTranslator.cpp)
   594 ms: EnergyPlusFixture_ForwardTranslator_AirLoopHVACUnitarySystem_Nodes_T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/AirLoopHVACUnitarySystem_GTest.cpp)
   588 ms: openstudio::model::ThreeJSReverseTranslator::modelFromThreeJS(openst... (/Users/julien/Software/Others/OpenStudio/src/model/ThreeJSReverseTranslator.cpp)
   588 ms: openstudio::gltf::GltfUserData::GltfUserData(tinygltf::Value const&) (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfUserData.cpp)
   570 ms: tinygltf::SerializeGltfModel(tinygltf::Model const*, nlohmann::json_... (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfForwardTranslator.cpp)
   541 ms: EnergyPlusFixture_ForwardTranslator_CoilCoolingDXSingleSpeedThermalS... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/CoilCoolingDXSingleSpeedThermalStorage_GTest.cpp)
   540 ms: ModelFixture_ChillerElectricASHRAE205_Loops_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/ChillerElectricASHRAE205_GTest.cpp)
   539 ms: Init_openstudiomodelairflow (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelAirflow_wrap.cxx)
   520 ms: EnergyPlusFixture_ForwardTranslatorZoneMixing_DifferentZones_Test::T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/ZoneMixing_GTest.cpp)
   510 ms: openstudio::IddFactory::registerOpenStudioObjectsInCallbackMap() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory_OpenStudio.cxx)
   509 ms: ModelFixture_SizingZone_GettersSetters_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/SizingZone_GTest.cpp)
   480 ms: openstudio::FloorplanJS::makeGeometries(Json::Value const&, Json::Va... (/Users/julien/Software/Others/OpenStudio/src/utilities/geometry/FloorplanJS.cpp)

**** Function sets that took longest to compile / optimize:
 12900 ms: std::__1::__wrap_iter<$> std::__1::vector<$>::__insert_with_size[abi... (1520 times, avg 8 ms)
 10544 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (1 times, avg 10544 ms)
  7245 ms: EnumBase<$>::buildStrings(bool) (2478 times, avg 2 ms)
  6687 ms: EnumBase<$>::lookupValue(int) (2311 times, avg 2 ms)
  6286 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (1996 times, avg 3 ms)
  5663 ms: std::__1::basic_stringstream<$>::basic_stringstream[abi:nqe210106]() (1854 times, avg 3 ms)
  5344 ms: EnumBase<$>::buildValues() (2312 times, avg 2 ms)
  4955 ms: void swig::setslice<$>(std::__1::vector<$>*, long, long, long, std::... (713 times, avg 6 ms)
  4599 ms: std::__1::vector<$>* swig::getslice<$>(std::__1::vector<$> const*, l... (713 times, avg 6 ms)
  4226 ms: std::__1::ostreambuf_iterator<$> std::__1::__pad_and_output[abi:nqe2... (1939 times, avg 2 ms)
  4188 ms: boost::optional<$> openstudio::IdfObject::optionalCast<$>() const (2979 times, avg 1 ms)
  4110 ms: void std::__1::__tree_balance_after_insert[abi:nqe210106]<$>(std::__... (1758 times, avg 2 ms)
  4032 ms: std::__1::basic_string<$>& std::__1::basic_string<$>::__assign_no_al... (3169 times, avg 1 ms)
  4024 ms: std::__1::basic_ostream<$>& std::__1::__put_character_sequence[abi:n... (1939 times, avg 2 ms)
  4002 ms: void swig::delslice<$>(std::__1::vector<$>*, long, long, long) (713 times, avg 5 ms)
  3745 ms: std::__1::basic_stringbuf<$>::__init_buf_ptrs[abi:nqe210106]() (1885 times, avg 1 ms)
  3645 ms: std::__1::vector<$>::reserve(unsigned long) (2683 times, avg 1 ms)
  3405 ms: std::__1::vector<$>::~vector[abi:nqe210106]() (2191 times, avg 1 ms)
  3338 ms: boost::re_detail_500::basic_regex_parser<$>::parse_perl_extension() (59 times, avg 56 ms)
  3141 ms: std::__1::vector<$> openstudio::model::Model::getModelObjectsByName<... (1098 times, avg 2 ms)
  2817 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (992 times, avg 2 ms)
  2515 ms: swig::traits_asptr_stdseq<$>::asptr(unsigned long, std::__1::vector<... (761 times, avg 3 ms)
  2370 ms: boost::optional<$>::~optional() (1297 times, avg 1 ms)
  2359 ms: swig::traits_info<$>::type_info() (2833 times, avg 0 ms)
  2218 ms: boost::re_detail_500::basic_regex_creator<$>::append_set(boost::re_d... (118 times, avg 18 ms)
  2163 ms: boost::optional<$> openstudio::model::Model::getModelObject<$>(opens... (1120 times, avg 1 ms)
  2118 ms: boost::optional<$> openstudio::model::Model::getConcreteModelObjectB... (1074 times, avg 1 ms)
  1980 ms: void swig::setslice<$>(std::__1::vector<$>*, long, long, std::__1::v... (713 times, avg 2 ms)
  1943 ms: std::__1::shared_ptr<$>::~shared_ptr[abi:nqe210106]() (921 times, avg 2 ms)
  1897 ms: swig::traits_asptr_stdseq<$>::asptr(_object*, std::__1::vector<$>**) (761 times, avg 2 ms)

**** Expensive headers:
442266 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/sql/SqlFile.hpp (included 559 times, avg 791 ms), included via:
  490x: ModelFixture.hpp
  39x: <direct include>
  15x: OSWorkflow.hpp OSRunner.hpp
  12x: OSRunner.hpp
  3x: SqlFileFixture.hpp

416310 ms: /Users/julien/Software/Others/OpenStudio/src/model/test/ModelFixture.hpp (included 490 times, avg 849 ms), included via:
  490x: <direct include>

206760 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/Logger.hpp (included 167 times, avg 1238 ms), included via:
  34x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  17x: IdfObject.hpp
  14x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  7x: ReverseTranslator.hpp
  6x: Assert.hpp
  5x: <direct include>
  ...

164337 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/LogMessage.hpp (included 168 times, avg 978 ms), included via:
  34x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  17x: IdfObject.hpp Logger.hpp
  14x: OSWorkflow.hpp OSRunner.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  7x: ReverseTranslator.hpp Logger.hpp
  5x: ReverseTranslator.hpp Logger.hpp
  5x: Assert.hpp Logger.hpp
  ...

159277 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/data/TimeSeries.hpp (included 644 times, avg 247 ms), included via:
  490x: ModelFixture.hpp SqlFile.hpp SqlFileDataDictionary.hpp
  34x: ScheduleDay_Impl.hpp
  30x: ConcreteModelObjects.hpp ScheduleDay_Impl.hpp
  28x: SqlFile.hpp SqlFileDataDictionary.hpp
  15x: OSWorkflow.hpp OSRunner.hpp SqlFile.hpp SqlFileDataDictionary.hpp
  15x: <direct include>
  ...

156522 ms: /Users/julien/.conan2/p/gtestc7bc09ec8a5ac/p/include/gtest/gtest.h (included 839 times, avg 186 ms), included via:
  779x: <direct include>
  42x: ModelFixture.hpp
  1x: BCLFixture.hpp
  1x: SqlFileFixture.hpp
  1x: IddFixture.hpp
  1x: EnergyPlusFixture.hpp
  ...

148256 ms: /Users/julien/Software/Others/OpenStudio/src/model/Model_Impl.hpp (included 419 times, avg 353 ms), included via:
  408x: <direct include>
  6x: ZoneHVACBaseboardConvectiveWater_Impl.hpp
  3x: Component_Impl.hpp
  2x: ConcreteModelObjects.hpp ZoneHVACBaseboardConvectiveWater_Impl.hpp

131016 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/time/Date.hpp (included 946 times, avg 138 ms), included via:
  490x: ModelFixture.hpp SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp
  297x: Model_Impl.hpp SiteGroundTemperatureBuildingSurface.hpp
  25x: ScheduleDay_Impl.hpp TimeSeries.hpp
  16x: SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp
  15x: OSWorkflow.hpp OSRunner.hpp SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp
  15x: <direct include>
  ...

124049 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/data/DataEnums.hpp (included 970 times, avg 127 ms), included via:
  490x: ModelFixture.hpp SqlFile.hpp SummaryData.hpp
  304x: Model_Impl.hpp Facility.hpp
  83x: <direct include>
  19x: SqlFile.hpp SummaryData.hpp
  15x: OSWorkflow.hpp OSRunner.hpp SqlFile.hpp SummaryData.hpp
  12x: OSRunner.hpp SqlFile.hpp SummaryData.hpp
  ...

123441 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/time/Time.hpp (included 1598 times, avg 77 ms), included via:
  675x: ForwardTranslator.hpp
  490x: ModelFixture.hpp SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp Date.hpp
  289x: Model_Impl.hpp SiteGroundTemperatureBuildingSurface.hpp Date.hpp
  19x: ScheduleDay_Impl.hpp
  15x: OSWorkflow.hpp OSRunner.hpp SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp Date.hpp
  11x: OSRunner.hpp SqlFile.hpp SqlFileDataDictionary.hpp TimeSeries.hpp Date.hpp
  ...

  done in 1.3s.
```
  ┌──────────┬────────┬────────┬────────┬─────────────┐
  │          │ No PCH │ PCH v1 │ PCH v2 │ Delta total │
  ├──────────┼────────┼────────┼────────┼─────────────┤
  │ Frontend │ 8269 s │ 3482 s │ 2853 s │ -65%        │
  ├──────────┼────────┼────────┼────────┼─────────────┤
  │ Backend  │ 2926 s │ 3037 s │ 2929 s │ flat        │
  └──────────┴────────┴────────┴────────┴─────────────┘

```
Analyzing build trace from 'capture_more_pch.bin'...
**** Time summary:
Compilation (2455 times):
  Parsing (frontend):         2853.0 s
  Codegen & opts (backend):   2929.0 s

**** Files that took longest to parse (compiler frontend):
 43682 ms: ./ruby/engine/CMakeFiles/rubyengine.dir/embedded_files.cxx.o
 32491 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 31209 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
 24200 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 24021 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 23524 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 22907 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/embedded_files.cxx.o
 21890 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 16677 ms: ./src/utilities/CMakeFiles/openstudio_utilities.dir/idd/IddFactory_EnergyPlus.cxx.o
 16304 ms: ./src/model/CMakeFiles/openstudio_model.dir/Model.cpp.o

**** Files that took longest to codegen (compiler backend):
111785 ms: ./src/model/CMakeFiles/python_OpenStudioModelHVAC.dir/python_OpenStudioModelHVAC_wrap.cxx.o
 98503 ms: ./src/model/CMakeFiles/python_OpenStudioModelResources.dir/python_OpenStudioModelResources_wrap.cxx.o
 98085 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelHVAC.dir/ruby_OpenStudioModelHVAC_wrap.cxx.o
 95377 ms: ./src/model/CMakeFiles/python_OpenStudioModelStraightComponent.dir/python_OpenStudioModelStraightComponent_wrap.cxx.o
 79536 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelResources.dir/ruby_OpenStudioModelResources_wrap.cxx.o
 72665 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelStraightComponent.dir/ruby_OpenStudioModelStraightComponent_wrap.cxx.o
 63018 ms: ./src/model/CMakeFiles/python_OpenStudioModelGeometry.dir/python_OpenStudioModelGeometry_wrap.cxx.o
 59210 ms: ./src/model/CMakeFiles/python_OpenStudioModelCore.dir/python_OpenStudioModelCore_wrap.cxx.o
 50995 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelGeometry.dir/ruby_OpenStudioModelGeometry_wrap.cxx.o
 44204 ms: ./src/model/CMakeFiles/ruby_OpenStudioModelCore.dir/ruby_OpenStudioModelCore_wrap.cxx.o

**** Templates that took longest to instantiate:
178967 ms: EnumBase<openstudio::IddFileType>::EnumBase (4517 times, avg 39 ms)
177914 ms: EnumBase<openstudio::IddFileType>::lookupValue (4515 times, avg 39 ms)
114100 ms: boost::date_time::parse_iso_time<boost::posix_time::ptime> (2266 times, avg 50 ms)
109899 ms: boost::date_time::parse_date<boost::gregorian::date> (2266 times, avg 48 ms)
 85325 ms: EnumBase<openstudio::IddFileType>::getValues (2249 times, avg 37 ms)
 84838 ms: EnumBase<openstudio::IddFileType>::buildValues (2247 times, avg 37 ms)
 75817 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (2266 times, avg 33 ms)
 74038 ms: EnumBase<openstudio::IddFileType>::getLookupMap (2243 times, avg 33 ms)
 73026 ms: EnumBase<openstudio::IddFileType>::buildLookupMap (2242 times, avg 32 ms)
 66870 ms: boost::date_time::special_values_parser<boost::gregorian::date, char... (2266 times, avg 29 ms)
 61094 ms: boost::date_time::month_str_to_ushort<boost::gregorian::greg_month> (2266 times, avg 26 ms)
 56847 ms: EnumBase<openstudio::IddFileType>::getNames (2247 times, avg 25 ms)
 55668 ms: EnumBase<openstudio::IddFileType>::buildStrings (2247 times, avg 24 ms)
 52184 ms: boost::gregorian::to_simple_string_type<wchar_t> (2268 times, avg 23 ms)
 47489 ms: std::map<int, std::string>::operator[] (2415 times, avg 19 ms)
 45214 ms: std::map<std::string, unsigned short>::map (2266 times, avg 19 ms)
 41522 ms: boost::date_time::string_parse_tree<char>::string_parse_tree (4532 times, avg 9 ms)
 37464 ms: testing::internal::ValueArray<bool, bool>::operator ParamGenerator<b... (839 times, avg 44 ms)
 36240 ms: std::map<std::string, unsigned short>::insert<const std::pair<const ... (2266 times, avg 15 ms)
 35798 ms: std::map<std::string, int>::operator[] (2352 times, avg 15 ms)
 33472 ms: boost::date_time::from_simple_string_type<boost::gregorian::date, wc... (2266 times, avg 14 ms)
 32850 ms: std::vector<std::string>::push_back (3138 times, avg 10 ms)
 32365 ms: boost::algorithm::to_upper_copy<std::string> (2350 times, avg 13 ms)
 31981 ms: boost::algorithm::detail::transform_range_copy<std::string, std::str... (2350 times, avg 13 ms)
 31026 ms: boost::date_time::date_formatter<boost::gregorian::date, boost::date... (2266 times, avg 13 ms)
 29950 ms: boost::date_time::ymd_formatter<boost::date_time::year_month_day_bas... (2266 times, avg 13 ms)
 29258 ms: boost::basic_regex<char>::assign (126 times, avg 232 ms)
 26635 ms: boost::algorithm::iequals<std::string, std::string> (2425 times, avg 10 ms)
 25990 ms: openstudio::SqlFile::execAndReturnFirstDouble<> (2209 times, avg 11 ms)
 25957 ms: std::__tree<std::__value_type<int, std::string>, std::__map_value_co... (2350 times, avg 11 ms)

**** Template sets that took longest to instantiate:
231150 ms: EnumBase<$>::EnumBase (42290 times, avg 5 ms)
217692 ms: EnumBase<$>::lookupValue (27619 times, avg 7 ms)
114100 ms: boost::date_time::parse_iso_time<$> (2266 times, avg 50 ms)
109899 ms: boost::date_time::parse_date<$> (2266 times, avg 48 ms)
103681 ms: EnumBase<$>::getValues (9717 times, avg 10 ms)
102166 ms: EnumBase<$>::buildValues (9113 times, avg 11 ms)
 81029 ms: EnumBase<$>::getLookupMap (4342 times, avg 18 ms)
 79288 ms: EnumBase<$>::buildLookupMap (3777 times, avg 20 ms)
 75817 ms: boost::date_time::special_values_parser<$>::special_values_parser (2266 times, avg 33 ms)
 75314 ms: boost::gregorian::to_simple_string_type<$> (6796 times, avg 11 ms)
 71403 ms: std::vector<$>::emplace_back<$> (8102 times, avg 8 ms)
 70517 ms: EnumBase<$>::getNames (8154 times, avg 8 ms)
 70099 ms: std::vector<$>::push_back (7826 times, avg 8 ms)
 70015 ms: std::reverse_iterator<$> (10656 times, avg 6 ms)
 68762 ms: boost::date_time::date_formatter<$>::date_to_string (13596 times, avg 5 ms)
 68617 ms: EnumBase<$>::buildStrings (8001 times, avg 8 ms)
 67752 ms: std::vector<$> (25298 times, avg 2 ms)
 66870 ms: boost::date_time::special_values_parser<$>::sv_strings (2266 times, avg 29 ms)
 65019 ms: std::__tree<$>::__emplace_unique_key_args<$> (7778 times, avg 8 ms)
 63222 ms: std::vector<$>::__swap_out_circular_buffer (7732 times, avg 8 ms)
 61659 ms: boost::date_time::ymd_formatter<$>::ymd_to_string (13596 times, avg 4 ms)
 61094 ms: boost::date_time::month_str_to_ushort<$> (2266 times, avg 26 ms)
 60516 ms: std::vector<$>::__emplace_back_slow_path<$> (5478 times, avg 11 ms)
 59716 ms: std::vector<$>::__construct_at_end<$> (8645 times, avg 6 ms)
 58807 ms: std::__make_exception_guard<$> (9821 times, avg 5 ms)
 57311 ms: std::__uninitialized_allocator_relocate<$> (7574 times, avg 7 ms)
 56437 ms: std::__exception_guard_exceptions<$>::~__exception_guard_exceptions (9671 times, avg 5 ms)
 55708 ms: std::map<$>::map (8129 times, avg 6 ms)
 54457 ms: std::vector<$>::__init_with_size<$> (7477 times, avg 7 ms)
 50668 ms: std::vector<$>::vector (7514 times, avg 6 ms)

**** Functions that took longest to compile:
  9051 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (/Users/julien/Software/Others/OpenStudio/src/radiance/ForwardTranslator.cpp)
  3713 ms: Init_openstudiomodelhvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelHVAC_wrap.cxx)
  2876 ms: Init_openstudiomodelresources (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelResources_wrap.cxx)
  2366 ms: Init_openstudiomodelstraightcomponent (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelStraightComponent_wrap.cxx)
  1800 ms: openstudio::model::detail::Model_Impl::ModelObjectCreator::ModelObje... (/Users/julien/Software/Others/OpenStudio/src/model/Model.cpp)
  1584 ms: Init_openstudiomodelgeometry (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGeometry_wrap.cxx)
  1225 ms: openstudio::IddFactory::IddFactory() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory.cxx)
  1186 ms: openstudio::isomodel::ForwardTranslator::translateModel(openstudio::... (/Users/julien/Software/Others/OpenStudio/src/isomodel/ForwardTranslator.cpp)
  1085 ms: openstudio::IddFactory::registerEnergyPlusObjectsInCallbackMap() (/Users/julien/Software/Others/OS-build-release/src/utilities/idd/IddFactory_EnergyPlus.cxx)
  1073 ms: Init_openstudiomodelcore (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelCore_wrap.cxx)
  1044 ms: openstudio::model::detail::OutputTableMonthly_Impl::standardReports() (/Users/julien/Software/Others/OpenStudio/src/model/OutputTableMonthly.cpp)
   988 ms: Init_openstudiomodelzonehvac (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelZoneHVAC_wrap.cxx)
   791 ms: EnergyPlusFixture_ForwardTranslator_HeatPumpAirToWater_Test::TestBod... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/HeatPumpAirToWater_GTest.cpp)
   791 ms: Init_openstudiomodelgenerators (/Users/julien/Software/Others/OS-build-release/src/model/ruby_OpenStudioModelGenerators_wrap.cxx)
   674 ms: openstudio::model::ThreeJSReverseTranslator::modelFromThreeJS(openst... (/Users/julien/Software/Others/OpenStudio/src/model/ThreeJSReverseTranslator.cpp)
   666 ms: gbXMLFixture_ForwardTranslator_IDs_Names_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/gbxml/Test/ForwardTranslator_GTest.cpp)
   653 ms: ModelFixture_CoilCoolingDXSingleSpeedThermalStorage_GettersSetters_T... (/Users/julien/Software/Others/OpenStudio/src/model/test/CoilCoolingDXSingleSpeedThermalStorage_GTest.cpp)
   620 ms: openstudio::model::ScheduleTypeRegistry::ScheduleTypeRegistry() (/Users/julien/Software/Others/OpenStudio/src/model/ScheduleTypeRegistry.cpp)
   596 ms: EnergyPlusFixture_ForwardTranslatorZoneMixing_DifferentZones_Test::T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/ZoneMixing_GTest.cpp)
   565 ms: openstudio::sdd::ReverseTranslator::translateSDD(pugi::xml_node cons... (/Users/julien/Software/Others/OpenStudio/src/sdd/ReverseTranslator.cpp)
   565 ms: openstudio::gltf::GltfUserData::GltfUserData(tinygltf::Value const&) (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfUserData.cpp)
   537 ms: ModelFixture_ChillerElectricASHRAE205_Loops_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/ChillerElectricASHRAE205_GTest.cpp)
   537 ms: EnergyPlusFixture_ForwardTranslator_AirLoopHVACUnitarySystem_Nodes_T... (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/AirLoopHVACUnitarySystem_GTest.cpp)
   496 ms: ModelFixture_UniqueModelObjectCachedGetters_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/Model_GTest.cpp)
   496 ms: tinygltf::SerializeGltfModel(tinygltf::Model const*, nlohmann::json_... (/Users/julien/Software/Others/OpenStudio/src/gltf/GltfForwardTranslator.cpp)
   471 ms: GeometryFixture_RoofExtendedSkeleton_3_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/utilities/geometry/Test/RoofGeometry_GTest.cpp)
   460 ms: openstudio::FloorplanJS::makeGeometries(Json::Value const&, Json::Va... (/Users/julien/Software/Others/OpenStudio/src/utilities/geometry/FloorplanJS.cpp)
   452 ms: ISOModelFixture_UserModel_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/isomodel/Test/UserModel_GTest.cpp)
   450 ms: ModelFixture_SizingZone_GettersSetters_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/model/test/SizingZone_GTest.cpp)
   443 ms: EnergyPlusFixture_ReverseTranslator_FanComponentModel_Test::TestBody() (/Users/julien/Software/Others/OpenStudio/src/energyplus/Test/FanComponentModel_GTest.cpp)

**** Function sets that took longest to compile / optimize:
 11990 ms: std::__1::__wrap_iter<$> std::__1::vector<$>::__insert_with_size[abi... (1520 times, avg 7 ms)
  9051 ms: openstudio::radiance::ForwardTranslator::buildingSpaces(boost::files... (1 times, avg 9051 ms)
  7075 ms: EnumBase<$>::buildStrings(bool) (2478 times, avg 2 ms)
  6464 ms: EnumBase<$>::lookupValue(int) (2311 times, avg 2 ms)
  5920 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (1996 times, avg 2 ms)
  5498 ms: std::__1::basic_stringstream<$>::basic_stringstream[abi:nqe210106]() (1854 times, avg 2 ms)
  5185 ms: EnumBase<$>::buildValues() (2312 times, avg 2 ms)
  5042 ms: void swig::setslice<$>(std::__1::vector<$>*, long, long, long, std::... (713 times, avg 7 ms)
  4725 ms: std::__1::vector<$>* swig::getslice<$>(std::__1::vector<$> const*, l... (713 times, avg 6 ms)
  4110 ms: std::__1::ostreambuf_iterator<$> std::__1::__pad_and_output[abi:nqe2... (1939 times, avg 2 ms)
  4084 ms: boost::optional<$> openstudio::IdfObject::optionalCast<$>() const (2979 times, avg 1 ms)
  4066 ms: void swig::delslice<$>(std::__1::vector<$>*, long, long, long) (713 times, avg 5 ms)
  4064 ms: std::__1::basic_string<$>& std::__1::basic_string<$>::__assign_no_al... (3155 times, avg 1 ms)
  3646 ms: void std::__1::__tree_balance_after_insert[abi:nqe210106]<$>(std::__... (1758 times, avg 2 ms)
  3584 ms: std::__1::basic_ostream<$>& std::__1::__put_character_sequence[abi:n... (1939 times, avg 1 ms)
  3575 ms: std::__1::vector<$>::reserve(unsigned long) (2683 times, avg 1 ms)
  3482 ms: std::__1::basic_stringbuf<$>::__init_buf_ptrs[abi:nqe210106]() (1885 times, avg 1 ms)
  3317 ms: boost::re_detail_500::basic_regex_parser<$>::parse_perl_extension() (59 times, avg 56 ms)
  3295 ms: std::__1::vector<$>::~vector[abi:nqe210106]() (1962 times, avg 1 ms)
  2805 ms: std::__1::vector<$> openstudio::model::Model::getModelObjectsByName<... (1098 times, avg 2 ms)
  2592 ms: std::__1::vector<$> openstudio::model::Model::getConcreteModelObject... (992 times, avg 2 ms)
  2439 ms: swig::traits_asptr_stdseq<$>::asptr(unsigned long, std::__1::vector<... (761 times, avg 3 ms)
  2269 ms: boost::optional<$>::~optional() (1167 times, avg 1 ms)
  2204 ms: boost::re_detail_500::basic_regex_creator<$>::append_set(boost::re_d... (118 times, avg 18 ms)
  2036 ms: swig::traits_asptr_stdseq<$>::asptr(_object*, std::__1::vector<$>**) (761 times, avg 2 ms)
  2024 ms: swig::traits_info<$>::type_info() (2696 times, avg 0 ms)
  2014 ms: boost::optional<$> openstudio::model::Model::getConcreteModelObjectB... (1074 times, avg 1 ms)
  1978 ms: boost::optional<$> openstudio::model::Model::getModelObject<$>(opens... (1120 times, avg 1 ms)
  1796 ms: std::__1::vector<$>* swig::getslice<$>(std::__1::vector<$> const*, i... (713 times, avg 2 ms)
  1727 ms: void swig::setslice<$>(std::__1::vector<$>*, long, long, std::__1::v... (713 times, avg 2 ms)

**** Expensive headers:
157232 ms: /Users/julien/.conan2/p/gtestc7bc09ec8a5ac/p/include/gtest/gtest.h (included 839 times, avg 187 ms), included via:
  779x: <direct include>
  42x: ModelFixture.hpp
  1x: XMLValidatorFixture.hpp
  1x: CoreFixture.hpp
  1x: SqlFileFixture.hpp
  1x: GltfFixture.hpp
  ...

111734 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/Logger.hpp (included 100 times, avg 1117 ms), included via:
  32x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  17x: IdfObject.hpp
  5x: <direct include>
  4x: Assert.hpp
  3x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  3x: VersionTranslator.hpp Schedule.hpp ScheduleBase.hpp ResourceObject.hpp ParentObject.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp
  ...

96140 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/core/LogMessage.hpp (included 101 times, avg 951 ms), included via:
  32x: Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  17x: IdfObject.hpp Logger.hpp
  4x: Logger.hpp
  3x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  3x: Assert.hpp Logger.hpp
  3x: VersionTranslator.hpp Schedule.hpp ScheduleBase.hpp ResourceObject.hpp ParentObject.hpp ModelObject.hpp WorkspaceObject.hpp IdfObject.hpp Logger.hpp
  ...

92809 ms: /Users/julien/Software/Others/OpenStudio/src/model/ModelObject_Impl.hpp (included 1820 times, avg 50 ms), included via:
  123x: Model_Impl.hpp ClimateZones.hpp ModelExtensibleGroup.hpp
  77x: Schedule_Impl.hpp ScheduleBase_Impl.hpp ResourceObject_Impl.hpp ParentObject_Impl.hpp
  56x: Node_Impl.hpp StraightComponent_Impl.hpp HVACComponent_Impl.hpp ParentObject_Impl.hpp
  25x: Building_Impl.hpp ParentObject_Impl.hpp
  21x: Surface.hpp SurfacePropertyExposedFoundationPerimeter_Impl.hpp
  17x: OutputVariable_Impl.hpp
  ...

88091 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idf/WorkspaceObject_Impl.hpp (included 1841 times, avg 47 ms), included via:
  123x: Model_Impl.hpp ClimateZones.hpp ModelExtensibleGroup.hpp ModelObject_Impl.hpp
  77x: Schedule_Impl.hpp ScheduleBase_Impl.hpp ResourceObject_Impl.hpp ParentObject_Impl.hpp ModelObject_Impl.hpp
  56x: Node_Impl.hpp StraightComponent_Impl.hpp HVACComponent_Impl.hpp ParentObject_Impl.hpp ModelObject_Impl.hpp
  25x: Building_Impl.hpp ParentObject_Impl.hpp ModelObject_Impl.hpp
  21x: Surface.hpp SurfacePropertyExposedFoundationPerimeter_Impl.hpp ModelObject_Impl.hpp
  17x: OutputVariable_Impl.hpp ModelObject_Impl.hpp
  ...

79860 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idf/IdfObject.hpp (included 97 times, avg 823 ms), included via:
  37x: Model.hpp ModelObject.hpp WorkspaceObject.hpp
  25x: <direct include>
  4x: VersionTranslator.hpp Schedule.hpp ScheduleBase.hpp ResourceObject.hpp ParentObject.hpp ModelObject.hpp WorkspaceObject.hpp
  3x: ForwardTranslator.hpp Model.hpp ModelObject.hpp WorkspaceObject.hpp
  3x: WorkspaceObject.hpp
  3x: IdfFile.hpp
  ...

62616 ms: /Users/julien/Software/Others/OpenStudio/src/model/Model.hpp (included 58 times, avg 1079 ms), included via:
  45x: <direct include>
  3x: ForwardTranslator.hpp
  3x: OSRunner.hpp
  2x: OSWorkflow.hpp OSRunner.hpp
  2x: ForwardTranslator.hpp
  2x: MeasureManager.hpp
  ...

62227 ms: /Users/julien/Software/Others/OpenStudio/src/utilities/idd/IddField.hpp (included 1973 times, avg 31 ms), included via:
  490x: ModelFixture.hpp
  77x: Schedule_Impl.hpp ScheduleBase_Impl.hpp ResourceObject_Impl.hpp ParentObject_Impl.hpp ModelObject_Impl.hpp WorkspaceObject_Impl.hpp IdfObject_Impl.hpp IddObject.hpp
  59x: Model_Impl.hpp ClimateZones.hpp ModelExtensibleGroup.hpp ModelObject_Impl.hpp WorkspaceObject_Impl.hpp IdfObject_Impl.hpp IddObject.hpp
  40x: Node_Impl.hpp StraightComponent_Impl.hpp HVACComponent_Impl.hpp ParentObject_Impl.hpp ModelObject_Impl.hpp WorkspaceObject_Impl.hpp IdfObject_Impl.hpp IddObject.hpp
  24x: IddFactory.hxx IddObject.hpp
  21x: IddObject.hpp
  ...

57963 ms: /Users/julien/Software/Others/OpenStudio/src/model/Model_Impl.hpp (included 419 times, avg 138 ms), included via:
  408x: <direct include>
  6x: ZoneHVACBaseboardConvectiveWater_Impl.hpp
  3x: Component_Impl.hpp
  2x: ConcreteModelObjects.hpp ZoneHVACBaseboardConvectiveWater_Impl.hpp

57465 ms: /Users/julien/Software/Others/OpenStudio/src/model/ModelObject.hpp (included 60 times, avg 957 ms), included via:
  37x: Model.hpp
  4x: VersionTranslator.hpp Schedule.hpp ScheduleBase.hpp ResourceObject.hpp ParentObject.hpp
  3x: ForwardTranslator.hpp Model.hpp
  3x: OSRunner.hpp Model.hpp
  2x: ForwardTranslator.hpp WindowGroup.hpp Space.hpp PlanarSurfaceGroup.hpp OpaqueMaterial.hpp Material.hpp ResourceObject.hpp ParentObject.hpp
  2x: OSWorkflow.hpp OSRunner.hpp Model.hpp
  ...

  done in 1.2s.
```
Fixup PCH on GCC: utilities_tests doesn't have the same defines as the other tests targets, make pch unique

No PCH possible on INTERFACE library in msvc

GCC and MSVC reject the PCH if there isn't the same XXX_EXPORTS macro defined
@jmarrec
Copy link
Copy Markdown
Collaborator Author

jmarrec commented May 18, 2026

Ok, I'm struggling way too much between the different platforms, I will ONLY do the PCH changes now.

Metric develop (before) pch_only (after) Delta
Wall time 18m 40s 11m 16s −40%
User time 162m 7s 98m 30s −39%
Sys time 11m 15s 5m 5s −55%
Frontend (parsing) 8241 s 2900 s −65%
Backend (codegen) 2903 s 2955 s +2%
Total compile 11144 s 5855 s −47%

@jmarrec jmarrec force-pushed the improve_build_times branch from 945bd55 to 8d8fdb6 Compare May 18, 2026 12:37
@jmarrec jmarrec changed the title Improve build times: cut time almost in half by using PCH + extern template Improve build times: cut time almost in half by using PCH May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Developer Issue Enhancement Request Pull Request - Ready for CI This pull request if finalized and is ready for continuous integration verification prior to merge.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant