pika-org / pika

pika is a C++ tasking library built on std::execution with fibers, CUDA, HIP, and MPI support.
https://pikacpp.org
Boost Software License 1.0
67 stars 10 forks source link

Remove/replace remaining Boost includes #12

Closed msimberg closed 2 months ago

msimberg commented 2 years ago

It would now be feasible to completely remove all dependencies on Boost. Some things would naturally remove Boost dependencies:

Other headers can likely be brought into pika.

msimberg commented 2 years ago

Current situation is the following.

Main library, include counts per boost header:

> rg --no-heading --no-line-number --no-filename --no-messages '#include\W+boost' libs/pika/*/{include,src}/**/*.{cpp,hpp,cu} | sort | uniq -c | sort -r
      7 #include <boost/tokenizer.hpp>
      7 #include <boost/shared_array.hpp>
      5 #include <boost/version.hpp>
      2 #include <boost/variant.hpp>
      2 #include <boost/lockfree/queue.hpp>
      2 #include <boost/exception/exception.hpp>
      2 #include <boost/exception/diagnostic_information.hpp>
      2 #include <boost/dynamic_bitset.hpp>
      2 #include <boost/config.hpp>
      1 #include <boost/shared_ptr.hpp>
      1 #include <boost/range/irange.hpp>
      1 #include <boost/multi_array.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/lockfree/policies.hpp>
      1 #include <boost/lockfree/detail/tagged_ptr.hpp>
      1 #include <boost/lockfree/detail/prefix.hpp>
      1 #include <boost/iterator/iterator_categories.hpp>
      1 #include <boost/intrusive/slist.hpp>
      1 #include <boost/intrusive_ptr.hpp>
      1 #include <boost/functional/hash.hpp>
      1 //    #include <boost/detail/utf8_codecvt_facet.ipp>
      1 #include <boost/context/detail/fcontext.hpp>
      1 #include <boost/container/small_vector.hpp>
      1 #include <boost/array.hpp>

Main library, includes per pika file:

> rg --no-heading --no-line-number --no-messages '#include\W+boost' libs/pika/*/{include,src}/**/*.{cpp,hpp,cu} | sort | uniq
libs/pika/affinity/include/pika/affinity/parse_affinity_options.hpp:#include <boost/variant.hpp>
libs/pika/algorithms/include/pika/parallel/algorithms/copy.hpp:#include <boost/shared_array.hpp>
libs/pika/algorithms/include/pika/parallel/algorithms/detail/set_operation.hpp:#include <boost/shared_array.hpp>libs/pika/algorithms/include/pika/parallel/algorithms/for_loop_reduction.hpp:#include <boost/shared_array.hpp>
libs/pika/algorithms/include/pika/parallel/algorithms/partition.hpp:#include <boost/shared_array.hpp>
libs/pika/algorithms/include/pika/parallel/algorithms/remove.hpp:#include <boost/shared_array.hpp>
libs/pika/algorithms/include/pika/parallel/algorithms/unique.hpp:#include <boost/shared_array.hpp>
libs/pika/algorithms/include/pika/parallel/spmd_block.hpp:#include <boost/range/irange.hpp>
libs/pika/async_cuda/include/pika/async_cuda/cuda_event.hpp:#include <boost/lockfree/stack.hpp>
libs/pika/command_line_handling/src/command_line_handling.cpp:#include <boost/tokenizer.hpp>
libs/pika/concurrency/include/pika/concurrency/deque.hpp:#include <boost/lockfree/detail/tagged_ptr.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/policies.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/version.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/tagged_ptr_pair.hpp:#include <boost/lockfree/detail/prefix.hpp>
libs/pika/config/include/pika/config.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/context/detail/fcontext.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_impl.hpp:#include <boost/version.hpp>
libs/pika/datastructures/include/pika/datastructures/detail/small_vector.hpp:#include <boost/container/small_vector.hpp>
libs/pika/debugging/src/backtrace.cpp:#include <boost/config.hpp>
libs/pika/iterator_support/include/pika/iterator_support/boost_iterator_categories.hpp:#include <boost/iterator/iterator_categories.hpp>
libs/pika/lcos/include/pika/lcos/and_gate.hpp:#include <boost/dynamic_bitset.hpp>
libs/pika/mpi_base/src/mpi_environment.cpp:#include <boost/tokenizer.hpp>
libs/pika/prefix/src/find_prefix.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/include/pika/program_options/detail/utf8_codecvt_facet.hpp://    #include <boost/detail/utf8_codecvt_facet.ipp>
libs/pika/program_options/src/options_description.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/src/split.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/init_ini_data.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/runtime_configuration.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime/src/serialize_exception.cpp:#include <boost/exception/diagnostic_information.hpp>
libs/pika/runtime/src/serialize_exception.cpp:#include <boost/exception/exception.hpp>
libs/pika/schedulers/include/pika/schedulers/lockfree_queue_backends.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/serialization/include/pika/serialization/array.hpp:#include <boost/array.hpp>
libs/pika/serialization/include/pika/serialization/boost_variant.hpp:#include <boost/variant.hpp>
libs/pika/serialization/include/pika/serialization/dynamic_bitset.hpp:#include <boost/dynamic_bitset.hpp>
libs/pika/serialization/include/pika/serialization/intrusive_ptr.hpp:#include <boost/intrusive_ptr.hpp>
libs/pika/serialization/include/pika/serialization/multi_array.hpp:#include <boost/multi_array.hpp>
libs/pika/serialization/include/pika/serialization/serialize_buffer.hpp:#include <boost/shared_array.hpp>
libs/pika/serialization/include/pika/serialization/shared_ptr.hpp:#include <boost/shared_ptr.hpp>
libs/pika/serialization/src/exception_ptr.cpp:#include <boost/exception/diagnostic_information.hpp>
libs/pika/serialization/src/exception_ptr.cpp:#include <boost/exception/exception.hpp>
libs/pika/serialization/src/serializable_any.cpp:#include <boost/functional/hash.hpp>
libs/pika/synchronization/include/pika/synchronization/detail/condition_variable.hpp:#include <boost/intrusive/slist.hpp>
libs/pika/version/src/version.cpp:#include <boost/config.hpp>
libs/pika/version/src/version.cpp:#include <boost/version.hpp>

Tests/examples, include counts per boost header:

> rg --no-heading --no-line-number --no-filename --no-messages '#include\W+boost' {libs/pika/*/tests,tests,examples}/**/*.{cpp,hpp,cu} | sort | uniq -c | sort -r
      5 #include <boost/range/irange.hpp>
      4 #include <boost/lockfree/queue.hpp>
      3 #include <boost/intrusive_ptr.hpp>
      2 #include <boost/tokenizer.hpp>
      2 #include <boost/token_functions.hpp>
      2 #include <boost/config.hpp>
      1 #include <boost/variant.hpp>
      1 #include <boost/spirit/include/support_istream_iterator.hpp>
      1 #include <boost/spirit/include/qi_string.hpp>
      1 #include <boost/spirit/include/qi_parse.hpp>
      1 #include <boost/spirit/include/qi_operator.hpp>
      1 #include <boost/spirit/include/qi_numeric.hpp>
      1 #include <boost/spirit/include/qi_char.hpp>
      1 #include <boost/spirit/include/qi_auxiliary.hpp>
      1 #include <boost/spirit/include/qi_action.hpp>
      1 #include <boost/spirit/include/phoenix.hpp>
      1 #include <boost/shared_ptr.hpp>
      1 #include <boost/shared_array.hpp>
      1 #include <boost/preprocessor/seq/for_each.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/integer/common_factor.hpp>
      1 #include <boost/function.hpp>
      1 #include <boost/dynamic_bitset.hpp>

Tests/examples, includes per pika file:

> rg --no-heading --no-line-number --no-messages '#include\W+boost' {libs/pika/*/{tests,examples},tests,examples}/**/*.{cpp,hpp,cu} | sort | uniq
examples/1d_stencil/1d_stencil_4.cpp:#include <boost/range/irange.hpp>
examples/1d_stencil/1d_stencil_4_parallel.cpp:#include <boost/shared_array.hpp>
examples/balancing/os_thread_num.cpp:#include <boost/lockfree/queue.hpp>
examples/balancing/thread_phase.cpp:#include <boost/lockfree/queue.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/phoenix.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_action.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_auxiliary.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_char.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_numeric.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_operator.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_parse.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_string.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/support_istream_iterator.hpp>
examples/transpose/transpose_await.cpp:#include <boost/range/irange.hpp>
examples/transpose/transpose_smp_block.cpp:#include <boost/range/irange.hpp>
examples/transpose/transpose_smp.cpp:#include <boost/range/irange.hpp>
libs/pika/async_cuda/tests/unit/trivial_demo.cu:#include <boost/preprocessor/seq/for_each.hpp>
libs/pika/concurrency/tests/unit/lockfree_fifo.cpp:#include <boost/lockfree/queue.hpp>
libs/pika/iterator_support/tests/performance/stencil3_iterators.cpp:#include <boost/range/irange.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/tokenizer.hpp>
libs/pika/serialization/tests/unit/any_serialization.cpp:#include <boost/config.hpp>
libs/pika/serialization/tests/unit/polymorphic/smart_ptr_polymorphic.cpp:#include <boost/intrusive_ptr.hpp>
libs/pika/serialization/tests/unit/polymorphic/smart_ptr_polymorphic_nonintrusive.cpp:#include <boost/intrusive_ptr.hpp>
libs/pika/serialization/tests/unit/serialization_boost_variant.cpp:#include <boost/variant.hpp>
libs/pika/serialization/tests/unit/serialization_smart_ptr.cpp:#include <boost/intrusive_ptr.hpp>
libs/pika/serialization/tests/unit/serialization_smart_ptr.cpp:#include <boost/shared_ptr.hpp>
tests/performance/local/function_object_wrapper_overhead.cpp:#include <boost/function.hpp>
tests/performance/local/nonconcurrent_fifo_overhead.cpp:#include <boost/lockfree/queue.hpp>
tests/performance/local/nonconcurrent_lifo_overhead.cpp:#include <boost/lockfree/stack.hpp>
tests/performance/local/timed_task_spawn.cpp:#include <boost/integer/common_factor.hpp>
tests/performance/local/tls_overhead.cpp:#include <boost/config.hpp>
tests/regressions/threads/thread_rescheduling.cpp:#include <boost/dynamic_bitset.hpp>

The remaining major sources of boost includes seem to be serialization (#7), algorithms, coroutines (optional), and the lockfree queues. Let's see how the situation is after #7.

msimberg commented 2 years ago

Updated list:

# main library, include counts per boost header                                                                                                       
      7 #include <boost/tokenizer.hpp>                                                                                                                
      6 #include <boost/shared_array.hpp>                                                                                                             
      5 #include <boost/version.hpp>                                                                                                                  
      2 #include <boost/lockfree/queue.hpp>                                                                                                           
      2 #include <boost/config.hpp>                                                                                                                   
      1 #include <boost/range/irange.hpp>                                                                                                             
      1 #include <boost/lockfree/stack.hpp>                                                                                                           
      1 #include <boost/lockfree/policies.hpp>                                                                                                        
      1 #include <boost/lockfree/detail/tagged_ptr.hpp>                                                                                               
      1 #include <boost/lockfree/detail/prefix.hpp>                                                                                                   
      1 #include <boost/iterator/iterator_categories.hpp>                                                                                             
      1 #include <boost/intrusive/slist.hpp>                                                                                                          
      1 #include <boost/dynamic_bitset.hpp>                                                                                                           
      1 //    #include <boost/detail/utf8_codecvt_facet.ipp>                                                                                          
      1 #include <boost/context/detail/fcontext.hpp>                                                                                                  
      1 #include <boost/container/small_vector.hpp>                                                                                                   

# main library, includes per pika file                                     
libs/pika/algorithms/include/pika/parallel/algorithms/copy.hpp:#include <boost/shared_array.hpp>                
libs/pika/algorithms/include/pika/parallel/algorithms/detail/set_operation.hpp:#include <boost/shared_array.hpp>                                                                                                                 
libs/pika/algorithms/include/pika/parallel/algorithms/for_loop_reduction.hpp:#include <boost/shared_array.hpp>                                        
libs/pika/algorithms/include/pika/parallel/algorithms/partition.hpp:#include <boost/shared_array.hpp>           
libs/pika/algorithms/include/pika/parallel/algorithms/remove.hpp:#include <boost/shared_array.hpp>              
libs/pika/algorithms/include/pika/parallel/algorithms/unique.hpp:#include <boost/shared_array.hpp>              
libs/pika/algorithms/include/pika/parallel/spmd_block.hpp:#include <boost/range/irange.hpp>                     
libs/pika/async_cuda/include/pika/async_cuda/cuda_event.hpp:#include <boost/lockfree/stack.hpp>                 
libs/pika/command_line_handling/src/command_line_handling.cpp:#include <boost/tokenizer.hpp>                    
libs/pika/concurrency/include/pika/concurrency/deque.hpp:#include <boost/lockfree/detail/tagged_ptr.hpp>        
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/policies.hpp>       
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/queue.hpp>          
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/version.hpp>                 
libs/pika/concurrency/include/pika/concurrency/detail/tagged_ptr_pair.hpp:#include <boost/lockfree/detail/prefix.hpp>                                                                                                            
libs/pika/config/include/pika/config.hpp:#include <boost/version.hpp>                                                                                                                                                            
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/context/detail/fcontext.hpp>                                                                                                     
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/version.hpp>                                                                                                                     
libs/pika/coroutines/include/pika/coroutines/detail/context_impl.hpp:#include <boost/version.hpp>               
libs/pika/datastructures/include/pika/datastructures/detail/small_vector.hpp:#include <boost/container/small_vector.hpp>                                                                                                         
libs/pika/debugging/src/backtrace.cpp:#include <boost/config.hpp>                                                                                                                                                                
libs/pika/iterator_support/include/pika/iterator_support/boost_iterator_categories.hpp:#include <boost/iterator/iterator_categories.hpp>              
libs/pika/lcos/include/pika/lcos/and_gate.hpp:#include <boost/dynamic_bitset.hpp>                                                                     
libs/pika/mpi_base/src/mpi_environment.cpp:#include <boost/tokenizer.hpp>                                                                             
libs/pika/prefix/src/find_prefix.cpp:#include <boost/tokenizer.hpp>                                                                                   
libs/pika/program_options/include/pika/program_options/detail/utf8_codecvt_facet.hpp://    #include <boost/detail/utf8_codecvt_facet.ipp>                                                                                        
libs/pika/program_options/src/options_description.cpp:#include <boost/tokenizer.hpp>                                                                  
libs/pika/program_options/src/split.cpp:#include <boost/tokenizer.hpp>                                                                                
libs/pika/runtime_configuration/src/init_ini_data.cpp:#include <boost/tokenizer.hpp>                                                                  
libs/pika/runtime_configuration/src/runtime_configuration.cpp:#include <boost/tokenizer.hpp>                                                          
libs/pika/schedulers/include/pika/schedulers/lockfree_queue_backends.hpp:#include <boost/lockfree/queue.hpp>                                          
libs/pika/synchronization/include/pika/synchronization/detail/condition_variable.hpp:#include <boost/intrusive/slist.hpp>                             
libs/pika/version/src/version.cpp:#include <boost/config.hpp>                                                                                         
libs/pika/version/src/version.cpp:#include <boost/version.hpp>                                                                                        

# tests/examples library, include counts per boost header                                                                                             
      4 #include <boost/range/irange.hpp>                                                                                                             
      4 #include <boost/lockfree/queue.hpp>                                                                                                           
      1 #include <boost/spirit/include/support_istream_iterator.hpp>                                                                                  
      1 #include <boost/spirit/include/qi_string.hpp>                                                                                                 
      1 #include <boost/spirit/include/qi_parse.hpp>                                                                                                  
      1 #include <boost/spirit/include/qi_operator.hpp>                                                                                               
      1 #include <boost/spirit/include/qi_numeric.hpp>                                                                                                
      1 #include <boost/spirit/include/qi_char.hpp>                                                                                                   
      1 #include <boost/spirit/include/qi_auxiliary.hpp>                                                                                              
      1 #include <boost/spirit/include/qi_action.hpp>                                                                                                 
      1 #include <boost/spirit/include/phoenix.hpp>                                                                                                   
      1 #include <boost/shared_array.hpp>                                                                                                             
      1 #include <boost/preprocessor/seq/for_each.hpp>                                                                                                
      1 #include <boost/lockfree/stack.hpp>                                
      1 #include <boost/integer/common_factor.hpp>                                                              
      1 #include <boost/function.hpp>                                                                           
      1 #include <boost/dynamic_bitset.hpp>                                                                     
      1 #include <boost/config.hpp>                                                                             

# tests/examples library, includes per pika file                                                                
examples/1d_stencil/1d_stencil_4.cpp:#include <boost/range/irange.hpp>                                                                                                                                                           
examples/1d_stencil/1d_stencil_4_parallel.cpp:#include <boost/shared_array.hpp>                                                                                                                                                  
examples/balancing/os_thread_num.cpp:#include <boost/lockfree/queue.hpp>                                                                                                                                                         
examples/balancing/thread_phase.cpp:#include <boost/lockfree/queue.hpp>                                                                                                                                                          
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/phoenix.hpp>                                                                                                                                            
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_action.hpp>                                                                                                                                          
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_auxiliary.hpp>                      
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_char.hpp>                                                                                                                                            
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_numeric.hpp>                                                                                                                                         
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_operator.hpp>                                                                                                                                        
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_parse.hpp>                                                                                                                                           
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_string.hpp>                                                                                                                                          
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/support_istream_iterator.hpp>          
examples/transpose/transpose_smp_block.cpp:#include <boost/range/irange.hpp>                                                                                                                                                     
examples/transpose/transpose_smp.cpp:#include <boost/range/irange.hpp>                                                                                                                                                           
libs/pika/async_cuda/tests/unit/trivial_demo.cu:#include <boost/preprocessor/seq/for_each.hpp>                  
libs/pika/concurrency/tests/unit/lockfree_fifo.cpp:#include <boost/lockfree/queue.hpp>                                                                                                                                           
libs/pika/iterator_support/tests/performance/stencil3_iterators.cpp:#include <boost/range/irange.hpp>           
libs/pika/program_options/examples/option_groups.cpp:#include <boost/token_functions.hpp>                                                                                                                                        
libs/pika/program_options/examples/option_groups.cpp:#include <boost/tokenizer.hpp>                                                                                                                                              
libs/pika/program_options/examples/response_file.cpp:#include <boost/token_functions.hpp>                                                                                                                                        
libs/pika/program_options/examples/response_file.cpp:#include <boost/tokenizer.hpp>                                                                                                                                              
tests/performance/local/function_object_wrapper_overhead.cpp:#include <boost/function.hpp>                      
tests/performance/local/nonconcurrent_fifo_overhead.cpp:#include <boost/lockfree/queue.hpp>                     
tests/performance/local/nonconcurrent_lifo_overhead.cpp:#include <boost/lockfree/stack.hpp>                     
tests/performance/local/timed_task_spawn.cpp:#include <boost/integer/common_factor.hpp>                                                                                                                                          
tests/performance/local/tls_overhead.cpp:#include <boost/config.hpp>                                                                                                                                                             
tests/regressions/threads/thread_rescheduling.cpp:#include <boost/dynamic_bitset.hpp>
msimberg commented 2 years ago

Status after #202.

# main library, include counts per boost header
      7 #include <boost/tokenizer.hpp>
      4 #include <boost/version.hpp>
      2 #include <boost/lockfree/queue.hpp>
      1 #include <boost/range/irange.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/lockfree/policies.hpp>
      1 #include <boost/lockfree/detail/tagged_ptr.hpp>
      1 #include <boost/lockfree/detail/prefix.hpp>
      1 #include <boost/iterator/iterator_categories.hpp>
      1 #include <boost/intrusive/slist.hpp>
      1 #include <boost/dynamic_bitset.hpp>
      1 //    #include <boost/detail/utf8_codecvt_facet.ipp>
      1 #include <boost/crc.hpp>
      1 #include <boost/context/detail/fcontext.hpp>
      1 #include <boost/container/small_vector.hpp>
      1 #include <boost/config.hpp>

# main library, includes per pika file
libs/pika/algorithms/include/pika/parallel/spmd_block.hpp:#include <boost/range/irange.hpp>
libs/pika/async_cuda/include/pika/async_cuda/cuda_event.hpp:#include <boost/lockfree/stack.hpp>
libs/pika/command_line_handling/src/command_line_handling.cpp:#include <boost/tokenizer.hpp>
libs/pika/concurrency/include/pika/concurrency/deque.hpp:#include <boost/lockfree/detail/tagged_ptr.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/policies.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/version.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/tagged_ptr_pair.hpp:#include <boost/lockfree/detail/prefix.hpp>
libs/pika/config/include/pika/config.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/context/detail/fcontext.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_impl.hpp:#include <boost/version.hpp>
libs/pika/datastructures/include/pika/datastructures/detail/small_vector.hpp:#include <boost/container/small_vector.hpp>
libs/pika/debugging/src/backtrace.cpp:#include <boost/config.hpp>
libs/pika/debugging/src/print.cpp:#include <boost/crc.hpp>
libs/pika/iterator_support/include/pika/iterator_support/boost_iterator_categories.hpp:#include <boost/iterator/iterator_categories.hpp>
libs/pika/lcos/include/pika/lcos/and_gate.hpp:#include <boost/dynamic_bitset.hpp>
libs/pika/mpi_base/src/mpi_environment.cpp:#include <boost/tokenizer.hpp>
libs/pika/prefix/src/find_prefix.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/include/pika/program_options/detail/utf8_codecvt_facet.hpp://    #include <boost/detail/utf8_codecvt_facet.ipp>
libs/pika/program_options/src/options_description.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/src/split.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/init_ini_data.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/runtime_configuration.cpp:#include <boost/tokenizer.hpp>
libs/pika/schedulers/include/pika/schedulers/lockfree_queue_backends.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/synchronization/include/pika/synchronization/detail/condition_variable.hpp:#include <boost/intrusive/slist.hpp>

# tests/examples library, include counts per boost header
      4 #include <boost/range/irange.hpp>
      4 #include <boost/lockfree/queue.hpp>
      1 #include <boost/spirit/include/support_istream_iterator.hpp>
      1 #include <boost/spirit/include/qi_string.hpp>
      1 #include <boost/spirit/include/qi_parse.hpp>
      1 #include <boost/spirit/include/qi_operator.hpp>
      1 #include <boost/spirit/include/qi_numeric.hpp>
      1 #include <boost/spirit/include/qi_char.hpp>
      1 #include <boost/spirit/include/qi_auxiliary.hpp>
      1 #include <boost/spirit/include/qi_action.hpp>
      1 #include <boost/spirit/include/phoenix.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/integer/common_factor.hpp>
      1 #include <boost/function.hpp>
      1 #include <boost/dynamic_bitset.hpp>
      1 #include <boost/config.hpp>

# tests/examples library, includes per pika file
examples/1d_stencil/1d_stencil_4.cpp:#include <boost/range/irange.hpp>
examples/balancing/os_thread_num.cpp:#include <boost/lockfree/queue.hpp>
examples/balancing/thread_phase.cpp:#include <boost/lockfree/queue.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/phoenix.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_action.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_auxiliary.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_char.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_numeric.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_operator.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_parse.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_string.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/support_istream_iterator.hpp>
examples/transpose/transpose_smp_block.cpp:#include <boost/range/irange.hpp>
examples/transpose/transpose_smp.cpp:#include <boost/range/irange.hpp>
libs/pika/concurrency/tests/unit/lockfree_fifo.cpp:#include <boost/lockfree/queue.hpp>
libs/pika/iterator_support/tests/performance/stencil3_iterators.cpp:#include <boost/range/irange.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/tokenizer.hpp>
tests/performance/local/function_object_wrapper_overhead.cpp:#include <boost/function.hpp>
tests/performance/local/nonconcurrent_fifo_overhead.cpp:#include <boost/lockfree/queue.hpp>
tests/performance/local/nonconcurrent_lifo_overhead.cpp:#include <boost/lockfree/stack.hpp>
tests/performance/local/timed_task_spawn.cpp:#include <boost/integer/common_factor.hpp>
tests/performance/local/tls_overhead.cpp:#include <boost/config.hpp>
tests/regressions/threads/thread_rescheduling.cpp:#include <boost/dynamic_bitset.hpp>
msimberg commented 2 years ago

The script that I run is by the way:

#!/usr/bin/env bash

shopt -s globstar

echo "# main library, include counts per boost header"
rg --no-heading --no-line-number --no-filename --no-messages '#include\W+boost' libs/pika/*/{include,src}/**/*.{cpp,hpp,cu} | sort | uniq -c | sort -r

echo ""
echo "# main library, includes per pika file"
rg --no-heading --no-line-number --no-messages '#include\W+boost' libs/pika/*/{include,src}/**/*.{cpp,hpp,cu} | sort | uniq

echo ""
echo "# tests/examples library, include counts per boost header"
rg --no-heading --no-line-number --no-filename --no-messages '#include\W+boost' {libs/pika/*/tests,tests,examples}/**/*.{cpp,hpp,cu} | sort | uniq -c | sort -r

echo ""
echo "# tests/examples library, includes per pika file"
rg --no-heading --no-line-number --no-messages '#include\W+boost' {libs/pika/*/{tests,examples},tests,examples}/**/*.{cpp,hpp,cu} | sort | uniq
msimberg commented 2 years ago

I will try to replace the tokenizer includes with something small and simple in 0.6.0.

msimberg commented 2 years ago

Minor improvement after #255:

# main library, include counts per boost header
      7 #include <boost/tokenizer.hpp>
      4 #include <boost/version.hpp>
      2 #include <boost/lockfree/queue.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/lockfree/policies.hpp>
      1 #include <boost/lockfree/detail/tagged_ptr.hpp>
      1 #include <boost/iterator/iterator_categories.hpp>
      1 #include <boost/intrusive/slist.hpp>
      1 #include <boost/dynamic_bitset.hpp>
      1 //    #include <boost/detail/utf8_codecvt_facet.ipp>
      1 #include <boost/crc.hpp>
      1 #include <boost/context/detail/fcontext.hpp>
      1 #include <boost/container/small_vector.hpp>
      1 #include <boost/config.hpp>

# main library, includes per pika file
libs/pika/async_cuda/include/pika/async_cuda/cuda_event.hpp:#include <boost/lockfree/stack.hpp>
libs/pika/command_line_handling/src/command_line_handling.cpp:#include <boost/tokenizer.hpp>
libs/pika/concurrency/include/pika/concurrency/deque.hpp:#include <boost/lockfree/detail/tagged_ptr.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/policies.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/concurrency/include/pika/concurrency/detail/freelist.hpp:#include <boost/version.hpp>
libs/pika/config/include/pika/config.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/context/detail/fcontext.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp:#include <boost/version.hpp>
libs/pika/coroutines/include/pika/coroutines/detail/context_impl.hpp:#include <boost/version.hpp>
libs/pika/datastructures/include/pika/datastructures/detail/small_vector.hpp:#include <boost/container/small_vector.hpp>
libs/pika/debugging/src/backtrace.cpp:#include <boost/config.hpp>
libs/pika/debugging/src/print.cpp:#include <boost/crc.hpp>
libs/pika/iterator_support/include/pika/iterator_support/boost_iterator_categories.hpp:#include <boost/iterator/iterator_categories.hpp>
libs/pika/lcos/include/pika/lcos/and_gate.hpp:#include <boost/dynamic_bitset.hpp>
libs/pika/mpi_base/src/mpi_environment.cpp:#include <boost/tokenizer.hpp>
libs/pika/prefix/src/find_prefix.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/include/pika/program_options/detail/utf8_codecvt_facet.hpp://    #include <boost/detail/utf8_codecvt_facet.ipp>
libs/pika/program_options/src/options_description.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/src/split.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/init_ini_data.cpp:#include <boost/tokenizer.hpp>
libs/pika/runtime_configuration/src/runtime_configuration.cpp:#include <boost/tokenizer.hpp>
libs/pika/schedulers/include/pika/schedulers/lockfree_queue_backends.hpp:#include <boost/lockfree/queue.hpp>
libs/pika/synchronization/include/pika/synchronization/detail/condition_variable.hpp:#include <boost/intrusive/slist.hpp>

# tests/examples library, include counts per boost header
      4 #include <boost/lockfree/queue.hpp>
      1 #include <boost/spirit/include/support_istream_iterator.hpp>
      1 #include <boost/spirit/include/qi_string.hpp>
      1 #include <boost/spirit/include/qi_parse.hpp>
      1 #include <boost/spirit/include/qi_operator.hpp>
      1 #include <boost/spirit/include/qi_numeric.hpp>
      1 #include <boost/spirit/include/qi_char.hpp>
      1 #include <boost/spirit/include/qi_auxiliary.hpp>
      1 #include <boost/spirit/include/qi_action.hpp>
      1 #include <boost/spirit/include/phoenix.hpp>
      1 #include <boost/lockfree/stack.hpp>
      1 #include <boost/integer/common_factor.hpp>
      1 #include <boost/function.hpp>
      1 #include <boost/dynamic_bitset.hpp>
      1 #include <boost/config.hpp>

# tests/examples library, includes per pika file
examples/balancing/os_thread_num.cpp:#include <boost/lockfree/queue.hpp>
examples/balancing/thread_phase.cpp:#include <boost/lockfree/queue.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/phoenix.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_action.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_auxiliary.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_char.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_numeric.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_operator.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_parse.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/qi_string.hpp>
examples/jacobi_smp/jacobi_nonuniform.cpp:#include <boost/spirit/include/support_istream_iterator.hpp>
libs/pika/concurrency/tests/unit/lockfree_fifo.cpp:#include <boost/lockfree/queue.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/option_groups.cpp:#include <boost/tokenizer.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/token_functions.hpp>
libs/pika/program_options/examples/response_file.cpp:#include <boost/tokenizer.hpp>
tests/performance/local/function_object_wrapper_overhead.cpp:#include <boost/function.hpp>
tests/performance/local/nonconcurrent_fifo_overhead.cpp:#include <boost/lockfree/queue.hpp>
tests/performance/local/nonconcurrent_lifo_overhead.cpp:#include <boost/lockfree/stack.hpp>
tests/performance/local/timed_task_spawn.cpp:#include <boost/integer/common_factor.hpp>
tests/performance/local/tls_overhead.cpp:#include <boost/config.hpp>
tests/regressions/threads/thread_rescheduling.cpp:#include <boost/dynamic_bitset.hpp>
msimberg commented 2 months ago

I will close this as there's little value in continuing the cleanup. Additional cleanup is welcome, but installing Boost correctly is less of an issue than it was in the past and there are diminishing returns to continuing this work.