Skip to content

Conversation

@DiamonDinoia
Copy link
Collaborator

To generate:

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DFINUFFT_BUILD_EXAMPLES:BOOL=ON -DFINUFFT_BUILD_TESTS:BOOL=OFF -DFINUFFT_USE_OPENMP:BOOL=ON -DFINUFFT_USE_DUCC0:BOOL=ON -DFINUFFT_STATIC_LINKING:BOOL=OFF -DFINUFFT_INTERPROCEDURAL_OPTIMIZATION:BOOL=ON
make -j # or ninja

After this changes the exported symbol list is:

$ nm -C -D --defined-only libfinufft.so 
00000000001cbab0 T finufft1d1
00000000001cb910 T finufft1d1many
00000000001cbc80 T finufft1d2
00000000001cbae0 T finufft1d2many
00000000001cbe60 T finufft1d3
00000000001cbcb0 T finufft1d3many
00000000001cc030 T finufft2d1
00000000001cbe90 T finufft2d1many
00000000001cc200 T finufft2d2
00000000001cc060 T finufft2d2many
00000000001cc3d0 T finufft2d3
00000000001cc230 T finufft2d3many
00000000001cc5d0 T finufft3d1
00000000001cc410 T finufft3d1many
00000000001cc7d0 T finufft3d2
00000000001cc610 T finufft3d2many
00000000001cb8d0 T finufft3d3
00000000001cb730 T finufft3d3many
00000000001c7f60 T finufft_default_opts
00000000001cb6f0 T finufft_destroy
00000000001c80c0 T finufft_execute
00000000001c8100 T finufft_execute_adjoint
00000000001ccbd0 T finufftf1d1
00000000001cca30 T finufftf1d1many
00000000001ccda0 T finufftf1d2
00000000001ccc00 T finufftf1d2many
00000000001ccf80 T finufftf1d3
00000000001ccdd0 T finufftf1d3many
00000000001cd150 T finufftf2d1
00000000001ccfb0 T finufftf2d1many
00000000001cd320 T finufftf2d2
00000000001cd180 T finufftf2d2many
00000000001cd4f0 T finufftf2d3
00000000001cd350 T finufftf2d3many
00000000001cd6f0 T finufftf3d1
00000000001cd530 T finufftf3d1many
00000000001cd8f0 T finufftf3d2
00000000001cd730 T finufftf3d2many
00000000001cc9f0 T finufftf3d3
00000000001cc850 T finufftf3d3many
00000000001c7fb0 T finufftf_default_opts
00000000001cc810 T finufftf_destroy
00000000001c80e0 T finufftf_execute
00000000001c8120 T finufftf_execute_adjoint
00000000001c8000 T finufftf_makeplan
00000000001c80b0 T finufftf_setpts
00000000001cb650 T finufft_makeplan
00000000001c80a0 T finufft_setpts
00000000001d8bc0 W std::deque<std::function<void ()>, std::allocator<std::function<void ()> > >::_M_reallocate_map(unsigned long, bool)
00000000001e2800 W void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_append<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000215c38 V typeinfo for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
0000000000215450 D typeinfo for std::_Mutex_base<(__gnu_cxx::_Lock_policy)2>
0000000000215460 D typeinfo for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
0000000000215b58 D typeinfo for std::_Sp_make_shared_tag
00000000001f9ae0 V typeinfo name for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
00000000001f1820 R typeinfo name for std::_Mutex_base<(__gnu_cxx::_Lock_policy)2>
00000000001f1860 R typeinfo name for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
00000000001f2460 R typeinfo name for std::_Sp_make_shared_tag
00000000001f17c0 R typeinfo name for std::_Sp_counted_ptr_inplace<std::vector<std::complex<double>, std::allocator<std::complex<double> > >, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>
00000000001f1920 R typeinfo name for std::_Sp_counted_ptr_inplace<std::vector<std::complex<float>, std::allocator<std::complex<float> > >, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>
0000000000215c90 V vtable for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
00000000001f3280 R std::_Sp_make_shared_tag::_S_ti()::__tag
00000000001d2ff0 W std::once_flag::_Prepare_execution::_Prepare_execution<std::call_once<ducc0::detail_threading::get_master_pool()::{lambda()#1}>(std::once_flag&, ducc0::detail_threading::get_master_pool()::{lambda()#1}&&)::{lambda()#1}>(ducc0::detail_threading::get_master_pool()::{lambda()#1}&)::{lambda()#1}::_FUN()

before:

$ nm -C -D --defined-only libfinufft.so 
00000000001d8100 T finufft1d1
00000000001d7f50 T finufft1d1many
00000000001d82e0 T finufft1d2
00000000001d8130 T finufft1d2many
00000000001d84a0 T finufft1d3
00000000001d8310 T finufft1d3many
00000000001d90e0 T finufft2d1
00000000001d8f40 T finufft2d1many
00000000001d92b0 T finufft2d2
00000000001d9110 T finufft2d2many
00000000001d9480 T finufft2d3
00000000001d92e0 T finufft2d3many
00000000001d9680 T finufft3d1
00000000001d94c0 T finufft3d1many
00000000001d9880 T finufft3d2
00000000001d96c0 T finufft3d2many
00000000001d8f00 T finufft3d3
00000000001d8d60 T finufft3d3many
00000000001c9220 T finufft_default_opts
00000000001c92c0 T finufft_destroy
00000000001cd040 T finufft_execute
00000000001cd060 T finufft_execute_adjoint
00000000001d3330 T finufftf1d1
00000000001d3180 T finufftf1d1many
00000000001d3510 T finufftf1d2
00000000001d3360 T finufftf1d2many
00000000001d36d0 T finufftf1d3
00000000001d3540 T finufftf1d3many
00000000001d9c40 T finufftf2d1
00000000001d9aa0 T finufftf2d1many
00000000001d9e10 T finufftf2d2
00000000001d9c70 T finufftf2d2many
00000000001d9fe0 T finufftf2d3
00000000001d9e40 T finufftf2d3many
00000000001da1e0 T finufftf3d1
00000000001da020 T finufftf3d1many
00000000001da3e0 T finufftf3d2
00000000001da220 T finufftf3d2many
00000000001d9a60 T finufftf3d3
00000000001d98c0 T finufftf3d3many
00000000001c9270 T finufftf_default_opts
00000000001c9300 T finufftf_destroy
00000000001cb230 T finufftf_execute
00000000001cb250 T finufftf_execute_adjoint
00000000001d30e0 T finufftf_makeplan
00000000001d30d0 T finufftf_setpts
00000000001d7eb0 T finufft_makeplan
00000000001d7ea0 T finufft_setpts
0000000000228ea0 u guard variable for ducc0::detail_threading::get_master_pool()::master_pool
00000000001de280 T ducc0::detail_threading::execGuided(unsigned long, unsigned long, unsigned long, double, std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001dd200 T ducc0::detail_threading::execSingle(unsigned long, std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001ddbb0 T ducc0::detail_threading::execStatic(unsigned long, unsigned long, unsigned long, std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001dab10 T ducc0::detail_threading::pin_offset()
0000000000000008 B ducc0::detail_threading::active_pool
00000000001dd340 T ducc0::detail_threading::execDynamic(unsigned long, unsigned long, unsigned long, std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001dfe50 W ducc0::detail_threading::MyScheduler::getNext()
00000000001debf0 W ducc0::detail_threading::MyScheduler::~MyScheduler()
00000000001deb40 W ducc0::detail_threading::MyScheduler::~MyScheduler()
00000000001deb40 W ducc0::detail_threading::MyScheduler::~MyScheduler()
00000000001dc450 T ducc0::detail_threading::Distribution::thread_map(std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001dcff0 T ducc0::detail_threading::execParallel(unsigned long, unsigned long, unsigned long, std::function<void (unsigned long, unsigned long)>)
00000000001dd0d0 T ducc0::detail_threading::execParallel(unsigned long, unsigned long, unsigned long, std::function<void (unsigned long, unsigned long, unsigned long)>)
00000000001dccd0 T ducc0::detail_threading::execParallel(unsigned long, std::function<void (unsigned long)>)
00000000001dce90 T ducc0::detail_threading::execParallel(unsigned long, std::function<void (ducc0::detail_threading::Scheduler&)>)
00000000001dc3c0 T ducc0::detail_threading::adjust_nthreads(unsigned long)
00000000001db780 T ducc0::detail_threading::get_active_pool()
00000000001e1aa0 W ducc0::detail_threading::get_master_pool()
00000000001db6a0 T ducc0::detail_threading::set_active_pool(ducc0::detail_threading::thread_pool*)
00000000001e0000 W ducc0::detail_threading::ducc_thread_pool::shutdown_locked()
00000000001e0d70 W ducc0::detail_threading::ducc_thread_pool::resize(unsigned long)
00000000001e4a20 W ducc0::detail_threading::ducc_thread_pool::submit(std::function<void ()>)
00000000001e3e40 W ducc0::detail_threading::ducc_thread_pool::worker::worker_main(std::atomic<bool>&, std::atomic<unsigned long>&, ducc0::detail_threading::concurrent_queue<std::function<void ()> >&, unsigned long)
00000000001df560 W ducc0::detail_threading::ducc_thread_pool::~ducc_thread_pool()
00000000001dec70 W ducc0::detail_threading::ducc_thread_pool::~ducc_thread_pool()
00000000001dec70 W ducc0::detail_threading::ducc_thread_pool::~ducc_thread_pool()
00000000001db840 T ducc0::detail_threading::thread_pool_size()
00000000001db8a0 T ducc0::detail_threading::resize_thread_pool(unsigned long)
00000000001dacd0 T ducc0::detail_threading::ducc0_default_num_threads()
00000000001da7c0 T ducc0::detail_threading::available_hardware_threads()
00000000001da950 T ducc0::detail_threading::pin_info()
00000000001e5c30 T ducc0::detail_string_utils::intToString[abi:cxx11](long, unsigned long)
00000000001e6f10 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<signed char>(signed char const&)
00000000001e5080 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<bool>(bool const&)
00000000001e5610 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<double>(double const&)
00000000001e5920 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<long double>(long double const&)
00000000001e5300 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<float>(float const&)
00000000001e72a0 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<unsigned char>(unsigned char const&)
00000000001e7cd0 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<int>(int const&)
00000000001e8020 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<unsigned int>(unsigned int const&)
00000000001e8370 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<long>(long const&)
00000000001e86c0 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<unsigned long>(unsigned long const&)
00000000001e50b0 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e7630 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<short>(short const&)
00000000001e7980 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<unsigned short>(unsigned short const&)
00000000001e8a10 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<long long>(long long const&)
00000000001e8d60 W std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::dataToString<unsigned long long>(unsigned long long const&)
00000000001e50d0 T ducc0::detail_string_utils::equal_nocase(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e9b20 W signed char ducc0::detail_string_utils::stringToData<signed char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e6000 T bool ducc0::detail_string_utils::stringToData<bool>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ed480 W double ducc0::detail_string_utils::stringToData<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ed9c0 W long double ducc0::detail_string_utils::stringToData<long double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ecf40 W float ducc0::detail_string_utils::stringToData<float>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ea060 W unsigned char ducc0::detail_string_utils::stringToData<unsigned char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eb020 W int ducc0::detail_string_utils::stringToData<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eb550 W unsigned int ducc0::detail_string_utils::stringToData<unsigned int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eba80 W long ducc0::detail_string_utils::stringToData<long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ebfb0 W unsigned long ducc0::detail_string_utils::stringToData<unsigned long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e50c0 T std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ducc0::detail_string_utils::stringToData<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ea5a0 W short ducc0::detail_string_utils::stringToData<short>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eaae0 W unsigned short ducc0::detail_string_utils::stringToData<unsigned short>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ec4e0 W long long ducc0::detail_string_utils::stringToData<long long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eca10 W unsigned long long ducc0::detail_string_utils::stringToData<unsigned long long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e67e0 T ducc0::detail_string_utils::parse_words_from_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e4f60 T ducc0::detail_string_utils::trim(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001eeb20 W std::vector<double, std::allocator<double> > ducc0::detail_string_utils::split<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ee4a0 W std::vector<float, std::allocator<float> > ducc0::detail_string_utils::split<float>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ef1a0 W std::vector<int, std::allocator<int> > ducc0::detail_string_utils::split<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001ef820 W std::vector<long, std::allocator<long> > ducc0::detail_string_utils::split<long>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001efec0 W std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ducc0::detail_string_utils::split<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e5230 T ducc0::detail_string_utils::tolower(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e6340 T ducc0::detail_string_utils::tokenize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char)
00000000001e90b0 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [17], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [17], char const (&) [2])
00000000001e98c0 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [20], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [24], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [20], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [24], char const (&) [2])
00000000001e9660 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [22], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [3], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [22], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [3], char const (&) [2])
00000000001e1880 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [25], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [25], char const (&) [2])
00000000001ee280 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [45], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [45], char const (&) [2])
00000000001e0930 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [51], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [51], char const (&) [2])
00000000001e0b50 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [19], char const (&) [63], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [19], char const (&) [63], char const (&) [2])
00000000001e92d0 W void ducc0::detail_error_handling::fail__<ducc0::detail_error_handling::CodeLocation, char const (&) [2], char const (&) [40], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [2], char const (&) [2]>(ducc0::detail_error_handling::CodeLocation&&, char const (&) [2], char const (&) [40], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const (&) [2], char const (&) [2])
0000000000028780 T finufft::spreadinterp::spreadcheck(unsigned long, unsigned long, unsigned long, finufft_spread_opts const&)
000000000003b620 T int finufft::spreadinterp::spreadinterp<double>(unsigned long, unsigned long, unsigned long, double*, unsigned long, double*, double*, double*, double*, finufft_spread_opts const&)
00000000000379c0 T int finufft::spreadinterp::spreadinterp<float>(unsigned long, unsigned long, unsigned long, float*, unsigned long, float*, float*, float*, float*, finufft_spread_opts const&)
0000000000028ca0 T int finufft::spreadinterp::setup_spreader<double>(finufft_spread_opts&, double, double, int, int, int, int, int)
0000000000028820 T int finufft::spreadinterp::setup_spreader<float>(finufft_spread_opts&, float, double, int, int, int, int, int)
0000000000029110 T double finufft::spreadinterp::evaluate_kernel<double>(double, finufft_spread_opts const&)
00000000000290c0 T float finufft::spreadinterp::evaluate_kernel<float>(float, finufft_spread_opts const&)
000000000003b4e0 T int finufft::spreadinterp::spreadinterpSorted<double>(std::vector<long, std::allocator<long> > const&, unsigned long, unsigned long, unsigned long, double*, unsigned long, double*, double*, double*, double*, finufft_spread_opts const&, int, bool)
0000000000037880 T int finufft::spreadinterp::spreadinterpSorted<float>(std::vector<long, std::allocator<long> > const&, unsigned long, unsigned long, unsigned long, float*, unsigned long, float*, float*, float*, float*, finufft_spread_opts const&, int, bool)
000000000002cf20 T double finufft::spreadinterp::evaluate_kernel_horner<double>(double, finufft_spread_opts const&)
0000000000029150 T float finufft::spreadinterp::evaluate_kernel_horner<float>(float, finufft_spread_opts const&)
0000000000032e40 T int finufft::spreadinterp::indexSort<double>(std::vector<long, std::allocator<long> >&, unsigned long, unsigned long, unsigned long, unsigned long, double*, double*, double*, finufft_spread_opts const&)
0000000000031d10 T int finufft::spreadinterp::indexSort<float>(std::vector<long, std::allocator<long> >&, unsigned long, unsigned long, unsigned long, unsigned long, float*, float*, float*, finufft_spread_opts const&)
00000000001d8500 T finufft::utils::next235even(long)
00000000001d8640 T finufft::utils::CNTime::start()
00000000001d86f0 T finufft::utils::CNTime::restart()
00000000001d8720 T finufft::common::gaussquad(int, double*, double*)
00000000001deb30 W ducc0::detail_threading::MyScheduler::thread_num() const
00000000001deb20 W ducc0::detail_threading::MyScheduler::num_threads() const
00000000001deb50 W ducc0::detail_threading::ducc_thread_pool::adjust_nthreads(unsigned long) const
00000000001debc0 W ducc0::detail_threading::ducc_thread_pool::nthreads() const
00000000001d8680 T finufft::utils::CNTime::elapsedsec() const
00000000001e3e00 W std::unique_lock<std::mutex>::unlock()
00000000001e4850 W std::deque<std::function<void ()>, std::allocator<std::function<void ()> > >::_M_reallocate_map(unsigned long, bool)
00000000001e0410 W std::deque<std::function<void ()>, std::allocator<std::function<void ()> > >::~deque()
00000000001e0410 W std::deque<std::function<void ()>, std::allocator<std::function<void ()> > >::~deque()
00000000001e42b0 W std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >::_M_run()
00000000001dec20 W std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >::~_State_impl()
00000000001dec00 W std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >::~_State_impl()
00000000001dec00 W std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >::~_State_impl()
00000000001deb10 W std::thread::_M_thread_deps_never_run()
00000000001e42e0 W std::vector<ducc0::detail_threading::Distribution::spaced_size_t, std::allocator<ducc0::detail_threading::Distribution::spaced_size_t> >::_M_default_append(unsigned long)
00000000001e0730 W std::vector<ducc0::detail_threading::ducc_thread_pool::worker, std::allocator<ducc0::detail_threading::ducc_thread_pool::worker> >::~vector()
00000000001e0730 W std::vector<ducc0::detail_threading::ducc_thread_pool::worker, std::allocator<ducc0::detail_threading::ducc_thread_pool::worker> >::~vector()
00000000001edf00 W void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_append<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
00000000001e9510 W std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~vector()
00000000001e9510 W std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~vector()
00000000001db060 T TLS init function for ducc0::detail_threading::active_pool
0000000000227b28 V typeinfo for ducc0::detail_threading::MyScheduler
0000000000227af0 V typeinfo for ducc0::detail_threading::thread_pool
0000000000227b10 V typeinfo for ducc0::detail_threading::ducc_thread_pool
0000000000227b00 V typeinfo for ducc0::detail_threading::Scheduler
0000000000227b40 V typeinfo for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
0000000000227358 D typeinfo for std::_Mutex_base<(__gnu_cxx::_Lock_policy)2>
0000000000227368 D typeinfo for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
0000000000227a60 D typeinfo for std::_Sp_make_shared_tag
000000000020b9a0 V typeinfo name for ducc0::detail_threading::MyScheduler
000000000020b8e0 V typeinfo name for ducc0::detail_threading::thread_pool
000000000020b960 V typeinfo name for ducc0::detail_threading::ducc_thread_pool
000000000020b920 V typeinfo name for ducc0::detail_threading::Scheduler
000000000020b9e0 V typeinfo name for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
00000000002036c0 R typeinfo name for std::_Mutex_base<(__gnu_cxx::_Lock_policy)2>
0000000000203700 R typeinfo name for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
0000000000204300 R typeinfo name for std::_Sp_make_shared_tag
0000000000203660 R typeinfo name for std::_Sp_counted_ptr_inplace<std::vector<std::complex<double>, std::allocator<std::complex<double> > >, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>
00000000002037c0 R typeinfo name for std::_Sp_counted_ptr_inplace<std::vector<std::complex<float>, std::allocator<std::complex<float> > >, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>
0000000000227bd8 V vtable for ducc0::detail_threading::MyScheduler
0000000000227b98 V vtable for ducc0::detail_threading::ducc_thread_pool
0000000000227c10 V vtable for std::thread::_State_impl<std::thread::_Invoker<std::tuple<ducc0::detail_threading::ducc_thread_pool::create_threads()::{lambda()#1}> > >
0000000000228ea8 u ducc0::detail_threading::get_master_pool()::master_pool
0000000000228e98 u ducc0::detail_threading::get_master_pool()::f
0000000000205120 R std::_Sp_make_shared_tag::_S_ti()::__tag
00000000001dec50 W std::once_flag::_Prepare_execution::_Prepare_execution<std::call_once<ducc0::detail_threading::get_master_pool()::{lambda()#1}>(std::once_flag&, ducc0::detail_threading::get_master_pool()::{lambda()#1}&&)::{lambda()#1}>(ducc0::detail_threading::get_master_pool()::{lambda()#1}&)::{lambda()#1}::_FUN()
00000000001e3580 W ducc0::detail_threading::get_master_pool()::{lambda()#1}::operator()() const::{lambda()#2}::_FUN()
00000000001e2d00 W ducc0::detail_threading::get_master_pool()::{lambda()#1}::operator()() const::{lambda()#3}::_FUN()
00000000001e21b0 W ducc0::detail_threading::get_master_pool()::{lambda()#1}::operator()() const::{lambda()#1}::_FUN()

@DiamonDinoia
Copy link
Collaborator Author

Maybe I will add a FINUFFT_EXPORT_TEST and remove the duplication.
CUDA has two wait.

@ahbarnett
Copy link
Collaborator

ahbarnett commented Oct 21, 2025 via email

@lu1and10
Copy link
Member

Also, might need to consolidate with @mreineck's PR #710

@mreineck
Copy link
Collaborator

If this approach works, I don't think there's any point in merging #710 :)

@DiamonDinoia
Copy link
Collaborator Author

Hi @mreineck, @ahbarnett & @lu1and10,
Thanks for the suggestions.

I like the fact that ducc0 symbols are cleaned up (gone). Is the point with the other symbols that BUILD_TESTS will be OFF for many users? I always build tests then use the resulting lib. Now, here comes the problem: have you tried this with our GNU make route? This is still the build method of choice for many users, and we have to support it. Since FINUFFT_BUILD_TESTS will not be set in that case, I imagine "make lib" or "make test" breaks. Could you check and handle this, or we discuss what the route to fix this before you implement? Thx, Alex

Most users don’t build tests when installing FINUFFT. I follow the same principle—when using a dependency, I avoid building its tests. We compile FINUFFT with -fPIC or -shared, which forbids inlining exported symbols because that would violate the ELF rules (reference).
Despite this, compilers may still inline via no semantic interposition. Even with semantic interposition disabled, exported symbols remain emitted, increasing binary size unnecessarily (example). Hence, it’s beneficial also to hide functions used only for tests for both a performance and a binary size perspective.

A future PR can also remove the static and anonymous namespace reducing boilerplate.

I am contemplating whether I want to build two libraries for tests vs examples do that even if the user enables finufft tests by mistake, none of the internal symbols bleed into the binary.

If this approach works, I don't think there's any point in merging #710 :)

On the make side. I do not think there is anything complicated here. We just need to pass the default visibility to be hidden and use a couple of macros to export the required symbols. I could just define the export macro here and #710 can take over and clean them.

Cheers,
Marco

@ahbarnett
Copy link
Collaborator

ahbarnett commented Oct 22, 2025 via email

@DiamonDinoia
Copy link
Collaborator Author

@mreineck I cherry picked your changes from #710. Well done spotting fortran!

@DiamonDinoia DiamonDinoia force-pushed the cleanup-symbols branch 4 times, most recently from a2bb6d5 to aab1bb9 Compare October 23, 2025 19:08
Copy link
Collaborator

@mreineck mreineck left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks gopd! Only two very small remarks from my side

const UBIGINT N3, T *data_uniform, const UBIGINT M, T *FINUFFT_RESTRICT kx,
T *FINUFFT_RESTRICT ky, T *FINUFFT_RESTRICT kz, T *FINUFFT_RESTRICT data_nonuniform,
const finufft_spread_opts &opts, int did_sort, bool adjoint);
FINUFFT_EXPORT int spreadinterp(UBIGINT N1, UBIGINT N2, UBIGINT N3, T *data_uniform,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would FINUFFT_EXPORT_TEST be enough here? I think that spreadinterp is not part of the public interface.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch!

makefile Outdated
CFLAGS := -O3 -funroll-loops -march=native -fcx-limited-range -ffp-contract=fast\
-fno-math-errno -fno-signed-zeros -fno-trapping-math -fassociative-math\
-freciprocal-math -fmerge-all-constants -ftree-vectorize $(CFLAGS) -Wfatal-errors
-freciprocal-math -fmerge-all-constants -ftree-vectorize $(CFLAGS) -Wfatal-errors \
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The trailing backslash seems unnecessary.

@DiamonDinoia DiamonDinoia force-pushed the cleanup-symbols branch 2 times, most recently from 779b1aa to 13bc881 Compare October 24, 2025 14:26
…ntly

Resolved inconsistent symbol exports for Fortran wrapper entry points and test
helpers across Windows and macOS. Adjusted default visibility in the makefile,
added FINUFFT_EXPORT_TEST for test-only APIs, and linked FFT backends via a new
finufft_fftlibs interface target.
It also adds the LTO option to makefile to achieve parity with cmake.

Co-authored-by: Marco Barbone [email protected]
Co-authored-by: Martin Reinecke [email protected]
@DiamonDinoia
Copy link
Collaborator Author

@mreineck I merged more constness here. Could you double check that I did not drop any of the const qualifiers? It was a bit of a mess and something might have slipped through.

@mreineck
Copy link
Collaborator

Since more_constness has just gone into master, that should be easy to check by looking at the diff. I'll do that!

@mreineck
Copy link
Collaborator

Looks good!

@DiamonDinoia
Copy link
Collaborator Author

@ahbarnett would you like to have a look? Otherwise I think it can be merged.

Copy link
Member

@lu1and10 lu1and10 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, looks good, ci should be good once merged to master.

@DiamonDinoia
Copy link
Collaborator Author

thanks, looks good, ci should be good once merged to master.

I'll rebase on Monday and then merge

@lu1and10
Copy link
Member

thanks, looks good, ci should be good once merged to master.

I'll rebase on Monday and then merge

btw, the same illegal instruction might happen to other ci using march=native, e.g., valgrind.yml

@DiamonDinoia
Copy link
Collaborator Author

thanks, looks good, ci should be good once merged to master.

I'll rebase on Monday and then merge

btw, the same illegal instruction might happen to other ci using march=native, e.g., valgrind.yml

I do not think these use sccache but I will double check.

@lu1and10
Copy link
Member

lu1and10 commented Oct 26, 2025

thanks, looks good, ci should be good once merged to master.

I'll rebase on Monday and then merge

btw, the same illegal instruction might happen to other ci using march=native, e.g., valgrind.yml

I do not think these use sccache but I will double check.

If it doesn't use sccache, it should be good, though seldom breaks.

the new changes in last week, seems to make a hard time for the matlab ci, https://github.com/flatironinstitute/finufft/actions/runs/18810288961/job/53670334663

Your fork's master branch(hasn't pull the updates yet) still works
https://github.com/DiamonDinoia/finufft/actions/runs/18810625939

I guess it's because something changed in last week. It seems not about matlab, mostly about apple clang(I tried xcode 16.0,16.1,16.2,16.3 and 16.4 apple clang all breaks) + current flags breaks the fft.cpp front end apple clang complilation. Maybe should use llvm clang as in cmake ci.

@DiamonDinoia
Copy link
Collaborator Author

thanks, looks good, ci should be good once merged to master.

I'll rebase on Monday and then merge

btw, the same illegal instruction might happen to other ci using march=native, e.g., valgrind.yml

I do not think these use sccache but I will double check.

If it doesn't use sccache, it should be good, though seldom breaks.

the new changes in last week, seems to make a hard time for the matlab ci, flatironinstitute/finufft/actions/runs/18810288961/job/53670334663

Your fork's master branch(hasn't pull the updates yet) still works DiamonDinoia/finufft/actions/runs/18810625939

I guess it's because something changed in last week. It seems not about matlab, mostly about apple clang(I tried xcode 16.0,16.1,16.2,16.3 and 16.4 apple clang all breaks) + current flags breaks the fft.cpp front end apple clang complilation. Maybe should use llvm clang as in cmake ci.

I will have a look though I am not sure what the problem might. Maybe we sit together with your mac to find the root cause?

@lu1and10
Copy link
Member

Sure, I can debug together some time on my mac, I was able to reproduce the failing on my mac.
Now the ci breaks with pip-compile .toml file to get requirements...seems github action updated the runner images...

@DiamonDinoia DiamonDinoia merged commit 41a15bf into flatironinstitute:master Oct 27, 2025
9 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants