Created
September 1, 2021 15:40
-
-
Save langston-barrett/fa4b370acf1f11bd0e847bd4e75f0497 to your computer and use it in GitHub Desktop.
Souffle Callgrind report
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-------------------------------------------------------------------------------- | |
Profile data file 'test.callgrind.out' (creator: callgrind-3.16.1) | |
-------------------------------------------------------------------------------- | |
I1 cache: | |
D1 cache: | |
LL cache: | |
Timerange: Basic block 0 - 17504446838 | |
Trigger: Program termination | |
Profiled target: ./test (PID 117247, part 1) | |
Events recorded: Ir | |
Events shown: Ir | |
Event sort order: Ir | |
Thresholds: 99 | |
Include dirs: | |
User annotated: ./test.cpp | |
Auto-annotation: on | |
-------------------------------------------------------------------------------- | |
Ir | |
-------------------------------------------------------------------------------- | |
117,275,086,646 (100.0%) PROGRAM TOTALS | |
-------------------------------------------------------------------------------- | |
Ir file:function | |
-------------------------------------------------------------------------------- | |
117,269,752,082 (100.0%) /build/glibc-2.33/csu/../sysdeps/x86_64/start.S:_start [/home/siddharthist/code/mate/test] | |
117,269,752,071 (100.0%) ???:(below main) [/nix/store/9bh3986bpragfjmr32gay8p95k91q4gy-glibc-2.33-47/lib/libc-2.33.so] | |
117,269,619,491 (100.0%) /home/siddharthist/code/mate/test.cpp:main | |
117,269,619,491 (100.0%) test.cpp:main [/home/siddharthist/code/mate/test] | |
117,269,401,968 (100.0%) test.cpp:souffle::Sf_test::runAll(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) [/home/siddharthist/code/mate/test] | |
117,269,401,845 (100.0%) test.cpp:souffle::Sf_test::runFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool) [/home/siddharthist/code/mate/test] | |
117,269,399,373 (100.0%) test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&) [/home/siddharthist/code/mate/test] | |
112,750,241,951 (96.14%) test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#4}::operator()() const [/home/siddharthist/code/mate/test] | |
108,552,322,687 (92.56%) ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) [/home/siddharthist/code/mate/test] | |
108,552,322,687 (92.56%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) | |
107,894,534,143 (92.00%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::insert(int, int, souffle::EquivalenceRelation<std::array<int, 2ul> >::operation_hints) | |
62,683,664,860 (53.45%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::contains(int, int) [/home/siddharthist/code/mate/test] | |
62,683,664,860 (53.45%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::contains(int, int) | |
62,510,138,496 (53.30%) ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::contains(int, int) const [/home/siddharthist/code/mate/test] | |
60,004,937,901 (51.17%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toDense(int) [/home/siddharthist/code/mate/test] | |
49,794,343,397 (42.46%) ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&) [/home/siddharthist/code/mate/test] | |
49,794,343,397 (42.46%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&) | |
46,956,019,293 (40.04%) ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&) [/home/siddharthist/code/mate/test] | |
45,112,855,500 (38.47%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::unionNodes(int, int) [/home/siddharthist/code/mate/test] | |
45,112,855,500 (38.47%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::unionNodes(int, int) | |
44,921,347,864 (38.30%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::sameSet(int, int) [/home/siddharthist/code/mate/test] | |
29,265,993,770 (24.95%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) [/home/siddharthist/code/mate/test] | |
17,458,475,036 (14.89%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::nodeExists(int) const [/home/siddharthist/code/mate/test] | |
16,704,644,320 (14.24%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const [/home/siddharthist/code/mate/test] | |
16,464,867,350 (14.04%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::contains(std::pair<int, unsigned long> const&) const [/home/siddharthist/code/mate/test] | |
16,464,867,350 (14.04%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::contains(std::pair<int, unsigned long> const&) const | |
15,065,817,550 (12.85%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::contains(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const [/home/siddharthist/code/mate/test] | |
14,880,499,560 (12.69%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::unionNodes(unsigned long, unsigned long) [/home/siddharthist/code/mate/test] | |
14,823,053,133 (12.64%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::sameSet(unsigned long, unsigned long) [/home/siddharthist/code/mate/test] | |
14,141,744,848 (12.06%) ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::get(unsigned long) const [/home/siddharthist/code/mate/test] | |
14,141,744,848 (12.06%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::get(unsigned long) const | |
13,648,038,922 (11.64%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::find(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const [/home/siddharthist/code/mate/test] | |
7,485,285,403 ( 6.38%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) | |
7,414,630,945 ( 6.32%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::lower_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const [/home/siddharthist/code/mate/test] | |
7,414,630,945 ( 6.32%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::lower_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const | |
6,883,428,000 ( 5.87%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_read() | |
6,611,724,864 ( 5.64%) ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::getBlock(unsigned long) const [/home/siddharthist/code/mate/test] | |
6,537,747,919 ( 5.57%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::upper_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const [/home/siddharthist/code/mate/test] | |
6,537,747,919 ( 5.57%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::upper_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const | |
6,489,211,044 ( 5.53%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::operator()<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const [/home/siddharthist/code/mate/test] | |
5,876,691,273 ( 5.01%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) [/home/siddharthist/code/mate/test] | |
4,805,412,000 ( 4.10%) ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_read() [/home/siddharthist/code/mate/test] | |
4,476,110,124 ( 3.82%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) [/home/siddharthist/code/mate/test] | |
4,476,110,124 ( 3.82%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) | |
4,367,307,680 ( 3.72%) ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_read(souffle::OptimisticReadWriteLock::Lease const&) [/home/siddharthist/code/mate/test] | |
4,367,307,680 ( 3.72%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_read(souffle::OptimisticReadWriteLock::Lease const&) | |
4,275,916,832 ( 3.65%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::function<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}, void, void>(souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}) [/home/siddharthist/code/mate/test] | |
4,211,184,286 ( 3.59%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::weak_equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const [/home/siddharthist/code/mate/test] | |
4,211,184,286 ( 3.59%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::weak_equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const | |
4,065,984,834 ( 3.47%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:souffle::DisjointSet::findNode(unsigned long) | |
4,046,293,034 ( 3.45%) ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator++() [/home/siddharthist/code/mate/test] | |
4,046,293,034 ( 3.45%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator++() | |
4,040,498,528 ( 3.45%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<unsigned long>*, 64ul>::operator[](unsigned long) const [/home/siddharthist/code/mate/test] | |
3,883,918,810 ( 3.31%) test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#3}::operator()() const [/home/siddharthist/code/mate/test] | |
3,823,218,360 ( 3.26%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const [/home/siddharthist/code/mate/test] | |
3,626,053,088 ( 3.09%) ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator++() [/home/siddharthist/code/mate/test] | |
3,626,053,088 ( 3.09%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator++() | |
3,501,828,440 ( 2.99%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::~function() [/home/siddharthist/code/mate/test] | |
3,252,250,400 ( 2.77%) ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) [/home/siddharthist/code/mate/test] | |
3,140,992,590 ( 2.68%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::~_Function_base() [/home/siddharthist/code/mate/test] | |
3,001,209,120 ( 2.56%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) | |
2,583,434,000 ( 2.20%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) | |
2,516,510,860 ( 2.15%) ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) [/home/siddharthist/code/mate/test] | |
2,432,849,232 ( 2.07%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_handler<unsigned long (std::pair<int, unsigned long>&), souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_manager(std::_Any_data&, std::_Function_handler<unsigned long (std::pair<int, unsigned long>&), souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}> const&, std::_Manager_operation) [/home/siddharthist/code/mate/test] | |
2,322,265,176 ( 1.98%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_init_functor(std::_Any_data&, {lambda(std::pair<int, unsigned long>&)#1}&&) [/home/siddharthist/code/mate/test] | |
2,240,115,444 ( 1.91%) ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updatePosterior() [/home/siddharthist/code/mate/test] | |
2,200,985,100 ( 1.88%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__cmpexch_failure_order(std::memory_order) [/home/siddharthist/code/mate/test] | |
2,078,016,000 ( 1.77%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:souffle::OptimisticReadWriteLock::start_read() | |
2,061,272,976 ( 1.76%) ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const [/home/siddharthist/code/mate/test] | |
1,990,513,170 ( 1.70%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>::btree_operation_hints() | |
1,836,596,280 ( 1.57%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::__array_traits<std::atomic<unsigned long>*, 64ul>::_S_ref(std::atomic<unsigned long>* const (&) [64], unsigned long) [/home/siddharthist/code/mate/test] | |
1,768,636,960 ( 1.51%) ../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::LRUCache() [/home/siddharthist/code/mate/test] | |
1,768,636,960 ( 1.51%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::LRUCache() | |
1,585,038,136 ( 1.35%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_manager(std::_Any_data&, std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}> const&, std::_Manager_operation) [/home/siddharthist/code/mate/test] | |
1,548,286,320 ( 1.32%) ../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::any<souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const [/home/siddharthist/code/mate/test] | |
1,548,286,320 ( 1.32%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::any<souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const | |
1,511,315,432 ( 1.29%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_init_functor(std::_Any_data&, {lambda(std::pair<int, unsigned long>&)#1}&&, std::integral_constant<bool, true>) [/home/siddharthist/code/mate/test] | |
1,437,017,452 ( 1.23%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::pair<int, true>(int const&, int&&) [/home/siddharthist/code/mate/test] | |
1,420,842,808 ( 1.21%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::get(unsigned long) const | |
1,343,205,120 ( 1.15%) /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const | |
1,298,760,000 ( 1.11%) ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::Lease::Lease(int) [/home/siddharthist/code/mate/test] | |
1,210,931,898 ( 1.03%) /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const [/home/siddharthist/code/mate/test] | |
1,105,918,800 ( 0.94%) ../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::forEachInOrder<souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const [/home/siddharthist/code/mate/test] | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 48 ---------------------------------------- | |
. using StatesBucket = StatesList*; | |
. using StorePair = std::pair<value_type, StatesBucket>; | |
. using StatesMap = souffle::LambdaBTreeSet<StorePair, std::function<StatesBucket(StorePair&)>, | |
. souffle::EqrelMapComparator<StorePair>>; | |
. | |
. public: | |
. using element_type = TupleType; | |
. | |
99 ( 0.00%) EquivalenceRelation() : statesMapStale(false){}; | |
1,677 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::SparseDisjointSet() (3x) | |
297 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::LambdaBTreeSet<std::pair<int, souffle::PiggyList<int>*>, std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search>::LambdaBTreeSet(souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> > const&) (3x) | |
75 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<bool>::atomic(bool) (3x) | |
72 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::shared_mutex() (3x) | |
12 ( 0.00%) ~EquivalenceRelation() { | |
9 ( 0.00%) emptyPartition(); | |
2,480 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::emptyPartition() const (3x) | |
30 ( 0.00%) } | |
31,812 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::~SparseDisjointSet() (3x) | |
147 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::LambdaBTreeSet<std::pair<int, souffle::PiggyList<int>*>, std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search>::~LambdaBTreeSet() (3x) | |
. | |
. /** | |
. * A collection of operation hints speeding up some of the involved operations | |
. * by exploiting temporal locality. | |
. * Unused in this class, as there is no speedup to be gained. | |
. * This is just defined as the class expects it. | |
. */ | |
. struct operation_hints { | |
-- line 67 ---------------------------------------- | |
-- line 70 ---------------------------------------- | |
. }; | |
. | |
. /** | |
. * Insert the two values symbolically as a binary relation | |
. * @param x node to be added/paired | |
. * @param y node to be added/paired | |
. * @return true if the pair is new to the data structure | |
. */ | |
406,350 ( 0.00%) bool insert(value_type x, value_type y) { | |
. operation_hints z; | |
270,900 ( 0.00%) return insert(x, y, z); | |
306,869,279 ( 0.26%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::insert(int, int, souffle::EquivalenceRelation<std::array<int, 2ul> >::operation_hints) (45,150x) | |
225,750 ( 0.00%) }; | |
. | |
. /** | |
. * Insert the tuple symbolically. | |
. * @param tuple The tuple to be inserted | |
. * @return true if the tuple is new to the data structure | |
. */ | |
. bool insert(const TupleType& tuple) { | |
. operation_hints hints; | |
-- line 89 ---------------------------------------- | |
-- line 92 ---------------------------------------- | |
. | |
. /** | |
. * Insert the two values symbolically as a binary relation | |
. * @param x node to be added/paired | |
. * @param y node to be added/paired | |
. * @param z the hints to where the pair should be inserted (not applicable atm) | |
. * @return true if the pair is new to the data structure | |
. */ | |
55,086,612 ( 0.05%) bool insert(value_type x, value_type y, operation_hints) { | |
. // indicate that iterators will have to generate on request | |
55,086,612 ( 0.05%) this->statesMapStale.store(true, std::memory_order_relaxed); | |
321,338,570 ( 0.27%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<bool>::store(bool, std::memory_order) (9,181,102x) | |
64,267,714 ( 0.05%) bool retval = contains(x, y); | |
62,510,138,496 (53.30%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::contains(int, int) const (9,181,102x) | |
55,086,612 ( 0.05%) sds.unionNodes(x, y); | |
45,112,855,500 (38.47%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::unionNodes(int, int) (9,181,102x) | |
9,181,102 ( 0.01%) return retval; | |
18,362,204 ( 0.02%) } | |
. | |
. /** | |
. * inserts all nodes from the other relation into this one | |
. * @param other the binary relation from which to add elements from | |
. */ | |
. void insertAll(const EquivalenceRelation<TupleType>& other) { | |
. other.genAllDisjointSetLists(); | |
. | |
-- line 114 ---------------------------------------- | |
-- line 128 ---------------------------------------- | |
. } | |
. | |
. /** | |
. * Extend this relation with another relation, expanding this equivalence relation | |
. * The supplied relation is the old knowledge, whilst this relation only contains | |
. * explicitly new knowledge. After this operation the "implicitly new tuples" are now | |
. * explicitly inserted this relation. | |
. */ | |
2,709 ( 0.00%) void extend(const EquivalenceRelation<TupleType>& other) { | |
. // nothing to extend if there's no new/original knowledge | |
3,910 ( 0.00%) if (other.size() == 0 || this->size() == 0) return; | |
172,066,274 ( 0.15%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::size() const (601x) | |
. | |
900 ( 0.00%) this->genAllDisjointSetLists(); | |
73,800 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const (300x) | |
900 ( 0.00%) other.genAllDisjointSetLists(); | |
73,800 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const (300x) | |
. | |
2,100 ( 0.00%) std::set<value_type> repsCovered; | |
105,942 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_set.h:std::set<int, std::less<int>, std::allocator<int> >::~set() (300x) | |
26,100 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_set.h:std::set<int, std::less<int>, std::allocator<int> >::set() (300x) | |
. | |
. // find all the disjoint sets that need to be added to this relation | |
. // that exist in other (and exist in this) | |
. { | |
1,800 ( 0.00%) auto it = this->sds.sparseToDenseMap.begin(); | |
9,000 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::begin() const (300x) | |
1,800 ( 0.00%) auto end = this->sds.sparseToDenseMap.end(); | |
6,300 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::end() const (300x) | |
. value_type el; | |
8,700 ( 0.00%) for (; it != end; ++it) { | |
59,100 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator++() (600x) | |
25,500 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator!=(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator const&) const (900x) | |
8,400 ( 0.00%) std::tie(el, std::ignore) = *it; | |
49,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/tuple:std::tuple<int&, std::_Swallow_assign const&> std::tie<int, std::_Swallow_assign const>(int&, std::_Swallow_assign const&) (600x) | |
43,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/tuple:std::enable_if<(__assignable<int const&, unsigned long const&>)(), std::tuple<int&, std::_Swallow_assign const&>&>::type std::tuple<int&, std::_Swallow_assign const&>::operator=<int, unsigned long>(std::pair<int, unsigned long> const&) (600x) | |
8,400 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator*() const (600x) | |
4,200 ( 0.00%) if (other.containsElement(el)) { | |
461,214 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::containsElement(int) const (600x) | |
1,800 ( 0.00%) value_type rep = other.sds.findNode(el); | |
703,635 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::findNode(int) (300x) | |
2,700 ( 0.00%) if (repsCovered.count(rep) == 0) { | |
71,100 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_set.h:std::set<int, std::less<int>, std::allocator<int> >::count(int const&) const (300x) | |
1,500 ( 0.00%) repsCovered.emplace(rep); | |
221,700 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_set.h:std::pair<std::_Rb_tree_const_iterator<int>, bool> std::set<int, std::less<int>, std::allocator<int> >::emplace<int&>(int&) (300x) | |
. } | |
. } | |
. } | |
. } | |
. | |
. // add the intersecting dj sets into this one | |
. { | |
. value_type el; | |
. value_type rep; | |
1,800 ( 0.00%) auto it = other.sds.sparseToDenseMap.begin(); | |
9,000 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::begin() const (300x) | |
1,800 ( 0.00%) auto end = other.sds.sparseToDenseMap.end(); | |
6,300 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::end() const (300x) | |
498,750 ( 0.00%) for (; it != end; ++it) { | |
2,769,982 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator++() (45,150x) | |
1,183,800 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator!=(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator const&) const (45,450x) | |
632,100 ( 0.00%) std::tie(el, std::ignore) = *it; | |
3,747,450 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/tuple:std::tuple<int&, std::_Swallow_assign const&> std::tie<int, std::_Swallow_assign const>(int&, std::_Swallow_assign const&) (45,150x) | |
3,295,950 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/tuple:std::enable_if<(__assignable<int const&, unsigned long const&>)(), std::tuple<int&, std::_Swallow_assign const&>&>::type std::tuple<int&, std::_Swallow_assign const&>::operator=<int, unsigned long>(std::pair<int, unsigned long> const&) (45,150x) | |
632,100 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator*() const (45,150x) | |
270,900 ( 0.00%) rep = other.sds.findNode(el); | |
113,868,215 ( 0.10%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::findNode(int) (45,150x) | |
406,350 ( 0.00%) if (repsCovered.count(rep) != 0) { | |
17,292,450 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_set.h:std::set<int, std::less<int>, std::allocator<int> >::count(int const&) const (45,150x) | |
270,900 ( 0.00%) this->insert(el, rep); | |
307,772,279 ( 0.26%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::insert(int, int) (45,150x) | |
. } | |
. } | |
. } | |
1,807 ( 0.00%) } | |
. | |
. /** | |
. * Returns whether there exists a pair with these two nodes | |
. * @param x front of pair | |
. * @param y back of pair | |
. */ | |
55,359,312 ( 0.05%) bool contains(value_type x, value_type y) const { | |
55,359,312 ( 0.05%) return sds.contains(x, y); | |
62,683,664,860 (53.45%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::contains(int, int) (9,226,552x) | |
18,453,104 ( 0.02%) } | |
. | |
. /** | |
. * Returns whether there exists given tuple. | |
. * @param tuple The tuple to search for. | |
. */ | |
. bool contains(const TupleType& tuple, operation_hints&) const { | |
. return contains(tuple[0], tuple[1]); | |
. }; | |
. | |
. bool contains(const TupleType& tuple) const { | |
. return contains(tuple[0], tuple[1]); | |
. }; | |
. | |
8,456 ( 0.00%) void emptyPartition() const { | |
. // delete the beautiful values inside (they're raw ptrs, so they need to be.) | |
37,690 ( 0.00%) for (auto& pair : equivalencePartition) { | |
133,496 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator++() (902x) | |
63,316 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator!=(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) const (2,110x) | |
36,240 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::begin() const (1,208x) | |
25,368 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::end() const (1,208x) | |
12,628 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator*() const (902x) | |
12,628 ( 0.00%) delete pair.second; | |
888,072 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::~PiggyList() (902x) | |
81,180 ( 0.00%) => ???:operator delete(void*, unsigned long) (902x) | |
. } | |
. // invalidate it my dude | |
7,248 ( 0.00%) this->statesMapStale.store(true, std::memory_order_relaxed); | |
42,280 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<bool>::store(bool, std::memory_order) (1,208x) | |
. | |
4,832 ( 0.00%) equivalencePartition.clear(); | |
136,128 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::clear() (1,208x) | |
7,248 ( 0.00%) } | |
. | |
. /** | |
. * Empty the relation | |
. */ | |
1,208 ( 0.00%) void clear() { | |
1,208 ( 0.00%) statesLock.lock(); | |
24,483 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::lock() (302x) | |
. | |
906 ( 0.00%) sds.clear(); | |
3,364,404 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::clear() (302x) | |
906 ( 0.00%) emptyPartition(); | |
582,958 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::emptyPartition() const (302x) | |
. | |
1,208 ( 0.00%) statesLock.unlock(); | |
25,368 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::unlock() (302x) | |
906 ( 0.00%) } | |
. | |
. /** | |
. * Size of relation | |
. * @return the sum of the number of pairs per disjoint set | |
. */ | |
8,428 ( 0.00%) std::size_t size() const { | |
3,612 ( 0.00%) genAllDisjointSetLists(); | |
175,027,441 ( 0.15%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const (1,204x) | |
. | |
4,816 ( 0.00%) statesLock.lock_shared(); | |
103,544 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::lock_shared() (1,204x) | |
. | |
1,204 ( 0.00%) std::size_t retVal = 0; | |
42,110 ( 0.00%) for (auto& e : this->equivalencePartition) { | |
177,896 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator++() (1,202x) | |
70,984 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator!=(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) const (2,406x) | |
36,120 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::begin() const (1,204x) | |
25,284 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::end() const (1,204x) | |
16,828 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator*() const (1,202x) | |
6,010 ( 0.00%) const std::size_t s = e.second->size(); | |
32,454 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::size() const (1,202x) | |
3,606 ( 0.00%) retVal += s * s; | |
. } | |
. | |
4,816 ( 0.00%) statesLock.unlock_shared(); | |
110,768 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::unlock_shared() (1,204x) | |
1,204 ( 0.00%) return retVal; | |
6,020 ( 0.00%) } | |
. | |
. // an almighty iterator for several types of iteration. | |
. // Unfortunately, subclassing isn't an option with souffle | |
. // - we don't deal with pointers (so no virtual) | |
. // - and a single iter type is expected (see Relation::iterator e.g.) (i think) | |
. class iterator { | |
. public: | |
. typedef std::forward_iterator_tag iterator_category; | |
. using value_type = TupleType; | |
. using difference_type = ptrdiff_t; | |
. using pointer = value_type*; | |
. using reference = value_type&; | |
. | |
. // one iterator for signalling the end (simplifies) | |
4,214 ( 0.00%) explicit iterator(const EquivalenceRelation* br, bool /* signalIsEndIterator */) | |
12,040 ( 0.00%) : br(br), isEndVal(true){}; | |
12,040 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::iterator() (1,204x) | |
. | |
4,816 ( 0.00%) explicit iterator(const EquivalenceRelation* br) | |
. : br(br), ityp(IterType::ALL), djSetMapListIt(br->equivalencePartition.begin()), | |
15,050 ( 0.00%) djSetMapListEnd(br->equivalencePartition.end()) { | |
18,060 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::begin() const (602x) | |
12,642 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::end() const (602x) | |
. // no need to fast forward if this iterator is empty | |
5,418 ( 0.00%) if (djSetMapListIt == djSetMapListEnd) { | |
7,826 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator==(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) const (602x) | |
. isEndVal = true; | |
. return; | |
. } | |
. // grab the pointer to the list, and make it our current list | |
4,214 ( 0.00%) djSetList = (*djSetMapListIt).second; | |
8,428 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator*() const (602x) | |
3,612 ( 0.00%) assert(djSetList->size() != 0); | |
16,254 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::size() const (602x) | |
. | |
1,806 ( 0.00%) updateAnterior(); | |
73,444 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updateAnterior() (602x) | |
1,806 ( 0.00%) updatePosterior(); | |
73,444 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updatePosterior() (602x) | |
3,010 ( 0.00%) } | |
. | |
. // WITHIN: iterator for everything within the same DJset (used for EquivalenceRelation.partition()) | |
. explicit iterator(const EquivalenceRelation* br, const StatesBucket within) | |
. : br(br), ityp(IterType::WITHIN), djSetList(within) { | |
. // empty dj set | |
. if (djSetList->size() == 0) { | |
. isEndVal = true; | |
. } | |
-- line 279 ---------------------------------------- | |
-- line 308 ---------------------------------------- | |
. } | |
. | |
. /** explicit set first half of cPair */ | |
. inline void setAnterior(const typename TupleType::value_type a) { | |
. this->cPair[0] = a; | |
. } | |
. | |
. /** quick update to whatever the current index is pointing to */ | |
454,510 ( 0.00%) inline void updateAnterior() { | |
1,272,628 ( 0.00%) this->cPair[0] = this->djSetList->get(this->cAnteriorIndex); | |
6,999,454 ( 0.01%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::get(unsigned long) const (90,902x) | |
1,999,844 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) (90,902x) | |
363,608 ( 0.00%) } | |
. | |
. /** explicit set second half of cPair */ | |
. inline void setPosterior(const typename TupleType::value_type b) { | |
. this->cPair[1] = b; | |
. } | |
. | |
. /** quick update to whatever the current index is pointing to */ | |
91,808,010 ( 0.08%) inline void updatePosterior() { | |
257,062,428 ( 0.22%) this->cPair[1] = this->djSetList->get(this->cPosteriorIndex); | |
1,413,843,354 ( 1.21%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::get(unsigned long) const (18,361,602x) | |
403,955,244 ( 0.34%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) (18,361,602x) | |
73,446,408 ( 0.06%) } | |
. | |
. // copy ctor | |
60,200 ( 0.00%) iterator(const iterator& other) = default; | |
36,120 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::iterator(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) (2,408x) | |
. // move ctor | |
. iterator(iterator&& other) = default; | |
. // assign iter | |
. iterator& operator=(const iterator& other) = default; | |
. | |
91,359,520 ( 0.08%) bool operator==(const iterator& other) const { | |
73,094,238 ( 0.06%) if (isEndVal && other.isEndVal) return br == other.br; | |
146,170,416 ( 0.12%) return isEndVal == other.isEndVal && cPair == other.cPair; | |
36,543,808 ( 0.03%) } | |
. | |
. bool operator!=(const iterator& other) const { | |
. return !((*this) == other); | |
. } | |
. | |
54,817,518 ( 0.05%) const TupleType& operator*() const { | |
36,545,012 ( 0.03%) return cPair; | |
36,545,012 ( 0.03%) } | |
. | |
. const TupleType* operator->() const { | |
. return &cPair; | |
. } | |
. | |
. /* pre-increment */ | |
109,627,812 ( 0.09%) iterator& operator++() { | |
73,085,208 ( 0.06%) if (isEndVal) { | |
. throw std::out_of_range("error: incrementing an out of range iterator"); | |
. } | |
. | |
219,255,624 ( 0.19%) switch (ityp) { | |
. case IterType::ALL: | |
. // move posterior along one | |
. // see if we can't move the posterior along | |
274,069,530 ( 0.23%) if (++cPosteriorIndex == djSetList->size()) { | |
493,325,154 ( 0.42%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::size() const (18,271,302x) | |
. // move anterior along one | |
. // see if we can't move the anterior along one | |
1,363,530 ( 0.00%) if (++cAnteriorIndex == djSetList->size()) { | |
2,454,354 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::size() const (90,902x) | |
. // move the djset it along one | |
. // see if we can't move it along one (we're at the end) | |
6,622 ( 0.00%) if (++djSetMapListIt == djSetMapListEnd) { | |
89,096 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator++() (602x) | |
12,040 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator==(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) const (602x) | |
1,204 ( 0.00%) isEndVal = true; | |
1,204 ( 0.00%) return *this; | |
. } | |
. | |
. // we can't iterate along this djset if it is empty | |
. djSetList = (*djSetMapListIt).second; | |
. if (djSetList->size() == 0) { | |
. throw std::out_of_range("error: encountered a zero size djset"); | |
. } | |
. | |
-- line 380 ---------------------------------------- | |
-- line 381 ---------------------------------------- | |
. // update our cAnterior and cPosterior | |
. cAnteriorIndex = 0; | |
. cPosteriorIndex = 0; | |
. updateAnterior(); | |
. updatePosterior(); | |
. } | |
. | |
. // we moved our anterior along one | |
270,900 ( 0.00%) updateAnterior(); | |
11,016,600 ( 0.01%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updateAnterior() (90,300x) | |
. | |
180,600 ( 0.00%) cPosteriorIndex = 0; | |
270,900 ( 0.00%) updatePosterior(); | |
11,016,600 ( 0.01%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updatePosterior() (90,300x) | |
. } | |
. // we just moved our posterior along one | |
54,812,100 ( 0.05%) updatePosterior(); | |
2,229,025,400 ( 1.90%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::updatePosterior() (18,270,700x) | |
. | |
18,270,700 ( 0.02%) break; | |
. case IterType::ANTERIOR: | |
. // step posterior along one, and if we can't, then we're done. | |
. if (++cPosteriorIndex == djSetList->size()) { | |
. isEndVal = true; | |
. return *this; | |
. } | |
. updatePosterior(); | |
. | |
-- line 405 ---------------------------------------- | |
-- line 426 ---------------------------------------- | |
. cPosteriorIndex = 0; | |
. updatePosterior(); | |
. } | |
. // we just moved our posterior along one | |
. updatePosterior(); | |
. break; | |
. } | |
. | |
36,541,400 ( 0.03%) return *this; | |
91,356,510 ( 0.08%) } | |
. | |
. private: | |
. const EquivalenceRelation* br = nullptr; | |
. // special tombstone value to notify that this iter represents the end | |
. bool isEndVal = false; | |
. | |
. // all the different types of iterator this can be | |
. enum IterType { ALL, ANTERIOR, ANTPOST, WITHIN }; | |
-- line 443 ---------------------------------------- | |
-- line 456 ---------------------------------------- | |
. std::size_t cPosteriorIndex = 0; | |
. }; | |
. | |
. public: | |
. /** | |
. * iterator pointing to the beginning of the tuples, with no restrictions | |
. * @return the iterator that corresponds to the beginning of the binary relation | |
. */ | |
3,010 ( 0.00%) iterator begin() const { | |
1,806 ( 0.00%) genAllDisjointSetLists(); | |
172,731,163 ( 0.15%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const (602x) | |
3,010 ( 0.00%) return iterator(this); | |
249,830 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::iterator(souffle::EquivalenceRelation<std::array<int, 2ul> > const*) (602x) | |
1,806 ( 0.00%) } | |
. | |
. /** | |
. * iterator pointing to the end of the tuples | |
. * @return the iterator which represents the end of the binary rel | |
. */ | |
3,010 ( 0.00%) iterator end() const { | |
3,612 ( 0.00%) return iterator(this, true); | |
28,294 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::iterator(souffle::EquivalenceRelation<std::array<int, 2ul> > const*, bool) (602x) | |
1,806 ( 0.00%) } | |
. | |
. /** | |
. * Obtains a range of elements matching the prefix of the given entry up to | |
. * levels elements. | |
. * | |
. * @tparam levels the length of the requested matching prefix | |
. * @param entry the entry to be looking for | |
. * @return the corresponding range of matching elements | |
-- line 483 ---------------------------------------- | |
-- line 694 ---------------------------------------- | |
. } | |
. | |
. iterator find(const TupleType& t) const { | |
. operation_hints context; | |
. return find(t, context); | |
. } | |
. | |
. protected: | |
3,000 ( 0.00%) bool containsElement(value_type e) const { | |
3,000 ( 0.00%) return this->sds.nodeExists(e); | |
454,014 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::nodeExists(int) const (600x) | |
1,200 ( 0.00%) } | |
. | |
. private: | |
. // marked as mutable due to difficulties with the const enforcement via the Relation API | |
. // const operations *may* safely change internal state (i.e. collapse djset forest) | |
. mutable souffle::SparseDisjointSet<value_type> sds; | |
. | |
. // read/write lock on equivalencePartition | |
. mutable std::shared_mutex statesLock; | |
-- line 712 ---------------------------------------- | |
-- line 714 ---------------------------------------- | |
. mutable StatesMap equivalencePartition; | |
. // whether the cache is stale | |
. mutable std::atomic<bool> statesMapStale; | |
. | |
. /** | |
. * Generate a cache of the sets such that they can be iterated over efficiently. | |
. * Each set is partitioned into a PiggyList. | |
. */ | |
19,248 ( 0.00%) void genAllDisjointSetLists() const { | |
9,624 ( 0.00%) statesLock.lock(); | |
220,191 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::lock() (2,406x) | |
. | |
. // no need to generate again, already done. | |
19,248 ( 0.00%) if (!this->statesMapStale.load(std::memory_order_acquire)) { | |
69,774 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<bool>::load(std::memory_order) const (2,406x) | |
6,012 ( 0.00%) statesLock.unlock(); | |
126,252 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::unlock() (1,503x) | |
1,503 ( 0.00%) return; | |
. } | |
. | |
. // btree version | |
2,709 ( 0.00%) emptyPartition(); | |
911,372 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::emptyPartition() const (903x) | |
. | |
3,612 ( 0.00%) std::size_t dSetSize = this->sds.ds.a_blocks.size(); | |
24,381 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::size() const (903x) | |
461,122 ( 0.00%) for (std::size_t i = 0; i < dSetSize; ++i) { | |
549,012 ( 0.00%) typename TupleType::value_type sparseVal = this->sds.toSparse(i); | |
11,529,252 ( 0.01%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toSparse(unsigned long) const (91,502x) | |
640,514 ( 0.00%) parent_t rep = this->sds.findNode(sparseVal); | |
230,314,838 ( 0.20%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::findNode(int) (91,502x) | |
. | |
823,518 ( 0.00%) StorePair p = {static_cast<value_type>(rep), nullptr}; | |
2,928,064 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, souffle::PiggyList<int>*>::pair<int, decltype(nullptr), true>(int&&, decltype(nullptr)&&) (91,502x) | |
1,289,146 ( 0.00%) StatesList* mapList = equivalencePartition.insert(p, [&](StorePair& sp) { | |
63,728,575 ( 0.05%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::insert(std::pair<int, souffle::PiggyList<int>*>&, std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)> const&) (91,502x) | |
10,065,220 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>::function<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}, void, void>(souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}) (91,502x) | |
8,692,690 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>::~function() (91,502x) | |
7,216 ( 0.00%) auto* r = new StatesList(1); | |
193,028 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::PiggyList(unsigned long) (902x) | |
50,202 ( 0.00%) => ???:operator new(unsigned long) (902x) | |
2,706 ( 0.00%) sp.second = r; | |
902 ( 0.00%) return r; | |
. }); | |
457,510 ( 0.00%) mapList->append(sparseVal); | |
14,889,109 ( 0.01%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::append(int) (91,502x) | |
. } | |
. | |
5,418 ( 0.00%) statesMapStale.store(false, std::memory_order_release); | |
31,605 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<bool>::store(bool, std::memory_order) (903x) | |
3,612 ( 0.00%) statesLock.unlock(); | |
75,852 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/shared_mutex:std::shared_mutex::unlock() (903x) | |
15,339 ( 0.00%) } | |
. }; | |
. } // namespace souffle | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/test.cpp | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/test.cpp | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 41 ---------------------------------------- | |
. // block_t stores parent in the upper half, rank in the lower half | |
. using block_t = uint64_t; | |
. // block_t & rank_mask extracts the rank | |
. constexpr block_t rank_mask = (1ul << split_size) - 1; | |
. | |
. /** | |
. * Structure that emulates a Disjoint Set, i.e. a data structure that supports efficient union-find operations | |
. */ | |
30 ( 0.00%) class DisjointSet { | |
861 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::~PiggyList() (3x) | |
. template <typename TupleType> | |
. friend class EquivalenceRelation; | |
. | |
. PiggyList<std::atomic<block_t>> a_blocks; | |
. | |
. public: | |
30 ( 0.00%) DisjointSet() = default; | |
636 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::PiggyList() (3x) | |
. | |
. // copy ctor | |
. DisjointSet(DisjointSet& other) = delete; | |
. // move ctor | |
. DisjointSet(DisjointSet&& other) = delete; | |
. | |
. // copy assign ctor | |
. DisjointSet& operator=(DisjointSet& ds) = delete; | |
-- line 64 ---------------------------------------- | |
-- line 73 ---------------------------------------- | |
. return sz; | |
. }; | |
. | |
. /** | |
. * Yield reference to the node by its node index | |
. * @param node node to be searched | |
. * @return the parent block of the specified node | |
. */ | |
917,837,600 ( 0.78%) inline std::atomic<block_t>& get(parent_t node) const { | |
1,101,405,120 ( 0.94%) auto& ret = a_blocks.get(node); | |
14,134,699,040 (12.05%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::get(unsigned long) const (183,567,520x) | |
183,567,520 ( 0.16%) return ret; | |
367,135,040 ( 0.31%) }; | |
. | |
. /** | |
. * Equivalent to the find() function in union/find | |
. * Find the highest ancestor of the provided node - flattening as we go | |
. * @param x the node to find the parent of, whilst flattening its set-tree | |
. * @return The parent of x | |
. */ | |
294,890,816 ( 0.25%) parent_t findNode(parent_t x) { | |
. // while x's parent is not itself | |
992,024,492 ( 0.85%) while (x != b2p(get(x))) { | |
6,687,757,986 ( 5.70%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (73,491,846x) | |
1,910,787,996 ( 1.63%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (73,491,846x) | |
514,442,922 ( 0.44%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2p(unsigned long) (73,491,846x) | |
293,043,952 ( 0.25%) block_t xState = get(x); | |
3,333,374,954 ( 2.84%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (36,630,494x) | |
952,392,844 ( 0.81%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (36,630,494x) | |
. // yield x's parent's parent | |
476,196,422 ( 0.41%) parent_t newParent = b2p(get(b2p(xState))); | |
3,333,374,954 ( 2.84%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (36,630,494x) | |
952,392,844 ( 0.81%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (36,630,494x) | |
512,826,916 ( 0.44%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2p(unsigned long) (73,260,988x) | |
. // construct block out of the original rank and the new parent | |
329,674,446 ( 0.28%) block_t newState = pr2b(newParent, b2r(xState)); | |
439,565,928 ( 0.37%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::pr2b(unsigned long, unsigned char) (36,630,494x) | |
219,782,964 ( 0.19%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2r(unsigned long) (36,630,494x) | |
. | |
329,674,446 ( 0.28%) this->get(x).compare_exchange_strong(xState, newState); | |
3,333,374,954 ( 2.84%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (36,630,494x) | |
. | |
73,260,988 ( 0.06%) x = newParent; | |
. } | |
36,861,352 ( 0.03%) return x; | |
184,306,760 ( 0.16%) } | |
. | |
. private: | |
. /** | |
. * Update the root of the tree of which x is, to have y as the base instead | |
. * @param x : old root | |
. * @param oldrank : old root rank | |
. * @param y : new root | |
. * @param newrank : new root rank | |
. * @return Whether the update succeeded (fails if another root update/union has been perfomed in the | |
. * interim) | |
. */ | |
648,858 ( 0.00%) bool updateRoot(const parent_t x, const rank_t oldrank, const parent_t y, const rank_t newrank) { | |
370,776 ( 0.00%) block_t oldState = get(x); | |
4,217,577 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (46,347x) | |
1,205,022 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (46,347x) | |
185,388 ( 0.00%) parent_t nextN = b2p(oldState); | |
324,429 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2p(unsigned long) (46,347x) | |
185,388 ( 0.00%) rank_t rankN = b2r(oldState); | |
278,082 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2r(unsigned long) (46,347x) | |
. | |
278,082 ( 0.00%) if (nextN != x || rankN != oldrank) return false; | |
. // set the parent and rank of the new record | |
278,082 ( 0.00%) block_t newVal = pr2b(y, newrank); | |
556,164 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::pr2b(unsigned long, unsigned char) (46,347x) | |
. | |
463,470 ( 0.00%) return this->get(x).compare_exchange_strong(oldState, newVal); | |
4,217,577 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (46,347x) | |
231,735 ( 0.00%) } | |
. | |
. public: | |
. /** | |
. * Clears the DisjointSet of all nodes | |
. * Invalidates all iterators | |
. */ | |
1,208 ( 0.00%) void clear() { | |
906 ( 0.00%) a_blocks.clear(); | |
173,309 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::clear() (302x) | |
906 ( 0.00%) } | |
. | |
. /** | |
. * Check whether the two indices are in the same set | |
. * @param x node to be checked | |
. * @param y node to be checked | |
. * @return where the two indices are in the same set | |
. */ | |
55,086,588 ( 0.05%) bool sameSet(parent_t x, parent_t y) { | |
. while (true) { | |
55,086,588 ( 0.05%) x = findNode(x); | |
7,296,529,695 ( 6.22%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) (9,181,098x) | |
55,086,588 ( 0.05%) y = findNode(y); | |
7,296,914,660 ( 6.22%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) (9,181,098x) | |
45,904,294 ( 0.04%) if (x == y) return true; | |
. // if x's parent is itself, they are not the same set | |
8,372 ( 0.00%) if (b2p(get(x)) == x) return false; | |
54,418 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (598x) | |
15,548 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (598x) | |
4,186 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2p(unsigned long) (598x) | |
. } | |
18,362,196 ( 0.02%) } | |
. | |
. /** | |
. * Union the two specified index nodes | |
. * @param x node to be unioned | |
. * @param y node to be unioned | |
. */ | |
82,629,918 ( 0.07%) void unionNodes(parent_t x, parent_t y) { | |
. while (true) { | |
55,086,612 ( 0.05%) x = findNode(x); | |
7,267,511,702 ( 6.20%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) (9,181,102x) | |
55,086,612 ( 0.05%) y = findNode(y); | |
7,296,529,005 ( 6.22%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) (9,181,102x) | |
. | |
. // no need to union if both already in same set | |
45,860,060 ( 0.04%) if (x == y) return; | |
. | |
454,500 ( 0.00%) rank_t xrank = b2r(get(x)); | |
4,135,950 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (45,450x) | |
1,181,700 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (45,450x) | |
272,700 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2r(unsigned long) (45,450x) | |
454,500 ( 0.00%) rank_t yrank = b2r(get(y)); | |
4,135,950 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::get(unsigned long) const (45,450x) | |
1,181,700 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (45,450x) | |
272,700 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2r(unsigned long) (45,450x) | |
. | |
. // if x comes before y (better rank or earlier & equal node) | |
367,188 ( 0.00%) if (xrank > yrank || ((xrank == yrank) && x > y)) { | |
2,995 ( 0.00%) std::swap(x, y); | |
29,351 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<unsigned long> >, std::is_move_constructible<unsigned long>, std::is_move_assignable<unsigned long> >::value, void>::type std::swap<unsigned long>(unsigned long&, unsigned long&) (599x) | |
2,995 ( 0.00%) std::swap(xrank, yrank); | |
29,351 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<unsigned char> >, std::is_move_constructible<unsigned char>, std::is_move_assignable<unsigned char> >::value, void>::type std::swap<unsigned char>(unsigned char&, unsigned char&) (599x) | |
. } | |
. // join the trees together | |
. // perhaps we can optimise the use of compare_exchange_strong here, as we're in a pessimistic loop | |
590,850 ( 0.00%) if (!updateRoot(x, xrank, y, yrank)) { | |
18,225,450 ( 0.02%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::updateRoot(unsigned long, unsigned char, unsigned long, unsigned char) (45,450x) | |
. continue; | |
. } | |
. // make sure that the ranks are orderable | |
181,800 ( 0.00%) if (xrank == yrank) { | |
10,764 ( 0.00%) updateRoot(y, yrank, y, yrank + 1); | |
359,697 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::updateRoot(unsigned long, unsigned char, unsigned long, unsigned char) (897x) | |
. } | |
. break; | |
. } | |
45,905,510 ( 0.04%) } | |
. | |
. /** | |
. * Create a node with its parent as itself, rank 0 | |
. * @return the newly created block | |
. */ | |
228,760 ( 0.00%) inline block_t makeNode() { | |
. // make node and find out where we've added it | |
183,008 ( 0.00%) std::size_t nodeDetails = a_blocks.createNode(); | |
82,105,655 ( 0.07%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::createNode() (45,752x) | |
. | |
594,776 ( 0.00%) a_blocks.get(nodeDetails).store(pr2b(nodeDetails, 0)); | |
3,522,904 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::get(unsigned long) const (45,752x) | |
549,024 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::pr2b(unsigned long, unsigned char) (45,752x) | |
. | |
320,264 ( 0.00%) return a_blocks.get(nodeDetails).load(); | |
3,522,904 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::get(unsigned long) const (45,752x) | |
137,256 ( 0.00%) }; | |
. | |
. /** | |
. * Extract parent from block | |
. * @param inblock the block to be masked | |
. * @return The parent_t contained in the upper half of block_t | |
. */ | |
440,536,593 ( 0.38%) static inline parent_t b2p(const block_t inblock) { | |
293,691,062 ( 0.25%) return (parent_t)(inblock >> split_size); | |
293,691,062 ( 0.25%) }; | |
. | |
. /** | |
. * Extract rank from block | |
. * @param inblock the block to be masked | |
. * @return the rank_t contained in the lower half of block_t | |
. */ | |
110,303,223 ( 0.09%) static inline rank_t b2r(const block_t inblock) { | |
36,767,741 ( 0.03%) return (rank_t)(inblock & rank_mask); | |
73,535,482 ( 0.06%) }; | |
. | |
. /** | |
. * Yield a block given parent and rank | |
. * @param parent the top half bits | |
. * @param rank the lower half bits | |
. * @return the resultant block after merge | |
. */ | |
183,612,965 ( 0.16%) static inline block_t pr2b(const parent_t parent, const rank_t rank) { | |
183,612,965 ( 0.16%) return (((block_t)parent) << split_size) | rank; | |
73,445,186 ( 0.06%) }; | |
. }; | |
. | |
. template <typename StorePair> | |
. struct EqrelMapComparator { | |
2,660,652,635 ( 2.27%) int operator()(const StorePair& a, const StorePair& b) { | |
3,192,783,162 ( 2.72%) if (a.first < b.first) { | |
352,927,604 ( 0.30%) return -1; | |
2,134,000,350 ( 1.82%) } else if (b.first < a.first) { | |
490,257,466 ( 0.42%) return 1; | |
. } else { | |
110,537,992 ( 0.09%) return 0; | |
. } | |
1,064,261,054 ( 0.91%) } | |
. | |
. bool less(const StorePair& a, const StorePair& b) { | |
. return operator()(a, b) < 0; | |
. } | |
. | |
735,393,324 ( 0.63%) bool equal(const StorePair& a, const StorePair& b) { | |
980,524,432 ( 0.84%) return operator()(a, b) == 0; | |
2,516,510,860 ( 2.15%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (122,474,954x) | |
245,131,108 ( 0.21%) } | |
. }; | |
. | |
. template <typename SparseDomain> | |
54 ( 0.00%) class SparseDisjointSet { | |
25,455 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::~RandomInsertPiggyList() (3x) | |
5,412 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::LambdaBTreeSet<std::pair<int, unsigned long>, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search>::~LambdaBTreeSet() (3x) | |
891 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::~DisjointSet() (3x) | |
. DisjointSet ds; | |
. | |
. template <typename TupleType> | |
. friend class EquivalenceRelation; | |
. | |
. using PairStore = std::pair<SparseDomain, parent_t>; | |
. using SparseMap = | |
. LambdaBTreeSet<PairStore, std::function<parent_t(PairStore&)>, EqrelMapComparator<PairStore>>; | |
-- line 261 ---------------------------------------- | |
-- line 268 ---------------------------------------- | |
. DenseMap denseToSparseMap; | |
. | |
. public: | |
. /** | |
. * Retrieve dense encoding, adding it in if non-existent | |
. * @param in the sparse value | |
. * @return the corresponding dense value | |
. */ | |
331,752,168 ( 0.28%) parent_t toDense(const SparseDomain in) { | |
. // insert into the mapping - if the key doesn't exist (in), the function will be called | |
. // and a dense value will be created for it | |
258,029,464 ( 0.22%) PairStore p = {in, -1}; | |
958,395,152 ( 0.82%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::pair<int, true>(int const&, int&&) (36,861,352x) | |
590,284,904 ( 0.50%) return sparseToDenseMap.insert(p, [&](PairStore& p) { | |
49,794,343,397 (42.46%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&) (36,861,352x) | |
4,275,916,832 ( 3.65%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::function<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}, void, void>(souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}) (36,861,352x) | |
3,501,828,440 ( 2.99%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::~function() (36,861,352x) | |
228,760 ( 0.00%) parent_t c2 = DisjointSet::b2p(this->ds.makeNode()); | |
92,765,871 ( 0.08%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::makeNode() (45,752x) | |
320,264 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::b2p(unsigned long) (45,752x) | |
320,264 ( 0.00%) this->denseToSparseMap.insertAt(c2, p.first); | |
10,227,184 ( 0.01%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::insertAt(unsigned long, int) (45,752x) | |
137,256 ( 0.00%) p.second = c2; | |
45,752 ( 0.00%) return c2; | |
73,722,704 ( 0.06%) }); | |
221,168,112 ( 0.19%) } | |
. | |
. public: | |
96 ( 0.00%) SparseDisjointSet() = default; | |
666 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::DisjointSet() (3x) | |
456 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::RandomInsertPiggyList() (3x) | |
297 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::LambdaBTreeSet<std::pair<int, unsigned long>, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search>::LambdaBTreeSet(souffle::EqrelMapComparator<std::pair<int, unsigned long> > const&) (3x) | |
162 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>::btree_operation_hints() (3x) | |
. | |
. // copy ctor | |
. SparseDisjointSet(SparseDisjointSet& other) = delete; | |
. | |
. // move ctor | |
. SparseDisjointSet(SparseDisjointSet&& other) = delete; | |
. | |
. // copy assign ctor | |
-- line 297 ---------------------------------------- | |
-- line 301 ---------------------------------------- | |
. SparseDisjointSet& operator=(SparseDisjointSet&& other) = delete; | |
. | |
. /** | |
. * For the given dense value, return the associated sparse value | |
. * Undefined behaviour if dense value not in set | |
. * @param in the supplied dense value | |
. * @return the sparse value from the denseToSparseMap | |
. */ | |
1,142,270 ( 0.00%) inline const SparseDomain toSparse(const parent_t in) const { | |
1,599,178 ( 0.00%) return denseToSparseMap.get(in); | |
25,586,848 ( 0.02%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::get(unsigned long) const (228,454x) | |
456,908 ( 0.00%) }; | |
. | |
. /* a wrapper to enable checking in the sparse set - however also adds them if not already existing */ | |
73,448,784 ( 0.06%) inline bool sameSet(SparseDomain x, SparseDomain y) { | |
146,897,568 ( 0.13%) return ds.sameSet(toDense(x), toDense(y)); | |
29,832,042,889 (25.44%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toDense(int) (18,362,196x) | |
14,823,053,133 (12.64%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::sameSet(unsigned long, unsigned long) (9,181,098x) | |
45,905,490 ( 0.04%) }; | |
. /* finds the node in the underlying disjoint set, adding the node if non-existent */ | |
821,712 ( 0.00%) inline SparseDomain findNode(SparseDomain x) { | |
1,917,328 ( 0.00%) return toSparse(ds.findNode(toDense(x))); | |
215,972,132 ( 0.18%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toDense(int) (136,952x) | |
108,508,708 ( 0.09%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::findNode(unsigned long) (136,952x) | |
17,255,952 ( 0.01%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toSparse(unsigned long) const (136,952x) | |
410,856 ( 0.00%) }; | |
. /* union the nodes, add if not existing */ | |
73,448,816 ( 0.06%) inline void unionNodes(SparseDomain x, SparseDomain y) { | |
146,897,632 ( 0.13%) ds.unionNodes(toDense(x), toDense(y)); | |
29,956,922,880 (25.54%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::toDense(int) (18,362,204x) | |
14,880,499,560 (12.69%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::unionNodes(unsigned long, unsigned long) (9,181,102x) | |
55,086,612 ( 0.05%) }; | |
. | |
. inline std::size_t size() { | |
. return ds.size(); | |
. }; | |
. | |
. /** | |
. * Remove all elements from this disjoint set | |
. */ | |
1,208 ( 0.00%) void clear() { | |
906 ( 0.00%) ds.clear(); | |
176,329 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::DisjointSet::clear() (302x) | |
1,208 ( 0.00%) sparseToDenseMap.clear(); | |
568,048 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::clear() (302x) | |
1,208 ( 0.00%) denseToSparseMap.clear(); | |
2,614,591 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::clear() (302x) | |
906 ( 0.00%) } | |
. | |
. /* wrapper for node creation */ | |
. inline void makeNode(SparseDomain val) { | |
. // dense has the behaviour of creating if not exists. | |
. toDense(val); | |
. }; | |
. | |
. /* whether we the supplied node exists */ | |
165,676,950 ( 0.14%) inline bool nodeExists(const SparseDomain val) const { | |
239,311,150 ( 0.20%) return sparseToDenseMap.contains({val, -1}); | |
16,464,867,350 (14.04%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::contains(std::pair<int, unsigned long> const&) const (18,408,550x) | |
478,622,300 ( 0.41%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::pair<int, true>(int const&, int&&) (18,408,550x) | |
110,451,300 ( 0.09%) }; | |
. | |
55,359,312 ( 0.05%) inline bool contains(SparseDomain v1, SparseDomain v2) { | |
165,716,404 ( 0.14%) if (nodeExists(v1) && nodeExists(v2)) { | |
17,458,475,036 (14.89%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::nodeExists(int) const (18,407,950x) | |
64,267,686 ( 0.05%) return sameSet(v1, v2); | |
44,921,347,864 (38.30%) => ../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::SparseDisjointSet<int>::sameSet(int, int) (9,181,098x) | |
. } | |
45,454 ( 0.00%) return false; | |
18,453,104 ( 0.02%) } | |
. }; | |
. } // namespace souffle | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 172 ---------------------------------------- | |
. * A small utility class for implementing simple locks. | |
. */ | |
. class Lock { | |
. // the underlying mutex | |
. std::mutex mux; | |
. | |
. public: | |
. struct Lease { | |
8 ( 0.00%) Lease(std::mutex& mux) : mux(&mux) { | |
3 ( 0.00%) mux.lock(); | |
67 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_mutex.h:std::mutex::lock() (1x) | |
3 ( 0.00%) } | |
. Lease(Lease&& other) : mux(other.mux) { | |
. other.mux = nullptr; | |
. } | |
. Lease(const Lease& other) = delete; | |
4 ( 0.00%) ~Lease() { | |
4 ( 0.00%) if (mux != nullptr) { | |
4 ( 0.00%) mux->unlock(); | |
57 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_mutex.h:std::mutex::unlock() (1x) | |
. } | |
3 ( 0.00%) } | |
. | |
. protected: | |
. std::mutex* mux; | |
. }; | |
. | |
. // acquired the lock for the live-cycle of the returned guard | |
5 ( 0.00%) Lease acquire() { | |
5 ( 0.00%) return Lease(mux); | |
81 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::Lock::Lease::Lease(std::mutex&) (1x) | |
3 ( 0.00%) } | |
. | |
. void lock() { | |
. mux.lock(); | |
. } | |
. | |
. bool try_lock() { | |
. return mux.try_lock(); | |
. } | |
-- line 208 ---------------------------------------- | |
-- line 248 ---------------------------------------- | |
. }; | |
. } // namespace detail | |
. | |
. /* compare: http://en.cppreference.com/w/cpp/atomic/atomic_flag */ | |
. class SpinLock { | |
. std::atomic<int> lck{0}; | |
. | |
. public: | |
9,988 ( 0.00%) SpinLock() = default; | |
20,884 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int>::atomic(int) (908x) | |
. | |
43,708 ( 0.00%) void lock() { | |
6,244 ( 0.00%) detail::Waiter wait; | |
37,464 ( 0.00%) while (!try_lock()) { | |
799,232 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::try_lock() (6,244x) | |
. wait(); | |
. } | |
37,464 ( 0.00%) } | |
. | |
43,708 ( 0.00%) bool try_lock() { | |
6,244 ( 0.00%) int should = 0; | |
24,976 ( 0.00%) return lck.compare_exchange_weak(should, 1, std::memory_order_acquire); | |
31,220 ( 0.00%) } | |
. | |
24,976 ( 0.00%) void unlock() { | |
24,976 ( 0.00%) lck.store(0, std::memory_order_release); | |
18,732 ( 0.00%) } | |
. }; | |
. | |
. /** | |
. * A read/write lock for increased access performance on a | |
. * read-heavy use case. | |
. */ | |
. class ReadWriteLock { | |
. /** | |
-- line 280 ---------------------------------------- | |
-- line 373 ---------------------------------------- | |
. /** | |
. * The lease utilized to link start and end of read phases. | |
. */ | |
. class Lease { | |
. friend class OptimisticReadWriteLock; | |
. int version; | |
. | |
. public: | |
1,668,305,600 ( 1.42%) Lease(int version = 0) : version(version) {} | |
. Lease(const Lease& lease) = default; | |
. Lease& operator=(const Lease& other) = default; | |
. Lease& operator=(Lease&& other) = default; | |
. }; | |
. | |
. /** | |
. * A default constructor initializing the lock. | |
. */ | |
50,204 ( 0.00%) OptimisticReadWriteLock() = default; | |
104,972 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int>::atomic(int) (4,564x) | |
. | |
. /** | |
. * Starts a read phase, making sure that there is currently no | |
. * active concurrent modification going on. The resulting lease | |
. * enables the invoking process to later-on verify that no | |
. * concurrent modifications took place. | |
. */ | |
909,132,000 ( 0.78%) Lease start_read() { | |
129,876,000 ( 0.11%) detail::Waiter wait; | |
. | |
. // get a snapshot of the lease version | |
519,504,000 ( 0.44%) auto v = version.load(std::memory_order_acquire); | |
. | |
. // spin while there is a write in progress | |
519,504,000 ( 0.44%) while ((v & 0x1) == 1) { | |
. // wait for a moment | |
. wait(); | |
. // get an updated version | |
. v = version.load(std::memory_order_acquire); | |
. } | |
. | |
. // done | |
779,256,000 ( 0.66%) return Lease(v); | |
1,298,760,000 ( 1.11%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::Lease::Lease(int) (129,876,000x) | |
649,380,000 ( 0.55%) } | |
. | |
. /** | |
. * Tests whether there have been concurrent modifications since | |
. * the given lease has been issued. | |
. * | |
. * @return true if no updates have been conducted, false otherwise | |
. */ | |
1,167,136,880 ( 1.00%) bool validate(const Lease& lease) { | |
. // check whether version number has changed in the mean-while | |
. std::atomic_thread_fence(std::memory_order_acquire); | |
1,167,136,880 ( 1.00%) return lease.version == version.load(std::memory_order_relaxed); | |
500,201,520 ( 0.43%) } | |
. | |
. /** | |
. * Ends a read phase by validating the given lease. | |
. * | |
. * @return true if no updates have been conducted since the | |
. * issuing of the lease, false otherwise | |
. */ | |
464,607,200 ( 0.40%) bool end_read(const Lease& lease) { | |
. // check lease in the end | |
464,607,200 ( 0.40%) return validate(lease); | |
3,252,250,400 ( 2.77%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) (92,921,440x) | |
185,842,880 ( 0.16%) } | |
. | |
. /** | |
. * Starts a write phase on this lock be ensuring exclusive access | |
. * and invalidating any existing read lease. | |
. */ | |
61,292 ( 0.00%) void start_write() { | |
8,756 ( 0.00%) detail::Waiter wait; | |
. | |
. // set last bit => make it odd | |
43,780 ( 0.00%) auto v = version.fetch_or(0x1, std::memory_order_acquire); | |
. | |
. // check for concurrent writes | |
35,024 ( 0.00%) while ((v & 0x1) == 1) { | |
. // wait for a moment | |
. wait(); | |
. // get an updated version | |
. v = version.fetch_or(0x1, std::memory_order_acquire); | |
. } | |
. | |
. // done | |
52,536 ( 0.00%) } | |
. | |
. /** | |
. * Tries to start a write phase unless there is a currently ongoing | |
. * write operation. In this case no write permission will be obtained. | |
. * | |
. * @return true if write permission has been granted, false otherwise. | |
. */ | |
19,572 ( 0.00%) bool try_start_write() { | |
32,620 ( 0.00%) auto v = version.fetch_or(0x1, std::memory_order_acquire); | |
26,096 ( 0.00%) return !(v & 0x1); | |
13,048 ( 0.00%) } | |
. | |
. /** | |
. * Updates a read-lease to a write permission by a) validating that the | |
. * given lease is still valid and b) making sure that there is no currently | |
. * ongoing write operation. | |
. * | |
. * @return true if the lease was still valid and write permissions could | |
. * be granted, false otherwise. | |
. */ | |
241,800 ( 0.00%) bool try_upgrade_to_write(const Lease& lease) { | |
241,800 ( 0.00%) auto v = version.fetch_or(0x1, std::memory_order_acquire); | |
. | |
. // check whether write privileges have been gained | |
193,440 ( 0.00%) if (v & 0x1) return false; // there is another writer already | |
. | |
. // check whether there was no write since the gain of the read lock | |
290,160 ( 0.00%) if (lease.version == v) return true; | |
. | |
. // if there was, undo write update | |
. abort_write(); | |
. | |
. // operation failed | |
. return false; | |
96,720 ( 0.00%) } | |
. | |
. /** | |
. * Aborts a write operation by reverting to the version number before | |
. * starting the ongoing write, thereby re-validating existing leases. | |
. */ | |
8,112 ( 0.00%) void abort_write() { | |
. // reset version number | |
10,816 ( 0.00%) version.fetch_sub(1, std::memory_order_release); | |
8,112 ( 0.00%) } | |
. | |
. /** | |
. * Ends a write operation by giving up the associated exclusive access | |
. * to the protected data and abandoning the provided write permission. | |
. */ | |
182,808 ( 0.00%) void end_write() { | |
. // update version number another time | |
243,744 ( 0.00%) version.fetch_add(1, std::memory_order_release); | |
182,808 ( 0.00%) } | |
. | |
. /** | |
. * Tests whether currently write permissions have been granted to any | |
. * client by this lock. | |
. * | |
. * @return true if so, false otherwise | |
. */ | |
104,720 ( 0.00%) bool is_write_locked() const { | |
157,080 ( 0.00%) return version & 0x1; | |
654,500 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<int>::operator int() const (26,180x) | |
52,360 ( 0.00%) } | |
. }; | |
. | |
. /** Concurrent tracks locking mechanism. */ | |
. struct MutexConcurrentLanes { | |
. using lane_id = std::size_t; | |
. using unique_lock_type = std::unique_lock<std::mutex>; | |
. | |
783 ( 0.00%) explicit MutexConcurrentLanes(const std::size_t Sz) : Size(Sz), Attribution(attribution(Sz)) { | |
2,133 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::unique_ptr<std::default_delete<souffle::MutexConcurrentLanes::Lane []>, void>() (27x) | |
594 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_mutex.h:std::mutex::mutex() (27x) | |
405 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::MutexConcurrentLanes::attribution(unsigned long) (27x) | |
378 ( 0.00%) Lanes = std::make_unique<Lane[]>(Sz); | |
17,472 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::_MakeUniq<souffle::MutexConcurrentLanes::Lane []>::__array std::make_unique<souffle::MutexConcurrentLanes::Lane []>(unsigned long) (27x) | |
9,342 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::operator=(std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >&&) (27x) | |
1,593 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::~unique_ptr() (27x) | |
189 ( 0.00%) } | |
. MutexConcurrentLanes(const MutexConcurrentLanes&) = delete; | |
. MutexConcurrentLanes(MutexConcurrentLanes&&) = delete; | |
. | |
405 ( 0.00%) virtual ~MutexConcurrentLanes() {} | |
6,615 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::~unique_ptr() (27x) | |
. | |
. // Return the number of lanes. | |
39 ( 0.00%) std::size_t lanes() const { | |
26 ( 0.00%) return Size; | |
26 ( 0.00%) } | |
. | |
. // Select a lane | |
. lane_id getLane(std::size_t I) const { | |
. if (Attribution == lane_attribution::mod_power_of_2) { | |
. return I & (Size - 1); | |
. } else { | |
. return I % Size; | |
. } | |
. } | |
. | |
. /** Change the number of lanes. | |
. * DO not use while threads are using this object. | |
. */ | |
216 ( 0.00%) void setNumLanes(const std::size_t NumLanes) { | |
162 ( 0.00%) Size = (NumLanes == 0 ? 1 : NumLanes); | |
162 ( 0.00%) Attribution = attribution(Size); | |
405 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::MutexConcurrentLanes::attribution(unsigned long) (27x) | |
405 ( 0.00%) Lanes = std::make_unique<Lane[]>(Size); | |
17,039 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::_MakeUniq<souffle::MutexConcurrentLanes::Lane []>::__array std::make_unique<souffle::MutexConcurrentLanes::Lane []>(unsigned long) (27x) | |
13,945 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::operator=(std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >&&) (27x) | |
1,593 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::MutexConcurrentLanes::Lane [], std::default_delete<souffle::MutexConcurrentLanes::Lane []> >::~unique_ptr() (27x) | |
162 ( 0.00%) } | |
. | |
. unique_lock_type guard(const lane_id Lane) const { | |
. return unique_lock_type(Lanes[Lane].Access); | |
. } | |
. | |
. // Lock the given track. | |
. // Must eventually be followed by unlock(Lane). | |
. void lock(const lane_id Lane) const { | |
-- line 566 ---------------------------------------- | |
-- line 620 ---------------------------------------- | |
. Lanes[I].Access.unlock(); | |
. } | |
. } | |
. } | |
. | |
. private: | |
. enum lane_attribution { mod_power_of_2, mod_other }; | |
. | |
540 ( 0.00%) struct Lane { | |
1,188 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_mutex.h:std::mutex::mutex() (54x) | |
. alignas(hardware_destructive_interference_size) std::mutex Access; | |
. }; | |
. | |
216 ( 0.00%) static constexpr lane_attribution attribution(const std::size_t Sz) { | |
108 ( 0.00%) assert(Sz > 0); | |
270 ( 0.00%) if ((Sz & (Sz - 1)) == 0) { | |
. // Sz is a power of 2 | |
108 ( 0.00%) return lane_attribution::mod_power_of_2; | |
. } else { | |
. return lane_attribution::mod_other; | |
. } | |
108 ( 0.00%) } | |
. | |
. protected: | |
. std::size_t Size; | |
. lane_attribution Attribution; | |
. | |
. private: | |
. mutable std::unique_ptr<Lane[]> Lanes; | |
. | |
. alignas(hardware_destructive_interference_size) mutable std::mutex BeforeLockAll; | |
. }; | |
. | |
378 ( 0.00%) class ConcurrentLanes : public MutexConcurrentLanes { | |
7,020 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::MutexConcurrentLanes::~MutexConcurrentLanes() (27x) | |
. using Base = MutexConcurrentLanes; | |
. | |
. public: | |
. using lane_id = Base::lane_id; | |
. using Base::beforeLockAllBut; | |
. using Base::beforeUnlockAllBut; | |
. using Base::guard; | |
. using Base::lock; | |
. using Base::lockAllBut; | |
. using Base::unlock; | |
. using Base::unlockAllBut; | |
. | |
459 ( 0.00%) explicit ConcurrentLanes(const std::size_t Sz) : MutexConcurrentLanes(Sz) {} | |
32,889 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::MutexConcurrentLanes::MutexConcurrentLanes(unsigned long) (27x) | |
. ConcurrentLanes(const ConcurrentLanes&) = delete; | |
. ConcurrentLanes(ConcurrentLanes&&) = delete; | |
. | |
. lane_id threadLane() const { | |
. return getLane(static_cast<std::size_t>(omp_get_thread_num())); | |
. } | |
. | |
162 ( 0.00%) void setNumLanes(const std::size_t NumLanes) { | |
189 ( 0.00%) Base::setNumLanes(NumLanes == 0 ? omp_get_max_threads() : NumLanes); | |
34,089 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::MutexConcurrentLanes::setNumLanes(unsigned long) (27x) | |
108 ( 0.00%) } | |
. | |
. unique_lock_type guard() const { | |
. return Base::guard(threadLane()); | |
. } | |
. | |
. void lock() const { | |
. return Base::lock(threadLane()); | |
. } | |
-- line 683 ---------------------------------------- | |
-- line 851 ---------------------------------------- | |
. } | |
. }; | |
. | |
. #endif | |
. | |
. /** | |
. * Obtains a reference to the lock synchronizing output operations. | |
. */ | |
2 ( 0.00%) inline Lock& getOutputLock() { | |
. static Lock outputLock; | |
1 ( 0.00%) return outputLock; | |
2 ( 0.00%) } | |
. | |
. } // namespace souffle | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 135 ---------------------------------------- | |
. * Obtains an iterator pointing to some element within the given | |
. * range that is equal to the given key, if available. If multiple | |
. * elements are equal to the given key, an undefined instance will | |
. * be obtained (no guaranteed lower or upper boundary). If no such | |
. * element is present, a reference to the first element not less than | |
. * the given key will be returned. | |
. */ | |
. template <typename Key, typename Iter, typename Comp> | |
370,879,912 ( 0.32%) Iter operator()(const Key& k, Iter a, Iter b, Comp& comp) const { | |
. Iter c; | |
185,439,956 ( 0.16%) auto count = b - a; | |
373,404,588 ( 0.32%) while (count > 0) { | |
383,292,405 ( 0.33%) auto step = count >> 1; | |
766,584,810 ( 0.65%) c = a + step; | |
894,348,945 ( 0.76%) auto r = comp(*c, k); | |
2,379,567,597 ( 2.03%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (127,764,135x) | |
255,528,270 ( 0.22%) if (r == 0) { | |
36,725,592 ( 0.03%) return c; | |
. } | |
218,802,678 ( 0.19%) if (r < 0) { | |
142,558,221 ( 0.12%) a = ++c; | |
237,597,035 ( 0.20%) count -= step + 1; | |
. } else { | |
123,763,864 ( 0.11%) count = step; | |
. } | |
. } | |
27,997,193 ( 0.02%) return a; | |
92,719,978 ( 0.08%) } | |
. | |
. /** | |
. * Obtains a reference to the first element in the given range that | |
. * is not less than the given key. | |
. */ | |
. template <typename Key, typename Iter, typename Comp> | |
466,657,520 ( 0.40%) Iter lower_bound(const Key& k, Iter a, Iter b, Comp& comp) const { | |
. Iter c; | |
233,328,760 ( 0.20%) auto count = b - a; | |
496,221,916 ( 0.42%) while (count > 0) { | |
442,374,987 ( 0.38%) auto step = count >> 1; | |
884,749,974 ( 0.75%) c = a + step; | |
1,327,124,961 ( 1.13%) if (comp(*c, k) < 0) { | |
2,717,354,893 ( 2.32%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (147,458,329x) | |
188,452,353 ( 0.16%) a = ++c; | |
314,087,255 ( 0.27%) count -= step + 1; | |
. } else { | |
169,281,756 ( 0.14%) count = step; | |
. } | |
. } | |
58,332,190 ( 0.05%) return a; | |
116,664,380 ( 0.10%) } | |
. | |
. /** | |
. * Obtains a reference to the first element in the given range that | |
. * such that the given key is less than the referenced element. | |
. */ | |
. template <typename Key, typename Iter, typename Comp> | |
276,714,000 ( 0.24%) Iter upper_bound(const Key& k, Iter a, Iter b, Comp& comp) const { | |
. Iter c; | |
138,357,000 ( 0.12%) auto count = b - a; | |
403,942,999 ( 0.34%) while (count > 0) { | |
403,027,527 ( 0.34%) auto step = count >> 1; | |
806,055,054 ( 0.69%) c = a + step; | |
1,343,425,090 ( 1.15%) if (comp(k, *c) >= 0) { | |
2,388,362,913 ( 2.04%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::operator()(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (134,251,909x) | |
204,789,084 ( 0.17%) a = ++c; | |
341,315,140 ( 0.29%) count -= step + 1; | |
. } else { | |
132,158,962 ( 0.11%) count = step; | |
. } | |
. } | |
34,589,250 ( 0.03%) return a; | |
69,178,500 ( 0.06%) } | |
. }; | |
. | |
. // ---------- search strategies selection -------------- | |
. | |
. /** | |
. * A template-meta class to select search strategies for b-trees | |
. * depending on the key type. | |
. */ | |
-- line 211 ---------------------------------------- | |
-- line 266 ---------------------------------------- | |
. /* ---------- comparison utilities ---------------- */ | |
. | |
. mutable Comparator comp; | |
. | |
. bool less(const Key& a, const Key& b) const { | |
. return comp.less(a, b); | |
. } | |
. | |
244,663,032 ( 0.21%) bool equal(const Key& a, const Key& b) const { | |
244,663,032 ( 0.21%) return comp.equal(a, b); | |
1,490,392,568 ( 1.27%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (40,777,172x) | |
81,554,344 ( 0.07%) } | |
. | |
. mutable WeakComparator weak_comp; | |
. | |
. bool weak_less(const Key& a, const Key& b) const { | |
. return weak_comp.less(a, b); | |
. } | |
. | |
490,730,292 ( 0.42%) bool weak_equal(const Key& a, const Key& b) const { | |
572,518,674 ( 0.49%) return weak_comp.equal(a, b); | |
2,985,717,556 ( 2.55%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h:souffle::EqrelMapComparator<std::pair<int, unsigned long> >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) (81,697,782x) | |
163,576,764 ( 0.14%) } | |
. | |
. /* -------------- updater utilities ------------- */ | |
. | |
. mutable Updater upd; | |
. void update(Key& old_k, const Key& new_k) { | |
. upd.update(old_k, new_k); | |
. } | |
. | |
-- line 294 ---------------------------------------- | |
-- line 330 ---------------------------------------- | |
. #endif | |
. | |
. // a flag indicating whether this is a inner node or not | |
. const bool inner; | |
. | |
. /** | |
. * A simple constructor for nodes | |
. */ | |
100,276 ( 0.00%) base(bool inner) : parent(nullptr), numElements(0), position(0), inner(inner) {} | |
30,668 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::OptimisticReadWriteLock() (902x) | |
. | |
221,394 ( 0.00%) bool isLeaf() const { | |
221,394 ( 0.00%) return !inner; | |
147,596 ( 0.00%) } | |
. | |
35,232 ( 0.00%) bool isInner() const { | |
23,488 ( 0.00%) return inner; | |
23,488 ( 0.00%) } | |
. | |
19,842 ( 0.00%) node* getParent() const { | |
13,228 ( 0.00%) return parent; | |
13,228 ( 0.00%) } | |
. | |
19,842 ( 0.00%) field_index_type getPositionInParent() const { | |
13,228 ( 0.00%) return position; | |
13,228 ( 0.00%) } | |
. | |
183,738 ( 0.00%) size_type getNumElements() const { | |
122,492 ( 0.00%) return numElements; | |
122,492 ( 0.00%) } | |
. }; | |
. | |
. struct inner_node; | |
. | |
. /** | |
. * The actual, generic node implementation covering the operations | |
. * for both, inner and leaf nodes. | |
. */ | |
-- line 366 ---------------------------------------- | |
-- line 375 ---------------------------------------- | |
. * The actual number of keys/node corrected by functional requirements. | |
. */ | |
. static constexpr std::size_t maxKeys = (desiredNumKeys > 3) ? desiredNumKeys : 3; | |
. | |
. // the keys stored in this node | |
. Key keys[maxKeys]; | |
. | |
. // a simple constructor | |
218,784 ( 0.00%) node(bool inner) : base(inner) {} | |
204,736 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::base(bool) (3,656x) | |
. | |
. /** | |
. * A deep-copy operation creating a clone of this node. | |
. */ | |
. node* clone() const { | |
. // create a clone of this node | |
. node* res = (this->isInner()) ? static_cast<node*>(new inner_node()) | |
. : static_cast<node*>(new leaf_node()); | |
-- line 391 ---------------------------------------- | |
-- line 413 ---------------------------------------- | |
. // that's it | |
. return res; | |
. } | |
. | |
. /** | |
. * A utility function providing a reference to this node as | |
. * an inner node. | |
. */ | |
11,736 ( 0.00%) inner_node& asInnerNode() { | |
11,736 ( 0.00%) assert(this->inner && "Invalid cast!"); | |
2,934 ( 0.00%) return *static_cast<inner_node*>(this); | |
5,868 ( 0.00%) } | |
. | |
. /** | |
. * A utility function providing a reference to this node as | |
. * a const inner node. | |
. */ | |
335,719,596 ( 0.29%) const inner_node& asInnerNode() const { | |
335,719,596 ( 0.29%) assert(this->inner && "Invalid cast!"); | |
83,929,899 ( 0.07%) return *static_cast<const inner_node*>(this); | |
167,859,798 ( 0.14%) } | |
. | |
. /** | |
. * Computes the number of nested levels of the tree rooted | |
. * by this node. | |
. */ | |
. size_type getDepth() const { | |
. if (this->isLeaf()) { | |
. return 1; | |
-- line 441 ---------------------------------------- | |
-- line 487 ---------------------------------------- | |
. } | |
. return res; | |
. } | |
. | |
. /** | |
. * Obtains a pointer to the array of child-pointers | |
. * of this node -- if it is an inner node. | |
. */ | |
11,736 ( 0.00%) node** getChildren() { | |
11,736 ( 0.00%) return asInnerNode().children; | |
32,274 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::asInnerNode() (2,934x) | |
5,868 ( 0.00%) } | |
. | |
. /** | |
. * Obtains a pointer to the array of const child-pointers | |
. * of this node -- if it is an inner node. | |
. */ | |
11,784 ( 0.00%) node* const* getChildren() const { | |
11,784 ( 0.00%) return asInnerNode().children; | |
32,406 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::asInnerNode() const (2,946x) | |
5,892 ( 0.00%) } | |
. | |
. /** | |
. * Obtains a reference to the child of the given index. | |
. */ | |
419,634,765 ( 0.36%) node* getChild(size_type s) const { | |
503,561,718 ( 0.43%) return asInnerNode().children[s]; | |
923,196,483 ( 0.79%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::asInnerNode() const (83,926,953x) | |
167,853,906 ( 0.14%) } | |
. | |
. /** | |
. * Checks whether this node is empty -- can happen due to biased insertion. | |
. */ | |
8,610 ( 0.00%) bool isEmpty() const { | |
11,480 ( 0.00%) return this->numElements == 0; | |
5,740 ( 0.00%) } | |
. | |
. /** | |
. * Checks whether this node is full. | |
. */ | |
15,960 ( 0.00%) bool isFull() const { | |
21,280 ( 0.00%) return this->numElements == maxKeys; | |
10,640 ( 0.00%) } | |
. | |
. /** | |
. * Obtains the point at which full nodes should be split. | |
. * Conventional b-trees always split in half. However, in cases | |
. * where in-order insertions are frequent, a split assigning | |
. * larger portions to the right fragment provide higher performance | |
. * and a better node-filling rate. | |
. */ | |
23,904 ( 0.00%) int getSplitPoint(int /*unused*/) { | |
23,904 ( 0.00%) return static_cast<int>(std::min(3 * maxKeys / 4, maxKeys - 2)); | |
38,844 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_algobase.h:unsigned long const& std::min<unsigned long>(unsigned long const&, unsigned long const&) (2,988x) | |
14,940 ( 0.00%) } | |
. | |
. /** | |
. * Splits this node. | |
. * | |
. * @param root .. a pointer to the root-pointer of the enclosing b-tree | |
. * (might have to be updated if the root-node needs to be split) | |
. * @param idx .. the position of the insert causing the split | |
. */ | |
. #ifdef IS_PARALLEL | |
38,844 ( 0.00%) void split(node** root, lock_type& root_lock, int idx, std::vector<node*>& locked_nodes) { | |
17,928 ( 0.00%) assert(this->lock.is_write_locked()); | |
107,670 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (2,910x) | |
30,306 ( 0.00%) assert(!this->parent || this->parent->lock.is_write_locked()); | |
97,014 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (2,622x) | |
13,782 ( 0.00%) assert((this->parent != nullptr) || root_lock.is_write_locked()); | |
10,656 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (288x) | |
15,642 ( 0.00%) assert(this->isLeaf() || souffle::contains(locked_nodes, this)); | |
23,280 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isLeaf() const (2,910x) | |
38,172 ( 0.00%) assert(!this->parent || souffle::contains(locked_nodes, const_cast<node*>(this->parent))); | |
915,234 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ContainerUtil.h:bool souffle::contains<std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > >(std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > const&, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::value_type const&) (2,622x) | |
. #else | |
. void split(node** root, lock_type& root_lock, int idx) { | |
. #endif | |
11,952 ( 0.00%) assert(this->numElements == maxKeys); | |
. | |
. // get middle element | |
17,928 ( 0.00%) int split_point = getSplitPoint(idx); | |
98,940 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getSplitPoint(int) (2,910x) | |
. | |
. // create a new sibling node | |
15,486 ( 0.00%) node* sibling = (this->inner) ? static_cast<node*>(new inner_node()) | |
8,970 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::inner_node::inner_node() (78x) | |
4,973 ( 0.00%) => ???:operator new(unsigned long) (78x) | |
17,460 ( 0.00%) : static_cast<node*>(new leaf_node()); | |
420,429 ( 0.00%) => ???:operator new(unsigned long) (2,910x) | |
334,650 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::leaf_node::leaf_node() (2,910x) | |
. | |
. #ifdef IS_PARALLEL | |
. // lock sibling | |
11,952 ( 0.00%) sibling->lock.start_write(); | |
98,940 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_write() (2,910x) | |
14,940 ( 0.00%) locked_nodes.push_back(sibling); | |
3,053,151 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::push_back(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (2,910x) | |
. #endif | |
. | |
. // move data over to the new node | |
62,748 ( 0.00%) for (unsigned i = split_point + 1, j = 0; i < maxKeys; ++i, ++j) { | |
125,496 ( 0.00%) sibling->keys[j] = keys[i]; | |
130,950 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (8,730x) | |
. } | |
. | |
. // move child pointers | |
11,952 ( 0.00%) if (this->inner) { | |
. // move pointers to sibling | |
156 ( 0.00%) auto* other = static_cast<inner_node*>(sibling); | |
2,028 ( 0.00%) for (unsigned i = split_point + 1, j = 0; i <= maxKeys; ++i, ++j) { | |
3,744 ( 0.00%) other->children[j] = getChildren()[i]; | |
6,552 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChildren() (312x) | |
1,872 ( 0.00%) other->children[j]->parent = other; | |
1,872 ( 0.00%) other->children[j]->position = static_cast<field_index_type>(j); | |
. } | |
. } | |
. | |
. // update number of elements | |
11,952 ( 0.00%) this->numElements = split_point; | |
17,928 ( 0.00%) sibling->numElements = maxKeys - split_point - 1; | |
. | |
. // update parent | |
. #ifdef IS_PARALLEL | |
23,904 ( 0.00%) grow_parent(root, root_lock, sibling, locked_nodes); | |
3,178,053 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::grow_parent(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&) (2,910x) | |
. #else | |
. grow_parent(root, root_lock, sibling); | |
. #endif | |
26,892 ( 0.00%) } | |
. | |
. /** | |
. * Moves keys from this node to one of its siblings or splits | |
. * this node to make some space for the insertion of an element at | |
. * position idx. | |
. * | |
. * Returns the number of elements moved to the left side, 0 in case | |
. * of a split. The number of moved elements will be <= the given idx. | |
. * | |
. * @param root .. the root node of the b-tree being part of | |
. * @param idx .. the position of the insert triggering this operation | |
. */ | |
. // TODO: remove root_lock ... no longer needed | |
. #ifdef IS_PARALLEL | |
62,546 ( 0.00%) int rebalance_or_split(node** root, lock_type& root_lock, int idx, std::vector<node*>& locked_nodes) { | |
34,116 ( 0.00%) assert(this->lock.is_write_locked()); | |
207,496 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (5,608x) | |
59,984 ( 0.00%) assert(!this->parent || this->parent->lock.is_write_locked()); | |
196,840 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (5,320x) | |
24,574 ( 0.00%) assert((this->parent != nullptr) || root_lock.is_write_locked()); | |
10,656 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (288x) | |
29,132 ( 0.00%) assert(this->isLeaf() || souffle::contains(locked_nodes, this)); | |
44,864 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isLeaf() const (5,608x) | |
75,944 ( 0.00%) assert(!this->parent || souffle::contains(locked_nodes, const_cast<node*>(this->parent))); | |
1,857,000 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ContainerUtil.h:bool souffle::contains<std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > >(std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > const&, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::value_type const&) (5,320x) | |
. #else | |
. int rebalance_or_split(node** root, lock_type& root_lock, int idx) { | |
. #endif | |
. | |
. // this node is full ... and needs some space | |
22,744 ( 0.00%) assert(this->numElements == maxKeys); | |
. | |
. // get snap-shot of parent | |
17,058 ( 0.00%) auto parent = this->parent; | |
17,058 ( 0.00%) auto pos = this->position; | |
. | |
. // Option A) re-balance data | |
22,012 ( 0.00%) if (parent && pos > 0) { | |
42,560 ( 0.00%) node* left = parent->getChild(pos - 1); | |
127,680 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (5,320x) | |
. | |
. #ifdef IS_PARALLEL | |
. // lock access to left sibling | |
37,240 ( 0.00%) if (!left->lock.try_start_write()) { | |
133,000 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::try_start_write() (5,320x) | |
. // left node is currently updated => skip balancing and split | |
. split(root, root_lock, idx, locked_nodes); | |
. return 0; | |
. } | |
. #endif | |
. | |
. // compute number of elements to be movable to left | |
. // space available in left vs. insertion index | |
15,960 ( 0.00%) size_type num = static_cast<size_type>( | |
58,520 ( 0.00%) std::min<int>(static_cast<int>(maxKeys - left->numElements), idx)); | |
69,160 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_algobase.h:int const& std::min<int>(int const&, int const&) (5,320x) | |
. | |
. // if there are elements to move .. | |
10,640 ( 0.00%) if (num > 0) { | |
29,678 ( 0.00%) Key* splitter = &(parent->keys[this->position - 1]); | |
. | |
. // .. move keys to left node | |
29,678 ( 0.00%) left->keys[left->numElements] = *splitter; | |
40,470 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (2,698x) | |
62,054 ( 0.00%) for (size_type i = 0; i < num - 1; ++i) { | |
153,786 ( 0.00%) left->keys[left->numElements + 1 + i] = keys[i]; | |
121,410 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (8,094x) | |
. } | |
29,678 ( 0.00%) *splitter = keys[num - 1]; | |
40,470 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (2,698x) | |
. | |
. // shift keys in this node to the left | |
264,404 ( 0.00%) for (size_type i = 0; i < this->numElements - num; ++i) { | |
458,660 ( 0.00%) keys[i] = keys[i + num]; | |
404,700 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (26,980x) | |
. } | |
. | |
. // .. and children if necessary | |
13,490 ( 0.00%) if (this->isInner()) { | |
18,886 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isInner() const (2,698x) | |
. auto* ileft = static_cast<inner_node*>(left); | |
. auto* iright = static_cast<inner_node*>(this); | |
. | |
. // move children | |
. for (field_index_type i = 0; i < num; ++i) { | |
. ileft->children[left->numElements + i + 1] = iright->children[i]; | |
. } | |
. | |
-- line 672 ---------------------------------------- | |
-- line 684 ---------------------------------------- | |
. | |
. // update position of children | |
. for (size_type i = 0; i < this->numElements - num + 1; ++i) { | |
. iright->children[i]->position = static_cast<field_index_type>(i); | |
. } | |
. } | |
. | |
. // update node sizes | |
16,188 ( 0.00%) left->numElements += num; | |
16,188 ( 0.00%) this->numElements -= num; | |
. | |
. #ifdef IS_PARALLEL | |
10,792 ( 0.00%) left->lock.end_write(); | |
35,074 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (2,698x) | |
. #endif | |
. | |
. // done | |
5,396 ( 0.00%) return static_cast<int>(num); | |
. } | |
. | |
. #ifdef IS_PARALLEL | |
10,488 ( 0.00%) left->lock.abort_write(); | |
36,708 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::abort_write() (2,622x) | |
. #endif | |
. } | |
. | |
. // Option B) split node | |
. #ifdef IS_PARALLEL | |
23,904 ( 0.00%) split(root, root_lock, idx, locked_nodes); | |
8,980,581 ( 0.01%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::split(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, int, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&) (2,910x) | |
. #else | |
. split(root, root_lock, idx); | |
. #endif | |
2,988 ( 0.00%) return 0; // = no re-balancing | |
28,430 ( 0.00%) } | |
. | |
. private: | |
. /** | |
. * Inserts a new sibling into the parent of this node utilizing | |
. * the last key of this node as a separation key. (for internal | |
. * use only) | |
. * | |
. * @param root .. a pointer to the root-pointer of the containing tree | |
. * @param sibling .. the new right-sibling to be add to the parent node | |
. */ | |
. #ifdef IS_PARALLEL | |
35,856 ( 0.00%) void grow_parent(node** root, lock_type& root_lock, node* sibling, std::vector<node*>& locked_nodes) { | |
17,928 ( 0.00%) assert(this->lock.is_write_locked()); | |
107,670 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (2,910x) | |
30,306 ( 0.00%) assert(!this->parent || this->parent->lock.is_write_locked()); | |
97,014 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (2,622x) | |
13,782 ( 0.00%) assert((this->parent != nullptr) || root_lock.is_write_locked()); | |
10,656 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (288x) | |
15,642 ( 0.00%) assert(this->isLeaf() || souffle::contains(locked_nodes, this)); | |
23,280 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isLeaf() const (2,910x) | |
38,172 ( 0.00%) assert(!this->parent || souffle::contains(locked_nodes, const_cast<node*>(this->parent))); | |
919,854 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ContainerUtil.h:bool souffle::contains<std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > >(std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > const&, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::value_type const&) (2,622x) | |
. #else | |
. void grow_parent(node** root, lock_type& root_lock, node* sibling) { | |
. #endif | |
. | |
17,928 ( 0.00%) if (this->parent == nullptr) { | |
1,464 ( 0.00%) assert(*root == this); | |
. | |
. // create a new root node | |
2,562 ( 0.00%) auto* new_root = new inner_node(); | |
33,120 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::inner_node::inner_node() (288x) | |
16,453 ( 0.00%) => ???:operator new(unsigned long) (288x) | |
732 ( 0.00%) new_root->numElements = 1; | |
4,392 ( 0.00%) new_root->keys[0] = keys[this->numElements]; | |
4,320 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (288x) | |
. | |
1,098 ( 0.00%) new_root->children[0] = this; | |
1,098 ( 0.00%) new_root->children[1] = sibling; | |
. | |
. // link this and the sibling node to new root | |
1,098 ( 0.00%) this->parent = new_root; | |
1,098 ( 0.00%) sibling->parent = new_root; | |
732 ( 0.00%) sibling->position = 1; | |
. | |
. // switch root node | |
1,098 ( 0.00%) *root = new_root; | |
. | |
. } else { | |
. // insert new element in parent element | |
7,866 ( 0.00%) auto parent = this->parent; | |
7,866 ( 0.00%) auto pos = this->position; | |
. | |
. #ifdef IS_PARALLEL | |
31,464 ( 0.00%) parent->insert_inner( | |
1,702,058 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::insert_inner(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, unsigned int, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&) (2,622x) | |
18,354 ( 0.00%) root, root_lock, pos, this, keys[this->numElements], sibling, locked_nodes); | |
. #else | |
. parent->insert_inner(root, root_lock, pos, this, keys[this->numElements], sibling); | |
. #endif | |
. } | |
21,282 ( 0.00%) } | |
. | |
. /** | |
. * Inserts a new element into an inner node (for internal use only). | |
. * | |
. * @param root .. a pointer to the root-pointer of the containing tree | |
. * @param pos .. the position to insert the new key | |
. * @param key .. the key to insert | |
. * @param newNode .. the new right-child of the inserted key | |
. */ | |
. #ifdef IS_PARALLEL | |
45,900 ( 0.00%) void insert_inner(node** root, lock_type& root_lock, unsigned pos, node* predecessor, const Key& key, | |
. node* newNode, std::vector<node*>& locked_nodes) { | |
16,200 ( 0.00%) assert(this->lock.is_write_locked()); | |
97,014 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (2,622x) | |
24,300 ( 0.00%) assert(souffle::contains(locked_nodes, this)); | |
919,854 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ContainerUtil.h:bool souffle::contains<std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > >(std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > const&, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::value_type const&) (2,622x) | |
. #else | |
. void insert_inner(node** root, lock_type& root_lock, unsigned pos, node* predecessor, const Key& key, | |
. node* newNode) { | |
. #endif | |
. | |
. // check capacity | |
16,200 ( 0.00%) if (this->numElements >= maxKeys) { | |
. #ifdef IS_PARALLEL | |
312 ( 0.00%) assert(!this->parent || this->parent->lock.is_write_locked()); | |
702 ( 0.00%) assert((this->parent) || root_lock.is_write_locked()); | |
2,886 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (78x) | |
312 ( 0.00%) assert(!this->parent || souffle::contains(locked_nodes, const_cast<node*>(this->parent))); | |
. #endif | |
. | |
. // split this node | |
. #ifdef IS_PARALLEL | |
702 ( 0.00%) pos -= rebalance_or_split(root, root_lock, pos, locked_nodes); | |
184,934 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::rebalance_or_split(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, int, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&)'2 (78x) | |
. #else | |
. pos -= rebalance_or_split(root, root_lock, pos); | |
. #endif | |
. | |
. // complete insertion within new sibling if necessary | |
546 ( 0.00%) if (pos > this->numElements) { | |
. // correct position | |
546 ( 0.00%) pos = pos - static_cast<unsigned int>(this->numElements) - 1; | |
. | |
. // get new sibling | |
858 ( 0.00%) auto other = this->parent->getChild(this->position + 1); | |
1,872 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (78x) | |
. | |
. #ifdef IS_PARALLEL | |
. // make sure other side is write locked | |
468 ( 0.00%) assert(other->lock.is_write_locked()); | |
2,886 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::is_write_locked() const (78x) | |
546 ( 0.00%) assert(souffle::contains(locked_nodes, other)); | |
34,164 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ContainerUtil.h:bool souffle::contains<std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > >(std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > const&, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::value_type const&) (78x) | |
. | |
. // search for new position (since other may have been altered in the meanwhile) | |
78 ( 0.00%) size_type i = 0; | |
2,340 ( 0.00%) for (; i <= other->numElements; ++i) { | |
2,808 ( 0.00%) if (other->getChild(i) == predecessor) { | |
7,488 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (312x) | |
78 ( 0.00%) break; | |
. } | |
. } | |
. | |
546 ( 0.00%) pos = (i > other->numElements) ? 0 : i; | |
1,092 ( 0.00%) other->insert_inner(root, root_lock, pos, predecessor, key, newNode, locked_nodes); | |
48,906 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::insert_inner(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, unsigned int, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&)'2 (78x) | |
. #else | |
. other->insert_inner(root, root_lock, pos, predecessor, key, newNode); | |
. #endif | |
. return; | |
. } | |
. } | |
. | |
. // move bigger keys one forward | |
18,354 ( 0.00%) for (int i = static_cast<int>(this->numElements) - 1; i >= (int)pos; --i) { | |
. keys[i + 1] = keys[i]; | |
. getChildren()[i + 2] = getChildren()[i + 1]; | |
. ++getChildren()[i + 2]->position; | |
. } | |
. | |
. // ensure proper position | |
18,354 ( 0.00%) assert(getChild(pos) == predecessor); | |
61,056 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (2,544x) | |
. | |
. // insert new element | |
26,220 ( 0.00%) keys[pos] = key; | |
38,160 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (2,544x) | |
28,842 ( 0.00%) getChildren()[pos + 1] = newNode; | |
53,424 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChildren() (2,544x) | |
7,866 ( 0.00%) newNode->parent = this; | |
13,110 ( 0.00%) newNode->position = static_cast<field_index_type>(pos) + 1; | |
13,110 ( 0.00%) ++this->numElements; | |
16,200 ( 0.00%) } | |
. | |
. public: | |
. /** | |
. * Prints a textual representation of this tree to the given output stream. | |
. * This feature is mainly intended for debugging and tuning purposes. | |
. * | |
. * @see btree::printTree | |
. */ | |
-- line 857 ---------------------------------------- | |
-- line 1062 ---------------------------------------- | |
. * the generic implementation of a node by the storage locations | |
. * of child pointers. | |
. */ | |
. struct inner_node : public node { | |
. // references to child nodes owned by this node | |
. node* children[node::maxKeys + 1]; | |
. | |
. // a simple default constructor initializing member fields | |
4,884 ( 0.00%) inner_node() : node(true) {} | |
46,176 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::node(bool) (444x) | |
. | |
. // clear up child nodes recursively | |
2,220 ( 0.00%) ~inner_node() { | |
33,738 ( 0.00%) for (unsigned i = 0; i <= this->numElements; ++i) { | |
20,124 ( 0.00%) if (children[i] != nullptr) { | |
26,832 ( 0.00%) if (children[i]->isLeaf()) { | |
15,528 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isLeaf() const (1,941x) | |
35,178 ( 0.00%) delete static_cast<leaf_node*>(children[i]); | |
191,457 ( 0.00%) => ???:operator delete(void*, unsigned long) (1,785x) | |
. } else { | |
1,872 ( 0.00%) delete static_cast<inner_node*>(children[i]); | |
240,939 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::inner_node::~inner_node()'2 (156x) | |
14,114 ( 0.00%) => ???:operator delete(void*, unsigned long) (156x) | |
. } | |
. } | |
. } | |
1,776 ( 0.00%) } | |
. }; | |
. | |
. /** | |
. * The data type representing leaf nodes of the b-tree. It does not | |
. * add any capabilities to the generic node type. | |
. */ | |
. struct leaf_node : public node { | |
. // a simple default constructor initializing member fields | |
45,254 ( 0.00%) leaf_node() : node(false) {} | |
93,808 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::node::node(bool) (902x) | |
. }; | |
. | |
. // ------------------- iterators ------------------------ | |
. | |
. public: | |
. /** | |
. * The iterator type to be utilized for scanning through btree instances. | |
. */ | |
-- line 1100 ---------------------------------------- | |
-- line 1108 ---------------------------------------- | |
. public: | |
. using iterator_category = std::forward_iterator_tag; | |
. using value_type = Key; | |
. using difference_type = ptrdiff_t; | |
. using pointer = value_type*; | |
. using reference = value_type&; | |
. | |
. // default constructor -- creating an end-iterator | |
184,591,220 ( 0.16%) iterator() : cur(nullptr) {} | |
. | |
. // creates an iterator referencing a specific element within a given node | |
275,496,150 ( 0.23%) iterator(node const* cur, field_index_type pos) : cur(cur), pos(pos) {} | |
. | |
. // a copy constructor | |
36,120 ( 0.00%) iterator(const iterator& other) : cur(other.cur), pos(other.pos) {} | |
. | |
. // an assignment operator | |
. iterator& operator=(const iterator& other) { | |
. cur = other.cur; | |
. pos = other.pos; | |
. return *this; | |
. } | |
. | |
. // the equality operator as required by the iterator concept | |
73,842,480 ( 0.06%) bool operator==(const iterator& other) const { | |
129,569,916 ( 0.11%) return cur == other.cur && pos == other.pos; | |
36,921,240 ( 0.03%) } | |
. | |
. // the not-equality operator as required by the iterator concept | |
92,297,080 ( 0.08%) bool operator!=(const iterator& other) const { | |
110,756,496 ( 0.09%) return !(*this == other); | |
75,592 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::operator==(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator const&) const (4,516x) | |
36,918,832 ( 0.03%) } | |
. | |
. // the deref operator as required by the iterator concept | |
145,368 ( 0.00%) const Key& operator*() const { | |
436,104 ( 0.00%) return cur->keys[pos]; | |
96,912 ( 0.00%) } | |
. | |
. // the increment operator as required by the iterator concept | |
242,280 ( 0.00%) iterator& operator++() { | |
. // the quick mode -- if in a leaf and there are elements left | |
1,113,718 ( 0.00%) if (cur->isLeaf() && ++pos < cur->getNumElements()) { | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::getNumElements() const (2,706x) | |
21,648 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::isLeaf() const (2,706x) | |
78,820 ( 0.00%) return *this; | |
. } | |
. | |
. // otherwise it is a bit more tricky | |
. | |
. // A) currently in an inner node => go to the left-most child | |
54,276 ( 0.00%) if (cur->isInner()) { | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::isInner() const (2,706x) | |
43,050 ( 0.00%) cur = cur->getChildren()[pos + 1]; | |
60,270 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChildren() const (2,870x) | |
20,698 ( 0.00%) while (!cur->isLeaf()) { | |
23,568 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::base::isLeaf() const (2,946x) | |
532 ( 0.00%) cur = cur->getChildren()[0]; | |
1,596 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChildren() const (76x) | |
. } | |
5,740 ( 0.00%) pos = 0; | |
. | |
. // nodes may be empty due to biased insertion | |
20,090 ( 0.00%) if (!cur->isEmpty()) { | |
25,830 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::isEmpty() const (2,870x) | |
5,740 ( 0.00%) return *this; | |
. } | |
. } | |
. | |
. // B) we are at the right-most element of a leaf => go to next inner node | |
37,056 ( 0.00%) assert(cur->isLeaf()); | |
21,648 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::isLeaf() const (2,706x) | |
55,584 ( 0.00%) assert(pos == cur->getNumElements()); | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::getNumElements() const (2,706x) | |
. | |
188,114 ( 0.00%) while (cur != nullptr && pos == cur->getNumElements()) { | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::getNumElements() const (2,706x) | |
39,684 ( 0.00%) pos = cur->getPositionInParent(); | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::getPositionInParent() const (2,706x) | |
39,684 ( 0.00%) cur = cur->getParent(); | |
18,942 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::getParent() const (2,706x) | |
. } | |
6,176 ( 0.00%) return *this; | |
145,368 ( 0.00%) } | |
. | |
. // prints a textual representation of this iterator to the given stream (mainly for debugging) | |
. void print(std::ostream& out = std::cout) const { | |
. out << cur << "[" << (int)pos << "]"; | |
. } | |
. }; | |
. | |
. /** | |
-- line 1186 ---------------------------------------- | |
-- line 1199 ---------------------------------------- | |
. | |
. // the node where the last lower-bound operation terminated | |
. node_cache last_lower_bound_end; | |
. | |
. // the node where the last upper-bound operation terminated | |
. node_cache last_upper_bound_end; | |
. | |
. // default constructor | |
1,217,950,954 ( 1.04%) btree_operation_hints() = default; | |
2,928,064 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::node*, 1u>::LRUCache() (366,008x) | |
. | |
. // resets all hints (to be triggered e.g. when deleting nodes) | |
. void clear() { | |
. last_insert.clear(nullptr); | |
. last_find_end.clear(nullptr); | |
. last_lower_bound_end.clear(nullptr); | |
. last_upper_bound_end.clear(nullptr); | |
. } | |
-- line 1215 ---------------------------------------- | |
-- line 1257 ---------------------------------------- | |
. | |
. public: | |
. // the maximum number of keys stored per node | |
. static constexpr std::size_t max_keys_per_node = node::maxKeys; | |
. | |
. // -- ctors / dtors -- | |
. | |
. // the default constructor creating an empty tree | |
24 ( 0.00%) btree(Comparator comp = Comparator(), WeakComparator weak_comp = WeakComparator()) | |
102 ( 0.00%) : comp(std::move(comp)), weak_comp(std::move(weak_comp)), root(nullptr), leftmost(nullptr) {} | |
102 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::OptimisticReadWriteLock() (3x) | |
36 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<souffle::EqrelMapComparator<std::pair<int, unsigned long> >&>::type&& std::move<souffle::EqrelMapComparator<std::pair<int, unsigned long> >&>(souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) (6x) | |
. | |
. // a constructor creating a tree from the given iterator range | |
. template <typename Iter> | |
. btree(const Iter& a, const Iter& b) : root(nullptr), leftmost(nullptr) { | |
. insert(a, b); | |
. } | |
. | |
. // a move constructor | |
-- line 1274 ---------------------------------------- | |
-- line 1288 ---------------------------------------- | |
. /** | |
. * An internal constructor enabling the specific creation of a tree | |
. * based on internal parameters. | |
. */ | |
. btree(size_type /* size */, node* root, leaf_node* leftmost) : root(root), leftmost(leftmost) {} | |
. | |
. public: | |
. // the destructor freeing all contained nodes | |
24 ( 0.00%) ~btree() { | |
18 ( 0.00%) clear(); | |
57 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::clear() (3x) | |
18 ( 0.00%) } | |
. | |
. // -- mutators and observers -- | |
. | |
. // emptiness check | |
55,225,650 ( 0.05%) bool empty() const { | |
73,634,200 ( 0.06%) return root == nullptr; | |
36,817,100 ( 0.03%) } | |
. | |
. // determines the number of elements in this tree | |
. size_type size() const { | |
. return (root) ? root->countEntries() : 0; | |
. } | |
. | |
. /** | |
. * Inserts the given key into this tree. | |
-- line 1313 ---------------------------------------- | |
-- line 1703 ---------------------------------------- | |
. // a naive insert so far .. seems to work fine | |
. for (auto it = a; it != b; ++it) { | |
. // use insert with hint | |
. insert(*it, hints); | |
. } | |
. } | |
. | |
. // Obtains an iterator referencing the first element of the tree. | |
18,070 ( 0.00%) iterator begin() const { | |
25,298 ( 0.00%) return iterator(leftmost, 0); | |
45,210 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::iterator(souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::node const*, unsigned char) (3,014x) | |
10,842 ( 0.00%) } | |
. | |
. // Obtains an iterator referencing the position after the last element of the tree. | |
92,289,590 ( 0.08%) iterator end() const { | |
55,373,754 ( 0.05%) return iterator(); | |
30,140 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::iterator::iterator() (3,014x) | |
55,373,754 ( 0.05%) } | |
. | |
. /** | |
. * Partitions the full range of this set into up to a given number of chunks. | |
. * The chunks will cover approximately the same number of elements. Also, the | |
. * number of chunks will only approximate the desired number of chunks. | |
. * | |
. * @param num .. the number of chunks requested | |
. * @return a list of chunks partitioning this tree | |
-- line 1726 ---------------------------------------- | |
-- line 1735 ---------------------------------------- | |
. return res; | |
. } | |
. return root->collectChunks(res, num, begin(), end()); | |
. } | |
. | |
. /** | |
. * Determines whether the given element is a member of this tree. | |
. */ | |
147,268,400 ( 0.13%) bool contains(const Key& k) const { | |
55,225,650 ( 0.05%) operation_hints hints; | |
994,061,700 ( 0.85%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>::btree_operation_hints() (18,408,550x) | |
110,451,300 ( 0.09%) return contains(k, hints); | |
15,065,817,550 (12.85%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::contains(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const (18,408,550x) | |
92,042,750 ( 0.08%) } | |
. | |
. /** | |
. * Determines whether the given element is a member of this tree. | |
. */ | |
165,676,950 ( 0.14%) bool contains(const Key& k, operation_hints& hints) const { | |
294,536,800 ( 0.25%) return find(k, hints) != end(); | |
13,648,038,922 (11.64%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::find(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const (18,408,550x) | |
478,942,578 ( 0.41%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::operator!=(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator const&) const (18,408,550x) | |
386,579,550 ( 0.33%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::end() const (18,408,550x) | |
92,042,750 ( 0.08%) } | |
. | |
. /** | |
. * Locates the given key within this tree and returns an iterator | |
. * referencing its position. If not found, an end-iterator will be returned. | |
. */ | |
. iterator find(const Key& k) const { | |
. operation_hints hints; | |
. return find(k, hints); | |
. } | |
. | |
. /** | |
. * Locates the given key within this tree and returns an iterator | |
. * referencing its position. If not found, an end-iterator will be returned. | |
. */ | |
184,085,500 ( 0.16%) iterator find(const Key& k, operation_hints& hints) const { | |
92,042,750 ( 0.08%) if (empty()) { | |
165,676,950 ( 0.14%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::empty() const (18,408,550x) | |
1,812 ( 0.00%) return end(); | |
6,342 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::end() const (302x) | |
. } | |
. | |
55,224,744 ( 0.05%) node* cur = root; | |
. | |
239,307,224 ( 0.20%) auto checkHints = [&](node* last_find_end) { | |
73,632,992 ( 0.06%) if (!last_find_end) return false; | |
. if (!covers(last_find_end, k)) return false; | |
. cur = last_find_end; | |
. return true; | |
. }; | |
. | |
. // test last location searched (temporal locality) | |
147,265,984 ( 0.13%) if (hints.last_find_end.any(checkHints)) { | |
662,696,928 ( 0.57%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::any<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::find(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::find(std::pair<int, unsigned long> const&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&) const::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const (18,408,248x) | |
. // register it as a hit | |
. hint_stats.contains.addHit(); | |
. } else { | |
. // register it as a miss | |
73,632,992 ( 0.06%) hint_stats.contains.addMiss(); | |
110,449,488 ( 0.09%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::CacheAccessCounter::addMiss() (18,408,248x) | |
. } | |
. | |
. // an iterative implementation (since 2/7 faster than recursive) | |
. | |
27,951,741 ( 0.02%) while (true) { | |
139,079,967 ( 0.12%) auto a = &(cur->keys[0]); | |
324,519,923 ( 0.28%) auto b = &(cur->keys[cur->numElements]); | |
. | |
463,599,890 ( 0.40%) auto pos = search(k, a, b, comp); | |
6,489,211,044 ( 5.53%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::operator()<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const (46,359,989x) | |
. | |
622,740,106 ( 0.53%) if (pos < b && equal(*pos, k)) { | |
2,061,272,976 ( 1.76%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const (40,777,172x) | |
110,176,776 ( 0.09%) hints.last_find_end.access(cur); | |
201,990,756 ( 0.17%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::access(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (18,362,796x) | |
183,627,960 ( 0.16%) return iterator(cur, static_cast<field_index_type>(pos - a)); | |
275,441,940 ( 0.23%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::iterator::iterator(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node const*, unsigned char) (18,362,796x) | |
. } | |
. | |
139,985,965 ( 0.12%) if (!cur->inner) { | |
272,712 ( 0.00%) hints.last_find_end.access(cur); | |
499,972 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::access(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (45,452x) | |
272,712 ( 0.00%) return end(); | |
954,492 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::end() const (45,452x) | |
. } | |
. | |
. // continue search in child node | |
223,613,928 ( 0.19%) cur = cur->getChild(pos - a); | |
670,841,784 ( 0.57%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (27,951,741x) | |
. } | |
110,451,300 ( 0.09%) } | |
. | |
. /** | |
. * Obtains a lower boundary for the given key -- hence an iterator referencing | |
. * the smallest value that is not less the given key. If there is no such element, | |
. * an end-iterator will be returned. | |
. */ | |
. iterator lower_bound(const Key& k) const { | |
. operation_hints hints; | |
-- line 1820 ---------------------------------------- | |
-- line 1927 ---------------------------------------- | |
. | |
. cur = cur->getChild(idx); | |
. } | |
. } | |
. | |
. /** | |
. * Clears this tree. | |
. */ | |
7,580 ( 0.00%) void clear() { | |
9,096 ( 0.00%) if (root != nullptr) { | |
7,224 ( 0.00%) if (root->isLeaf()) { | |
7,216 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::base::isLeaf() const (902x) | |
8,244 ( 0.00%) delete static_cast<leaf_node*>(root); | |
92,430 ( 0.00%) => ???:operator delete(void*, unsigned long) (902x) | |
. } else { | |
2,880 ( 0.00%) delete static_cast<inner_node*>(root); | |
533,084 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::inner_node::~inner_node() (288x) | |
25,997 ( 0.00%) => ???:operator delete(void*, unsigned long) (288x) | |
. } | |
. } | |
3,032 ( 0.00%) root = nullptr; | |
3,032 ( 0.00%) leftmost = nullptr; | |
6,064 ( 0.00%) } | |
. | |
. /** | |
. * Swaps the content of this tree with the given tree. This | |
. * is a much more efficient operation than creating a copy and | |
. * realizing the swap utilizing assignment operations. | |
. */ | |
. void swap(btree& other) { | |
. // swap the content | |
-- line 1953 ---------------------------------------- | |
-- line 2209 ---------------------------------------- | |
. return res; | |
. } | |
. }; // namespace souffle | |
. | |
. // Instantiation of static member search. | |
. template <typename Key, typename Comparator, typename Allocator, unsigned blockSize, typename SearchStrategy, | |
. bool isSet, typename WeakComparator, typename Updater> | |
. const SearchStrategy | |
12 ( 0.00%) btree<Key, Comparator, Allocator, blockSize, SearchStrategy, isSet, WeakComparator, Updater>::search; | |
. | |
. } // end namespace detail | |
. | |
. /** | |
. * A b-tree based set implementation. | |
. * | |
. * @tparam Key .. the element type to be stored in this set | |
. * @tparam Comparator .. a class defining an order on the stored elements | |
-- line 2225 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 203 ---------------------------------------- | |
. * @brief Struct holding two objects of arbitrary type. | |
. * | |
. * @tparam _T1 Type of first object. | |
. * @tparam _T2 Type of second object. | |
. * | |
. * <https://gcc.gnu.org/onlinedocs/libstdc++/manual/utilities.html> | |
. */ | |
. template<typename _T1, typename _T2> | |
610 ( 0.00%) struct pair | |
1,325 ( 0.00%) => ???:0x0000000000409d50 (18x) | |
. : private __pair_base<_T1, _T2> | |
. { | |
. typedef _T1 first_type; ///< The type of the `first` member | |
. typedef _T2 second_type; ///< The type of the `second` member | |
. | |
. _T1 first; ///< The first member | |
. _T2 second; ///< The second member | |
. | |
-- line 219 ---------------------------------------- | |
-- line 306 ---------------------------------------- | |
. && !_PCCFP<_U1, _U2>::template | |
. _ImplicitlyConvertiblePair<_U1, _U2>(), | |
. bool>::type=false> | |
. explicit constexpr pair(const pair<_U1, _U2>& __p) | |
. : first(__p.first), second(__p.second) { } | |
. #endif | |
. | |
. #if __cplusplus >= 201103L | |
168 ( 0.00%) constexpr pair(const pair&) = default; ///< Copy constructor | |
896 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (14x) | |
. constexpr pair(pair&&) = default; ///< Move constructor | |
. | |
. // DR 811. | |
. template<typename _U1, typename | |
. enable_if<_PCCP::template | |
. _MoveCopyPair<true, _U1, _T2>(), | |
. bool>::type=true> | |
. constexpr pair(_U1&& __x, const _T2& __y) | |
-- line 322 ---------------------------------------- | |
-- line 328 ---------------------------------------- | |
. bool>::type=false> | |
. explicit constexpr pair(_U1&& __x, const _T2& __y) | |
. : first(std::forward<_U1>(__x)), second(__y) { } | |
. | |
. template<typename _U2, typename | |
. enable_if<_PCCP::template | |
. _CopyMovePair<true, _T1, _U2>(), | |
. bool>::type=true> | |
331,619,556 ( 0.28%) constexpr pair(const _T1& __x, _U2&& __y) | |
773,778,940 ( 0.66%) : first(__x), second(std::forward<_U2>(__y)) { } | |
331,619,412 ( 0.28%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:int&& std::forward<int>(std::remove_reference<int>::type&) (55,269,902x) | |
. | |
. template<typename _U2, typename | |
. enable_if<_PCCP::template | |
. _CopyMovePair<false, _T1, _U2>(), | |
. bool>::type=false> | |
. explicit pair(const _T1& __x, _U2&& __y) | |
. : first(__x), second(std::forward<_U2>(__y)) { } | |
. | |
. template<typename _U1, typename _U2, typename | |
. enable_if<_PCCP::template | |
. _MoveConstructiblePair<_U1, _U2>() | |
. && _PCCP::template | |
. _ImplicitlyMoveConvertiblePair<_U1, _U2>(), | |
. bool>::type=true> | |
552,790 ( 0.00%) constexpr pair(_U1&& __x, _U2&& __y) | |
1,290,606 ( 0.00%) : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } | |
1,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::_Rb_tree_node_base*& std::forward<std::_Rb_tree_node_base*&>(std::remove_reference<std::_Rb_tree_node_base*&>::type&) (300x) | |
1,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::_Rb_tree_node<int>*& std::forward<std::_Rb_tree_node<int>*&>(std::remove_reference<std::_Rb_tree_node<int>*&>::type&) (300x) | |
. | |
. template<typename _U1, typename _U2, typename | |
. enable_if<_PCCP::template | |
. _MoveConstructiblePair<_U1, _U2>() | |
. && !_PCCP::template | |
. _ImplicitlyMoveConvertiblePair<_U1, _U2>(), | |
. bool>::type=false> | |
. explicit constexpr pair(_U1&& __x, _U2&& __y) | |
-- line 361 ---------------------------------------- | |
-- line 363 ---------------------------------------- | |
. | |
. | |
. template<typename _U1, typename _U2, typename | |
. enable_if<_PCCFP<_U1, _U2>::template | |
. _MoveConstructiblePair<_U1, _U2>() | |
. && _PCCFP<_U1, _U2>::template | |
. _ImplicitlyMoveConvertiblePair<_U1, _U2>(), | |
. bool>::type=true> | |
1,800 ( 0.00%) constexpr pair(pair<_U1, _U2>&& __p) | |
900 ( 0.00%) : first(std::forward<_U1>(__p.first)), | |
1,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::_Rb_tree_iterator<int>&& std::forward<std::_Rb_tree_iterator<int> >(std::remove_reference<std::_Rb_tree_iterator<int> >::type&) (300x) | |
4,500 ( 0.00%) second(std::forward<_U2>(__p.second)) { } | |
3,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_tree.h:std::_Rb_tree_const_iterator<int>::_Rb_tree_const_iterator(std::_Rb_tree_iterator<int> const&) (300x) | |
1,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:bool&& std::forward<bool>(std::remove_reference<bool>::type&) (300x) | |
. | |
. template<typename _U1, typename _U2, typename | |
. enable_if<_PCCFP<_U1, _U2>::template | |
. _MoveConstructiblePair<_U1, _U2>() | |
. && !_PCCFP<_U1, _U2>::template | |
. _ImplicitlyMoveConvertiblePair<_U1, _U2>(), | |
. bool>::type=false> | |
. explicit constexpr pair(pair<_U1, _U2>&& __p) | |
-- line 381 ---------------------------------------- | |
-- line 382 ---------------------------------------- | |
. : first(std::forward<_U1>(__p.first)), | |
. second(std::forward<_U2>(__p.second)) { } | |
. | |
. template<typename... _Args1, typename... _Args2> | |
. _GLIBCXX20_CONSTEXPR | |
. pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); | |
. | |
. _GLIBCXX20_CONSTEXPR pair& | |
757,496 ( 0.00%) operator=(typename conditional< | |
. __and_<is_copy_assignable<_T1>, | |
. is_copy_assignable<_T2>>::value, | |
. const pair&, const __nonesuch&>::type __p) | |
. { | |
757,496 ( 0.00%) first = __p.first; | |
757,496 ( 0.00%) second = __p.second; | |
189,374 ( 0.00%) return *this; | |
378,748 ( 0.00%) } | |
. | |
. _GLIBCXX20_CONSTEXPR pair& | |
. operator=(typename conditional< | |
. __and_<is_move_assignable<_T1>, | |
. is_move_assignable<_T2>>::value, | |
. pair&&, __nonesuch&&>::type __p) | |
. noexcept(__and_<is_nothrow_move_assignable<_T1>, | |
. is_nothrow_move_assignable<_T2>>::value) | |
-- line 406 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/UnionFind.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 87 ---------------------------------------- | |
. __memory_order_mask = 0x0ffff, | |
. __memory_order_modifier_mask = 0xffff0000, | |
. __memory_order_hle_acquire = 0x10000, | |
. __memory_order_hle_release = 0x20000 | |
. }; | |
. | |
. constexpr memory_order | |
. operator|(memory_order __m, __memory_order_modifier __mod) | |
146,732,340 ( 0.13%) { | |
110,049,255 ( 0.09%) return memory_order(int(__m) | int(__mod)); | |
73,366,170 ( 0.06%) } | |
. | |
. constexpr memory_order | |
. operator&(memory_order __m, __memory_order_modifier __mod) | |
2,611,862,788 ( 2.23%) { | |
1,958,897,091 ( 1.67%) return memory_order(int(__m) & int(__mod)); | |
1,305,931,394 ( 1.11%) } | |
. | |
. // Drop release ordering as per [atomics.types.operations.req]/21 | |
. constexpr memory_order | |
. __cmpexch_failure_order2(memory_order __m) noexcept | |
110,049,255 ( 0.09%) { | |
73,366,170 ( 0.06%) return __m == memory_order_acq_rel ? memory_order_acquire | |
146,732,340 ( 0.13%) : __m == memory_order_release ? memory_order_relaxed : __m; | |
73,366,170 ( 0.06%) } | |
. | |
. constexpr memory_order | |
. __cmpexch_failure_order(memory_order __m) noexcept | |
183,415,425 ( 0.16%) { | |
. return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) | |
513,563,190 ( 0.44%) | __memory_order_modifier(__m & __memory_order_modifier_mask)); | |
660,295,530 ( 0.56%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (73,366,170x) | |
403,513,935 ( 0.34%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__cmpexch_failure_order2(std::memory_order) (36,683,085x) | |
330,147,765 ( 0.28%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator|(std::memory_order, std::__memory_order_modifier) (36,683,085x) | |
110,049,255 ( 0.09%) } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. atomic_thread_fence(memory_order __m) noexcept | |
333,467,680 ( 0.28%) { __atomic_thread_fence(int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. atomic_signal_fence(memory_order __m) noexcept | |
. { __atomic_signal_fence(int(__m)); } | |
. | |
. /// kill_dependency | |
. template<typename _Tp> | |
. inline _Tp | |
-- line 130 ---------------------------------------- | |
-- line 278 ---------------------------------------- | |
. public: | |
. __atomic_base() noexcept = default; | |
. ~__atomic_base() noexcept = default; | |
. __atomic_base(const __atomic_base&) = delete; | |
. __atomic_base& operator=(const __atomic_base&) = delete; | |
. __atomic_base& operator=(const __atomic_base&) volatile = delete; | |
. | |
. // Requires __int_type convertible to _M_i. | |
81,933 ( 0.00%) constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } | |
. | |
1,029,511,280 ( 0.88%) operator __int_type() const noexcept | |
294,146,080 ( 0.25%) { return load(); } | |
. | |
. operator __int_type() const volatile noexcept | |
. { return load(); } | |
. | |
. __int_type | |
9,340 ( 0.00%) operator=(__int_type __i) noexcept | |
. { | |
. store(__i); | |
934 ( 0.00%) return __i; | |
1,868 ( 0.00%) } | |
. | |
. __int_type | |
. operator=(__int_type __i) volatile noexcept | |
. { | |
. store(__i); | |
. return __i; | |
. } | |
. | |
. __int_type | |
2,400 ( 0.00%) operator++(int) noexcept | |
900 ( 0.00%) { return fetch_add(1); } | |
. | |
. __int_type | |
. operator++(int) volatile noexcept | |
. { return fetch_add(1); } | |
. | |
. __int_type | |
. operator--(int) noexcept | |
. { return fetch_sub(1); } | |
. | |
. __int_type | |
. operator--(int) volatile noexcept | |
. { return fetch_sub(1); } | |
. | |
. __int_type | |
137,256 ( 0.00%) operator++() noexcept | |
274,512 ( 0.00%) { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
. operator++() volatile noexcept | |
. { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
. operator--() noexcept | |
. { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
. operator--() volatile noexcept | |
. { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
35,440 ( 0.00%) operator+=(__int_type __i) noexcept | |
62,020 ( 0.00%) { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
. operator+=(__int_type __i) volatile noexcept | |
. { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } | |
. | |
. __int_type | |
. operator-=(__int_type __i) noexcept | |
. { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } | |
-- line 350 ---------------------------------------- | |
-- line 391 ---------------------------------------- | |
. // Use a fake, minimally aligned pointer. | |
. return __atomic_is_lock_free(sizeof(_M_i), | |
. reinterpret_cast<void *>(-_S_alignment)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept | |
. { | |
46,182,225 ( 0.04%) memory_order __b = __m & __memory_order_mask; | |
8,289 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (921x) | |
. __glibcxx_assert(__b != memory_order_acquire); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
. __glibcxx_assert(__b != memory_order_consume); | |
. | |
27,709,335 ( 0.02%) __atomic_store_n(&_M_i, __i, int(__m)); | |
9,236,445 ( 0.01%) } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. store(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { | |
. memory_order __b = __m & __memory_order_mask; | |
. __glibcxx_assert(__b != memory_order_acquire); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
-- line 413 ---------------------------------------- | |
-- line 414 ---------------------------------------- | |
. __glibcxx_assert(__b != memory_order_consume); | |
. | |
. __atomic_store_n(&_M_i, __i, int(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. load(memory_order __m = memory_order_seq_cst) const noexcept | |
. { | |
2,482,731,195 ( 2.12%) memory_order __b = __m & __memory_order_mask; | |
235,620 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (26,180x) | |
. __glibcxx_assert(__b != memory_order_release); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
. | |
1,193,005,103 ( 1.02%) return __atomic_load_n(&_M_i, int(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. load(memory_order __m = memory_order_seq_cst) const volatile noexcept | |
. { | |
. memory_order __b = __m & __memory_order_mask; | |
. __glibcxx_assert(__b != memory_order_release); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
-- line 434 ---------------------------------------- | |
-- line 450 ---------------------------------------- | |
. { | |
. return __atomic_exchange_n(&_M_i, __i, int(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_weak(__int_type& __i1, __int_type __i2, | |
. memory_order __m1, memory_order __m2) noexcept | |
. { | |
31,220 ( 0.00%) memory_order __b2 = __m2 & __memory_order_mask; | |
56,196 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (6,244x) | |
31,220 ( 0.00%) memory_order __b1 = __m1 & __memory_order_mask; | |
56,196 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (6,244x) | |
. __glibcxx_assert(__b2 != memory_order_release); | |
. __glibcxx_assert(__b2 != memory_order_acq_rel); | |
. __glibcxx_assert(__b2 <= __b1); | |
. | |
56,196 ( 0.00%) return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, | |
6,244 ( 0.00%) int(__m1), int(__m2)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_weak(__int_type& __i1, __int_type __i2, | |
. memory_order __m1, | |
. memory_order __m2) volatile noexcept | |
. { | |
. memory_order __b2 = __m2 & __memory_order_mask; | |
-- line 473 ---------------------------------------- | |
-- line 479 ---------------------------------------- | |
. return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, | |
. int(__m1), int(__m2)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_weak(__int_type& __i1, __int_type __i2, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
. { | |
74,928 ( 0.00%) return compare_exchange_weak(__i1, __i2, __m, | |
374,640 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__cmpexch_failure_order(std::memory_order) (6,244x) | |
6,244 ( 0.00%) __cmpexch_failure_order(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_weak(__int_type& __i1, __int_type __i2, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { | |
. return compare_exchange_weak(__i1, __i2, __m, | |
. __cmpexch_failure_order(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_strong(__int_type& __i1, __int_type __i2, | |
. memory_order __m1, memory_order __m2) noexcept | |
. { | |
183,384,205 ( 0.16%) memory_order __b2 = __m2 & __memory_order_mask; | |
329,674,446 ( 0.28%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (36,630,494x) | |
183,384,205 ( 0.16%) memory_order __b1 = __m1 & __memory_order_mask; | |
329,674,446 ( 0.28%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (36,630,494x) | |
. __glibcxx_assert(__b2 != memory_order_release); | |
. __glibcxx_assert(__b2 != memory_order_acq_rel); | |
. __glibcxx_assert(__b2 <= __b1); | |
. | |
330,091,569 ( 0.28%) return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, | |
36,676,841 ( 0.03%) int(__m1), int(__m2)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_strong(__int_type& __i1, __int_type __i2, | |
. memory_order __m1, | |
. memory_order __m2) volatile noexcept | |
. { | |
. memory_order __b2 = __m2 & __memory_order_mask; | |
-- line 518 ---------------------------------------- | |
-- line 525 ---------------------------------------- | |
. return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, | |
. int(__m1), int(__m2)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_strong(__int_type& __i1, __int_type __i2, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
. { | |
440,122,092 ( 0.38%) return compare_exchange_strong(__i1, __i2, __m, | |
2,197,829,640 ( 1.87%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__cmpexch_failure_order(std::memory_order) (36,630,494x) | |
36,676,841 ( 0.03%) __cmpexch_failure_order(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE bool | |
. compare_exchange_strong(__int_type& __i1, __int_type __i2, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { | |
. return compare_exchange_strong(__i1, __i2, __m, | |
. __cmpexch_failure_order(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_add(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
733,024 ( 0.00%) { return __atomic_fetch_add(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_add(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { return __atomic_fetch_add(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_sub(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
10,816 ( 0.00%) { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_sub(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_and(__int_type __i, | |
-- line 566 ---------------------------------------- | |
-- line 570 ---------------------------------------- | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_and(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { return __atomic_fetch_and(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_or(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
700,040 ( 0.00%) { return __atomic_fetch_or(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_or(__int_type __i, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { return __atomic_fetch_or(&_M_i, __i, int(__m)); } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __int_type | |
. fetch_xor(__int_type __i, | |
-- line 586 ---------------------------------------- | |
-- line 613 ---------------------------------------- | |
. public: | |
. __atomic_base() noexcept = default; | |
. ~__atomic_base() noexcept = default; | |
. __atomic_base(const __atomic_base&) = delete; | |
. __atomic_base& operator=(const __atomic_base&) = delete; | |
. __atomic_base& operator=(const __atomic_base&) volatile = delete; | |
. | |
. // Requires __pointer_type convertible to _M_p. | |
10 ( 0.00%) constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } | |
. | |
1,919,442 ( 0.00%) operator __pointer_type() const noexcept | |
548,412 ( 0.00%) { return load(); } | |
. | |
. operator __pointer_type() const volatile noexcept | |
. { return load(); } | |
. | |
. __pointer_type | |
3,020 ( 0.00%) operator=(__pointer_type __p) noexcept | |
. { | |
. store(__p); | |
302 ( 0.00%) return __p; | |
604 ( 0.00%) } | |
. | |
. __pointer_type | |
. operator=(__pointer_type __p) volatile noexcept | |
. { | |
. store(__p); | |
. return __p; | |
. } | |
. | |
-- line 642 ---------------------------------------- | |
-- line 711 ---------------------------------------- | |
. return __atomic_is_lock_free(sizeof(_M_p), | |
. reinterpret_cast<void *>(-__alignof(_M_p))); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. store(__pointer_type __p, | |
. memory_order __m = memory_order_seq_cst) noexcept | |
. { | |
100,620 ( 0.00%) memory_order __b = __m & __memory_order_mask; | |
2,718 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (302x) | |
. | |
. __glibcxx_assert(__b != memory_order_acquire); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
. __glibcxx_assert(__b != memory_order_consume); | |
. | |
60,372 ( 0.00%) __atomic_store_n(&_M_p, __p, int(__m)); | |
20,124 ( 0.00%) } | |
. | |
. _GLIBCXX_ALWAYS_INLINE void | |
. store(__pointer_type __p, | |
. memory_order __m = memory_order_seq_cst) volatile noexcept | |
. { | |
. memory_order __b = __m & __memory_order_mask; | |
. __glibcxx_assert(__b != memory_order_acquire); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
-- line 734 ---------------------------------------- | |
-- line 735 ---------------------------------------- | |
. __glibcxx_assert(__b != memory_order_consume); | |
. | |
. __atomic_store_n(&_M_p, __p, int(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __pointer_type | |
. load(memory_order __m = memory_order_seq_cst) const noexcept | |
. { | |
2,152,745 ( 0.00%) memory_order __b = __m & __memory_order_mask; | |
2,467,854 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::operator&(std::memory_order, std::__memory_order_modifier) (274,206x) | |
. __glibcxx_assert(__b != memory_order_release); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
. | |
861,098 ( 0.00%) return __atomic_load_n(&_M_p, int(__m)); | |
. } | |
. | |
. _GLIBCXX_ALWAYS_INLINE __pointer_type | |
. load(memory_order __m = memory_order_seq_cst) const volatile noexcept | |
. { | |
. memory_order __b = __m & __memory_order_mask; | |
. __glibcxx_assert(__b != memory_order_release); | |
. __glibcxx_assert(__b != memory_order_acq_rel); | |
-- line 755 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 66 ---------------------------------------- | |
. return souffle::ProgramFactory::newInstance(p); | |
. } | |
. } | |
. | |
. /** | |
. * Relation wrapper used internally in the generated Datalog program | |
. */ | |
. template <class RelType> | |
18 ( 0.00%) class RelationWrapper : public souffle::Relation { | |
10 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::Relation::~Relation() (1x) | |
6 ( 0.00%) => ???:0x0000000000409d50 (1x) | |
. public: | |
. static constexpr arity_type Arity = RelType::Arity; | |
. using TupleType = Tuple<RamDomain, Arity>; | |
. using AttrStrSeq = std::array<const char*, Arity>; | |
. | |
. private: | |
. RelType& relation; | |
. SouffleProgram& program; | |
-- line 82 ---------------------------------------- | |
-- line 112 ---------------------------------------- | |
. protected: | |
. bool equal(const iterator_base& o) const override { | |
. const auto& casted = asAssert<iterator_wrapper>(o); | |
. return it == casted.it; | |
. } | |
. }; | |
. | |
. public: | |
10 ( 0.00%) RelationWrapper(uint32_t id, RelType& r, SouffleProgram& p, std::string name, const AttrStrSeq& t, | |
. const AttrStrSeq& n, arity_type numAuxAttribs) | |
3 ( 0.00%) : relation(r), program(p), name(std::move(name)), attrTypes(t), attrNames(n), id(id), | |
6 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type&& std::move<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (1x) | |
41 ( 0.00%) numAuxAttribs(numAuxAttribs) {} | |
15 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (1x) | |
10 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::Relation::Relation() (1x) | |
. | |
. iterator begin() const override { | |
. return iterator(mk<iterator_wrapper>(id, this, relation.begin())); | |
. } | |
. iterator end() const override { | |
. return iterator(mk<iterator_wrapper>(id, this, relation.end())); | |
. } | |
. | |
-- line 131 ---------------------------------------- | |
-- line 342 ---------------------------------------- | |
. void printStatistics(std::ostream& /* o */) const {} | |
. | |
. private: | |
. std::vector<Tuple<RamDomain, Arity>> data; | |
. Lock insert_lock; | |
. }; | |
. | |
. /** Equivalence relations */ | |
60 ( 0.00%) struct t_eqrel { | |
34,490 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::~EquivalenceRelation() (3x) | |
. static constexpr Relation::arity_type Arity = 2; | |
. using t_tuple = Tuple<RamDomain, 2>; | |
. using t_ind = EquivalenceRelation<t_tuple>; | |
. t_ind ind; | |
. class iterator_0 : public std::iterator<std::forward_iterator_tag, t_tuple> { | |
. using nested_iterator = typename t_ind::iterator; | |
. nested_iterator nested; | |
. t_tuple value; | |
. | |
. public: | |
. iterator_0() = default; | |
22,876 ( 0.00%) iterator_0(const nested_iterator& iter) : nested(iter), value(*iter) {} | |
96,320 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::iterator(souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator const&) (1,204x) | |
8,428 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator*() const (1,204x) | |
. iterator_0(const iterator_0& other) = default; | |
. iterator_0& operator=(const iterator_0& other) = default; | |
91,359,520 ( 0.08%) bool operator==(const iterator_0& other) const { | |
91,359,520 ( 0.08%) return nested == other.nested; | |
347,167,982 ( 0.30%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator==(souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator const&) const (18,271,904x) | |
36,543,808 ( 0.03%) } | |
91,359,520 ( 0.08%) bool operator!=(const iterator_0& other) const { | |
109,631,424 ( 0.09%) return !(*this == other); | |
566,430,830 ( 0.48%) => ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator==(souffle::t_eqrel::iterator_0 const&) const (18,271,904x) | |
36,543,808 ( 0.03%) } | |
54,813,906 ( 0.05%) const t_tuple& operator*() const { | |
36,542,604 ( 0.03%) return value; | |
36,542,604 ( 0.03%) } | |
. const t_tuple* operator->() const { | |
. return &value; | |
. } | |
73,085,208 ( 0.06%) iterator_0& operator++() { | |
54,813,906 ( 0.05%) ++nested; | |
3,626,053,088 ( 3.09%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator++() (18,271,302x) | |
109,627,812 ( 0.09%) value = *nested; | |
127,899,114 ( 0.11%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator::operator*() const (18,271,302x) | |
18,271,302 ( 0.02%) return *this; | |
36,542,604 ( 0.03%) } | |
. }; | |
. class iterator_1 : public std::iterator<std::forward_iterator_tag, t_tuple> { | |
. using nested_iterator = typename t_ind::iterator; | |
. nested_iterator nested; | |
. t_tuple value; | |
. | |
. public: | |
. iterator_1() = default; | |
-- line 389 ---------------------------------------- | |
-- line 407 ---------------------------------------- | |
. value = reorder(*nested); | |
. return *this; | |
. } | |
. }; | |
. using iterator = iterator_0; | |
. struct context { | |
. t_ind::operation_hints hints; | |
. }; | |
4,518 ( 0.00%) context createContext() { | |
. return context(); | |
3,012 ( 0.00%) } | |
. bool insert(const t_tuple& t) { | |
. return ind.insert(t[0], t[1]); | |
. } | |
73,087,616 ( 0.06%) bool insert(const t_tuple& t, context& h) { | |
137,039,280 ( 0.12%) return ind.insert(t[0], t[1], h.hints); | |
107,894,534,143 (92.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::insert(int, int, souffle::EquivalenceRelation<std::array<int, 2ul> >::operation_hints) (9,135,952x) | |
401,981,888 ( 0.34%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (18,271,904x) | |
45,679,760 ( 0.04%) } | |
. bool insert(const RamDomain* ramDomain) { | |
. RamDomain data[2]; | |
. std::copy(ramDomain, ramDomain + 2, data); | |
. const t_tuple& tuple = reinterpret_cast<const t_tuple&>(data); | |
. context h; | |
. return insert(tuple, h); | |
. } | |
. bool insert(RamDomain a1, RamDomain a2) { | |
. RamDomain data[2] = {a1, a2}; | |
. return insert(data); | |
. } | |
1,505 ( 0.00%) void extend(const t_eqrel& other) { | |
1,505 ( 0.00%) ind.extend(other.ind); | |
626,708,817 ( 0.53%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::extend(souffle::EquivalenceRelation<std::array<int, 2ul> > const&) (301x) | |
903 ( 0.00%) } | |
. bool contains(const t_tuple& t) const { | |
. return ind.contains(t[0], t[1]); | |
. } | |
363,600 ( 0.00%) bool contains(const t_tuple& t, context& h) const { | |
681,750 ( 0.00%) return ind.contains(t[0], t[1]); | |
302,698,092 ( 0.26%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::contains(int, int) const (45,450x) | |
1,999,800 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (90,900x) | |
227,250 ( 0.00%) } | |
4 ( 0.00%) std::size_t size() const { | |
3 ( 0.00%) return ind.size(); | |
1,189,940 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::size() const (1x) | |
2 ( 0.00%) } | |
. iterator find(const t_tuple& t) const { | |
. return ind.find(t); | |
. } | |
. iterator find(const t_tuple& t, context& h) const { | |
. return ind.find(t); | |
. } | |
. range<iterator> lowerUpperRange_10(const t_tuple& lower, const t_tuple& upper, context& h) const { | |
. auto r = ind.template getBoundaries<1>((lower), h.hints); | |
-- line 454 ---------------------------------------- | |
-- line 469 ---------------------------------------- | |
. range<iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper, context& h) const { | |
. auto r = ind.template getBoundaries<2>((lower), h.hints); | |
. return make_range(iterator(r.begin()), iterator(r.end())); | |
. } | |
. range<iterator> lowerUpperRange_11(const t_tuple& lower, const t_tuple& upper) const { | |
. context h; | |
. return lowerUpperRange_11(lower, upper, h); | |
. } | |
2,408 ( 0.00%) bool empty() const { | |
3,010 ( 0.00%) return ind.size() == 0; | |
2,426,931 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::size() const (602x) | |
1,204 ( 0.00%) } | |
. std::vector<range<iterator>> partition() const { | |
. std::vector<range<iterator>> res; | |
. for (const auto& cur : ind.partition(10000)) { | |
. res.push_back(make_range(iterator(cur.begin()), iterator(cur.end()))); | |
. } | |
. return res; | |
. } | |
1,208 ( 0.00%) void purge() { | |
906 ( 0.00%) ind.clear(); | |
4,003,555 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::clear() (302x) | |
906 ( 0.00%) } | |
4,816 ( 0.00%) iterator begin() const { | |
6,020 ( 0.00%) return iterator(ind.begin()); | |
172,990,625 ( 0.15%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::begin() const (602x) | |
63,812 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::iterator_0(souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator const&) (602x) | |
3,612 ( 0.00%) } | |
4,816 ( 0.00%) iterator end() const { | |
6,020 ( 0.00%) return iterator(ind.end()); | |
63,812 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::iterator_0(souffle::EquivalenceRelation<std::array<int, 2ul> >::iterator const&) (602x) | |
36,722 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::end() const (602x) | |
3,612 ( 0.00%) } | |
. static t_tuple reorder(const t_tuple& t) { | |
. t_tuple res; | |
. res[0] = t[1]; | |
. res[1] = t[0]; | |
. return res; | |
. } | |
. void printStatistics(std::ostream& /* o */) const {} | |
. }; | |
-- line 503 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 40 ---------------------------------------- | |
. * @tparam SearchStrategy .. enables switching between linear, binary or any other search strategy | |
. * @tparam isSet .. true = set, false = multiset | |
. * @tparam Functor .. a std::function that is called on successful (new) insert | |
. */ | |
. template <typename Key, typename Comparator, | |
. typename Allocator, // is ignored so far - TODO: add support | |
. unsigned blockSize, typename SearchStrategy, bool isSet, typename Functor, | |
. typename WeakComparator = Comparator, typename Updater = detail::updater<Key>> | |
60 ( 0.00%) class LambdaBTree : public btree<Key, Comparator, Allocator, blockSize, SearchStrategy, isSet, WeakComparator, | |
87 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::~btree() (3x) | |
. Updater> { | |
. public: | |
. using parenttype = | |
. btree<Key, Comparator, Allocator, blockSize, SearchStrategy, isSet, WeakComparator, Updater>; | |
. | |
36 ( 0.00%) LambdaBTree(const Comparator& comp = Comparator(), const WeakComparator& weak_comp = WeakComparator()) | |
36 ( 0.00%) : parenttype(comp, weak_comp) {} | |
201 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::btree(souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >) (3x) | |
. | |
. /** | |
. * Inserts the given key into this tree. | |
. */ | |
332,575,686 ( 0.28%) typename Functor::result_type insert(Key& k, const Functor& f) { | |
110,858,562 ( 0.09%) typename parenttype::operation_hints hints; | |
1,990,513,008 ( 1.70%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>::btree_operation_hints() (36,861,352x) | |
221,717,124 ( 0.19%) return insert(k, hints, f); | |
46,956,019,293 (40.04%) => ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&) (36,861,352x) | |
184,764,270 ( 0.16%) } | |
. | |
. // rewriting this because of david's changes | |
443,469,168 ( 0.38%) typename Functor::result_type insert( | |
. Key& k, typename parenttype::operation_hints& hints, const Functor& f) { | |
. #ifdef IS_PARALLEL | |
. | |
. // special handling for inserting first element | |
221,734,584 ( 0.19%) while (this->root == nullptr) { | |
. // try obtaining root-lock | |
8,428 ( 0.00%) if (!this->root_lock.try_start_write()) { | |
7,550 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::try_start_write() (302x) | |
. // somebody else was faster => re-check | |
. continue; | |
. } | |
. | |
. // check loop condition again | |
7,224 ( 0.00%) if (this->root != nullptr) { | |
. // somebody else was faster => normal insert | |
. this->root_lock.abort_write(); | |
. break; | |
. } | |
. | |
. // create new node | |
9,632 ( 0.00%) this->leftmost = new typename parenttype::leaf_node(); | |
34,730 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::leaf_node::leaf_node() (302x) | |
17,237 ( 0.00%) => ???:operator new(unsigned long) (302x) | |
3,612 ( 0.00%) this->leftmost->numElements = 1; | |
. // call the functor as we've successfully inserted | |
7,224 ( 0.00%) typename Functor::result_type res = f(k); | |
79,826,693 ( 0.07%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::operator()(std::pair<int, unsigned long>&) const (302x) | |
. | |
8,428 ( 0.00%) this->leftmost->keys[0] = k; | |
4,530 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (302x) | |
4,816 ( 0.00%) this->root = this->leftmost; | |
. | |
. // operation complete => we can release the root lock | |
4,816 ( 0.00%) this->root_lock.end_write(); | |
3,926 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (302x) | |
. | |
9,632 ( 0.00%) hints.last_insert.access(this->leftmost); | |
3,322 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::access(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (302x) | |
. | |
2,408 ( 0.00%) return res; | |
. } | |
. | |
. // insert using iterative implementation | |
. | |
36,954,560 ( 0.03%) typename parenttype::node* cur = nullptr; | |
. | |
. // test last insert hints | |
147,818,240 ( 0.13%) typename parenttype::lock_type::Lease cur_lease; | |
368,610,500 ( 0.31%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::Lease::Lease(int) (36,861,050x) | |
. | |
776,045,760 ( 0.66%) auto checkHint = [&](typename parenttype::node* last_insert) { | |
. // ignore null pointer | |
147,818,240 ( 0.13%) if (!last_insert) return false; | |
. // get a read lease on indicated node | |
. auto hint_lease = last_insert->lock.start_read(); | |
. // check whether it covers the key | |
. if (!this->weak_covers(last_insert, k)) return false; | |
. // and if there was no concurrent modification | |
. if (!last_insert->lock.validate(hint_lease)) return false; | |
. // use hinted location | |
. cur = last_insert; | |
. // and keep lease | |
. cur_lease = hint_lease; | |
. // we found a hit | |
. return true; | |
. }; | |
. | |
258,681,920 ( 0.22%) if (hints.last_insert.any(checkHint)) { | |
1,548,164,100 ( 1.32%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::any<souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const (36,861,050x) | |
. // register this as a hit | |
. this->hint_stats.inserts.addHit(); | |
. } else { | |
. // register this as a miss | |
147,818,240 ( 0.13%) this->hint_stats.inserts.addMiss(); | |
221,166,300 ( 0.19%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::CacheAccessCounter::addMiss() (36,861,050x) | |
. } | |
. | |
. // if there is no valid hint .. | |
110,863,680 ( 0.09%) if (!cur) { | |
. do { | |
. // get root - access lock | |
184,772,800 ( 0.16%) auto root_lease = this->root_lock.start_read(); | |
1,953,635,650 ( 1.67%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_read() (36,861,050x) | |
. | |
. // start with root | |
110,863,680 ( 0.09%) cur = this->root; | |
. | |
. // get lease of the next node to be accessed | |
184,772,800 ( 0.16%) cur_lease = cur->lock.start_read(); | |
1,953,635,650 ( 1.67%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_read() (36,861,050x) | |
. | |
. // check validity of root pointer | |
295,636,480 ( 0.25%) if (this->root_lock.end_read(root_lease)) { | |
1,732,469,350 ( 1.48%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_read(souffle::OptimisticReadWriteLock::Lease const&) (36,861,050x) | |
36,954,560 ( 0.03%) break; | |
. } | |
. | |
. } while (true); | |
. } | |
. | |
55,966,880 ( 0.05%) while (true) { | |
. // handle inner nodes | |
371,685,760 ( 0.32%) if (cur->inner) { | |
174,996,570 ( 0.15%) auto a = &(cur->keys[0]); | |
408,325,330 ( 0.35%) auto b = &(cur->keys[cur->numElements]); | |
. | |
641,654,090 ( 0.55%) auto pos = this->search.lower_bound(k, a, b, this->weak_comp); | |
7,414,288,384 ( 6.32%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::lower_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const (58,329,037x) | |
233,328,760 ( 0.20%) auto idx = pos - a; | |
. | |
. // early exit for sets | |
729,958,682 ( 0.62%) if (isSet && pos != b && this->weak_equal(*pos, k)) { | |
2,452,036,198 ( 2.09%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::weak_equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const (47,200,029x) | |
. // validate results | |
21,287,790 ( 0.02%) if (!cur->lock.validate(cur_lease)) { | |
82,785,850 ( 0.07%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) (2,365,310x) | |
. // start over again | |
. return insert(k, hints, f); | |
. } | |
. | |
. // update provenance information | |
23,653,100 ( 0.02%) if (typeid(Comparator) != typeid(WeakComparator) && this->less(k, *pos)) { | |
66,228,680 ( 0.06%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/typeinfo:std::type_info::operator!=(std::type_info const&) const (2,365,310x) | |
. if (!cur->lock.try_upgrade_to_write(cur_lease)) { | |
. // start again | |
. return insert(k, hints, f); | |
. } | |
. this->update(*pos, k); | |
. | |
. // get result before releasing lock | |
. auto res = (*pos).second; | |
. | |
. cur->lock.end_write(); | |
. return res; | |
. } | |
. | |
. // get the result before releasing lock | |
7,095,930 ( 0.01%) auto res = (*pos).second; | |
. | |
. // check validity | |
21,287,790 ( 0.02%) if (!cur->lock.validate(cur_lease)) { | |
82,785,850 ( 0.07%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) (2,365,310x) | |
. // start over again | |
. return insert(k, hints, f); | |
. } | |
. | |
. // we found the element => return the result | |
4,730,620 ( 0.00%) return res; | |
. } | |
. | |
. // get next pointer | |
335,801,280 ( 0.29%) auto next = cur->getChild(idx); | |
1,343,129,448 ( 1.15%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::getChild(unsigned long) const (55,963,727x) | |
. | |
. // get lease on next level | |
279,834,400 ( 0.24%) auto next_lease = next->lock.start_read(); | |
2,966,077,531 ( 2.53%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_read() (55,963,727x) | |
. | |
. // check whether there was a write | |
503,701,920 ( 0.43%) if (!cur->lock.end_read(cur_lease)) { | |
2,630,295,169 ( 2.24%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_read(souffle::OptimisticReadWriteLock::Lease const&) (55,963,727x) | |
. // start over | |
. return insert(k, hints, f); | |
. } | |
. | |
. // go to next | |
111,933,760 ( 0.10%) cur = next; | |
. | |
. // move on lease | |
111,933,760 ( 0.10%) cur_lease = next_lease; | |
. | |
. continue; | |
. } | |
. | |
. // the rest is for leaf nodes | |
172,946,250 ( 0.15%) assert(!cur->inner); | |
. | |
. // -- insert node in leaf node -- | |
. | |
103,767,750 ( 0.09%) auto a = &(cur->keys[0]); | |
242,124,750 ( 0.21%) auto b = &(cur->keys[cur->numElements]); | |
. | |
380,481,750 ( 0.32%) auto pos = this->search.upper_bound(k, a, b, this->weak_comp); | |
6,537,439,239 ( 5.57%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:std::pair<int, unsigned long>* souffle::detail::binary_search::upper_bound<std::pair<int, unsigned long>, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> > >(std::pair<int, unsigned long> const&, std::pair<int, unsigned long>*, std::pair<int, unsigned long>*, souffle::EqrelMapComparator<std::pair<int, unsigned long> >&) const (34,495,740x) | |
138,357,000 ( 0.12%) auto idx = pos - a; | |
. | |
. // early exit for sets | |
553,371,567 ( 0.47%) if (isSet && pos != a && this->weak_equal(*(pos - 1), k)) { | |
1,759,014,228 ( 1.50%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::weak_equal(std::pair<int, unsigned long> const&, std::pair<int, unsigned long> const&) const (34,494,843x) | |
. // validate result | |
310,868,010 ( 0.27%) if (!cur->lock.validate(cur_lease)) { | |
1,205,760,150 ( 1.03%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) (34,450,290x) | |
. // start over again | |
. return insert(k, hints, f); | |
. } | |
. | |
. // TODO (pnappa): remove provenance from LambdaBTree - no use for it | |
. // update provenance information | |
345,408,900 ( 0.29%) if (typeid(Comparator) != typeid(WeakComparator) && this->less(k, *(pos - 1))) { | |
964,608,120 ( 0.82%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/typeinfo:std::type_info::operator!=(std::type_info const&) const (34,450,290x) | |
. if (!cur->lock.try_upgrade_to_write(cur_lease)) { | |
. // start again | |
. return insert(k, hints, f); | |
. } | |
. this->update(*(pos - 1), k); | |
. | |
. // retrieve result before releasing lock | |
. auto res = (*(pos - 1)).second; | |
. | |
. cur->lock.end_write(); | |
. return res; | |
. } | |
. | |
. // read result (atomic) -- just as a proof of concept, this is actually not valid!! | |
69,081,780 ( 0.06%) std::atomic<typename Functor::result_type>& loc = | |
69,081,780 ( 0.06%) *reinterpret_cast<std::atomic<typename Functor::result_type>*>(&(*(pos - 1)).second); | |
138,254,160 ( 0.12%) auto res = loc.load(std::memory_order_relaxed); | |
2,446,200 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<souffle::PiggyList<int>*>::load(std::memory_order) const (90,600x) | |
. | |
. // check validity | |
310,868,010 ( 0.27%) if (!cur->lock.validate(cur_lease)) { | |
1,205,760,150 ( 1.03%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::validate(souffle::OptimisticReadWriteLock::Lease const&) (34,450,290x) | |
. // start over again | |
. return insert(k, hints, f); | |
. } | |
. | |
. // we found the element => done | |
69,081,780 ( 0.06%) return res; | |
. } | |
. | |
. // upgrade to write-permission | |
435,240 ( 0.00%) if (!cur->lock.try_upgrade_to_write(cur_lease)) { | |
1,499,850 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::try_upgrade_to_write(souffle::OptimisticReadWriteLock::Lease const&) (45,450x) | |
. // something has changed => restart | |
. hints.last_insert.access(cur); | |
. return insert(k, hints, f); | |
. } | |
. | |
290,160 ( 0.00%) if (cur->numElements >= parenttype::node::maxKeys) { | |
. // -- lock parents -- | |
11,216 ( 0.00%) auto priv = cur; | |
16,824 ( 0.00%) auto parent = priv->parent; | |
16,824 ( 0.00%) std::vector<typename parenttype::node*> parents; | |
342,088 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::vector() (5,608x) | |
. do { | |
17,464 ( 0.00%) if (parent) { | |
21,280 ( 0.00%) parent->lock.start_write(); | |
180,880 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_write() (5,320x) | |
. while (true) { | |
. // check whether parent is correct | |
37,240 ( 0.00%) if (parent == priv->parent) { | |
5,320 ( 0.00%) break; | |
. } | |
. // switch parent | |
. parent->lock.abort_write(); | |
. parent = priv->parent; | |
. parent->lock.start_write(); | |
. } | |
. } else { | |
. // lock root lock => since cur is root | |
2,240 ( 0.00%) this->root_lock.start_write(); | |
15,232 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::start_write() (448x) | |
. } | |
. | |
. // record locked node | |
28,840 ( 0.00%) parents.push_back(parent); | |
5,209,908 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::push_back(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (5,768x) | |
. | |
. // stop at "sphere of influence" | |
72,136 ( 0.00%) if (!parent || !parent->isFull()) { | |
47,880 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::isFull() const (5,320x) | |
5,608 ( 0.00%) break; | |
. } | |
. | |
. // go one step higher | |
320 ( 0.00%) priv = parent; | |
480 ( 0.00%) parent = parent->parent; | |
. | |
. } while (true); | |
. | |
. // split this node | |
16,824 ( 0.00%) auto old_root = this->root; | |
56,080 ( 0.00%) idx -= cur->rebalance_or_split( | |
14,005,113 ( 0.01%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/BTree.h:souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node::rebalance_or_split(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, souffle::OptimisticReadWriteLock&, int, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >&) (5,608x) | |
22,432 ( 0.00%) const_cast<typename parenttype::node**>(&this->root), this->root_lock, idx, parents); | |
. | |
. // release parent lock | |
235,432 ( 0.00%) for (auto it = parents.rbegin(); it != parents.rend(); ++it) { | |
1,206,576 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator.h:bool std::operator!=<__gnu_cxx::__normal_iterator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > > >(std::reverse_iterator<__gnu_cxx::__normal_iterator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > > > const&, std::reverse_iterator<__gnu_cxx::__normal_iterator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > > > const&) (14,364x) | |
790,020 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::rend() (14,364x) | |
314,048 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::rbegin() (5,608x) | |
183,876 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator.h:std::reverse_iterator<__gnu_cxx::__normal_iterator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > > >::operator++() (8,756x) | |
43,780 ( 0.00%) auto parent = *it; | |
332,728 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator.h:std::reverse_iterator<__gnu_cxx::__normal_iterator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node**, std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> > > >::operator*() const (8,756x) | |
. | |
. // release this lock | |
17,512 ( 0.00%) if (parent) { | |
41,540 ( 0.00%) parent->lock.end_write(); | |
108,004 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (8,308x) | |
. } else { | |
2,688 ( 0.00%) if (old_root != this->root) { | |
1,830 ( 0.00%) this->root_lock.end_write(); | |
4,758 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (366x) | |
. } else { | |
328 ( 0.00%) this->root_lock.abort_write(); | |
1,148 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::abort_write() (82x) | |
. } | |
. } | |
. } | |
. | |
. // insert element in right fragment | |
39,256 ( 0.00%) if (((typename parenttype::size_type)idx) > cur->numElements) { | |
. // release current lock | |
11,640 ( 0.00%) cur->lock.end_write(); | |
37,830 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (2,910x) | |
. | |
. // insert in sibling | |
56,928 ( 0.00%) return insert(k, hints, f); | |
4,980,903 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)'2 (2,910x) | |
1,390,805 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, std::allocator<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*> >::~vector() (5,608x) | |
. } | |
. } | |
. | |
. // ok - no split necessary | |
227,250 ( 0.00%) assert(cur->numElements < parenttype::node::maxKeys && "Split required!"); | |
. | |
. // move keys | |
859,938 ( 0.00%) for (int j = cur->numElements; j > idx; --j) { | |
1,444,768 ( 0.00%) cur->keys[j] = cur->keys[j - 1]; | |
1,267,770 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (84,518x) | |
. } | |
. | |
. // insert new element | |
272,700 ( 0.00%) typename Functor::result_type res = f(k); | |
29,990,700 ( 0.03%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::function<unsigned long (std::pair<int, unsigned long>&)>::operator()(std::pair<int, unsigned long>&) const (42,540x) | |
409,050 ( 0.00%) cur->keys[idx] = k; | |
638,100 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<int, unsigned long>::operator=(std::pair<int, unsigned long> const&) (42,540x) | |
181,800 ( 0.00%) cur->numElements++; | |
. | |
. // release lock on current node | |
181,800 ( 0.00%) cur->lock.end_write(); | |
553,020 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::OptimisticReadWriteLock::end_write() (42,540x) | |
. | |
. // remember last insertion position | |
227,250 ( 0.00%) hints.last_insert.access(cur); | |
467,940 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::access(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node* const&) (42,540x) | |
45,450 ( 0.00%) return res; | |
. } | |
. | |
. #else | |
. // special handling for inserting first element | |
. if (this->empty()) { | |
. // create new node | |
. this->leftmost = new typename parenttype::leaf_node(); | |
. this->leftmost->numElements = 1; | |
-- line 371 ---------------------------------------- | |
-- line 468 ---------------------------------------- | |
. cur->keys[idx] = k; | |
. cur->numElements++; | |
. | |
. // remember last insertion position | |
. hints.last_insert.access(cur); | |
. return res; | |
. } | |
. #endif | |
332,601,876 ( 0.28%) } | |
. | |
. /** | |
. * Inserts the given range of elements into this tree. | |
. */ | |
. template <typename Iter> | |
. void insert(const Iter& a, const Iter& b) { | |
. // TODO: improve this beyond a naive insert | |
. typename parenttype::operation_hints hints; | |
-- line 484 ---------------------------------------- | |
-- line 567 ---------------------------------------- | |
. * @tparam Comparator .. a class defining an order on the stored elements | |
. * @tparam Allocator .. utilized for allocating memory for required nodes | |
. * @tparam blockSize .. determines the number of bytes/block utilized by leaf nodes | |
. * @tparam SearchStrategy .. enables switching between linear, binary or any other search strategy | |
. */ | |
. template <typename Key, typename Functor, typename Comparator = detail::comparator<Key>, | |
. typename Allocator = std::allocator<Key>, // is ignored so far | |
. unsigned blockSize = 256, typename SearchStrategy = typename detail::default_strategy<Key>::type> | |
60 ( 0.00%) class LambdaBTreeSet | |
117 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, souffle::PiggyList<int>*>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, std::allocator<std::pair<int, souffle::PiggyList<int>*> >, 256u, souffle::detail::binary_search, true, std::function<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&)>, souffle::EqrelMapComparator<std::pair<int, souffle::PiggyList<int>*> >, souffle::detail::updater<std::pair<int, souffle::PiggyList<int>*> > >::~LambdaBTree() (3x) | |
. : public detail::LambdaBTree<Key, Comparator, Allocator, blockSize, SearchStrategy, true, Functor> { | |
. using super = detail::LambdaBTree<Key, Comparator, Allocator, blockSize, SearchStrategy, true, Functor>; | |
. | |
. friend class detail::LambdaBTree<Key, Comparator, Allocator, blockSize, SearchStrategy, true, Functor>; | |
. | |
. public: | |
. /** | |
. * A default constructor creating an empty set. | |
. */ | |
120 ( 0.00%) LambdaBTreeSet(const Comparator& comp = Comparator()) : super(comp) {} | |
237 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::LambdaBTree(souffle::EqrelMapComparator<std::pair<int, unsigned long> > const&, souffle::EqrelMapComparator<std::pair<int, unsigned long> > const&) (3x) | |
. | |
. /** | |
. * A constructor creating a set based on the given range. | |
. */ | |
. template <typename Iter> | |
. LambdaBTreeSet(const Iter& a, const Iter& b) { | |
. this->insert(a, b); | |
. } | |
-- line 593 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h | |
-------------------------------------------------------------------------------- | |
No information has been collected for /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/EquivalenceRelation.h | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 31 ---------------------------------------- | |
. /** | |
. * A PiggyList that allows insertAt functionality. | |
. * This means we can't append, as we don't know the next available element. | |
. * insertAt is dangerous. You must be careful not to call it for the same index twice! | |
. */ | |
. template <class T> | |
. class RandomInsertPiggyList { | |
. public: | |
285 ( 0.00%) RandomInsertPiggyList() = default; | |
102 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::SpinLock() (3x) | |
69 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<unsigned long>::atomic(unsigned long) (3x) | |
. // an instance where the initial size is not 65k, and instead is user settable (to a power of | |
. // initialbitsize) | |
. RandomInsertPiggyList(std::size_t initialbitsize) : BLOCKBITS(initialbitsize) {} | |
. | |
. /** copy constructor */ | |
. RandomInsertPiggyList(const RandomInsertPiggyList& other) : BLOCKBITS(other.BLOCKBITS) { | |
. this->numElements.store(other.numElements.load()); | |
. | |
-- line 47 ---------------------------------------- | |
-- line 63 ---------------------------------------- | |
. | |
. // move ctr | |
. RandomInsertPiggyList(RandomInsertPiggyList&& other) = delete; | |
. // copy assign ctor | |
. RandomInsertPiggyList& operator=(RandomInsertPiggyList& other) = delete; | |
. // move assign ctor | |
. RandomInsertPiggyList& operator=(RandomInsertPiggyList&& other) = delete; | |
. | |
12 ( 0.00%) ~RandomInsertPiggyList() { | |
9 ( 0.00%) freeList(); | |
25,425 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::freeList() (3x) | |
9 ( 0.00%) } | |
. | |
. inline std::size_t size() const { | |
. return numElements.load(); | |
. } | |
. | |
1,371,030 ( 0.00%) inline T* getBlock(std::size_t blockNum) const { | |
2,193,648 ( 0.00%) return blockLookupTable[blockNum]; | |
9,323,004 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::operator int*() const (274,206x) | |
6,032,532 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) const (274,206x) | |
548,412 ( 0.00%) } | |
. | |
1,371,030 ( 0.00%) inline T& get(std::size_t index) const { | |
1,371,030 ( 0.00%) std::size_t nindex = index + INITIALBLOCKSIZE; | |
1,919,442 ( 0.00%) std::size_t blockNum = (63 - __builtin_clzll(nindex)); | |
2,467,854 ( 0.00%) std::size_t blockInd = (nindex) & ((1 << blockNum) - 1); | |
3,564,678 ( 0.00%) return this->getBlock(blockNum - BLOCKBITS)[blockInd]; | |
19,468,626 ( 0.02%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::getBlock(unsigned long) const (274,206x) | |
548,412 ( 0.00%) } | |
. | |
320,264 ( 0.00%) void insertAt(std::size_t index, T value) { | |
. // starting with an initial blocksize requires some shifting to transform into a nice powers of two | |
. // series | |
686,280 ( 0.00%) std::size_t blockNum = (63 - __builtin_clzll(index + INITIALBLOCKSIZE)) - BLOCKBITS; | |
. | |
. // allocate the block if not allocated | |
594,776 ( 0.00%) if (blockLookupTable[blockNum].load() == nullptr) { | |
1,235,304 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::load(std::memory_order) const (45,752x) | |
1,006,544 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) (45,752x) | |
1,208 ( 0.00%) slock.lock(); | |
44,696 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::lock() (302x) | |
3,926 ( 0.00%) if (blockLookupTable[blockNum].load() == nullptr) { | |
8,154 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::load(std::memory_order) const (302x) | |
6,644 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) (302x) | |
7,248 ( 0.00%) blockLookupTable[blockNum].store(new T[INITIALBLOCKSIZE << blockNum]); | |
6,644 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) (302x) | |
63,292 ( 0.00%) => ???:operator new[](unsigned long) (302x) | |
9,966 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::store(int*, std::memory_order) (302x) | |
. } | |
1,208 ( 0.00%) slock.unlock(); | |
8,758 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::unlock() (302x) | |
. } | |
. | |
320,264 ( 0.00%) this->get(index) = value; | |
5,124,224 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::get(unsigned long) const (45,752x) | |
. // we ALWAYS increment size, even if there was something there before (its impossible to tell!) | |
. // the onus is up to the user to not call this for an index twice | |
183,008 ( 0.00%) ++numElements; | |
411,768 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator++() (45,752x) | |
183,008 ( 0.00%) } | |
. | |
1,208 ( 0.00%) void clear() { | |
906 ( 0.00%) freeList(); | |
2,604,625 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::RandomInsertPiggyList<int>::freeList() (302x) | |
1,510 ( 0.00%) numElements.store(0); | |
906 ( 0.00%) } | |
. const std::size_t BLOCKBITS = 16ul; | |
. const std::size_t INITIALBLOCKSIZE = (1ul << BLOCKBITS); | |
. | |
. // number of elements currently stored within | |
. std::atomic<std::size_t> numElements{0}; | |
. | |
. // 2^64 - 1 elements can be stored (default initialised to nullptrs) | |
. static constexpr std::size_t maxContainers = 64; | |
-- line 121 ---------------------------------------- | |
-- line 122 ---------------------------------------- | |
. std::array<std::atomic<T*>, maxContainers> blockLookupTable = {}; | |
. | |
. // for parallel node insertions | |
. mutable SpinLock slock; | |
. | |
. /** | |
. * Free the arrays allocated within the linked list nodes | |
. */ | |
1,220 ( 0.00%) void freeList() { | |
1,220 ( 0.00%) slock.lock(); | |
45,140 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::lock() (305x) | |
. // delete all - deleting a nullptr is a no-op | |
78,995 ( 0.00%) for (std::size_t i = 0; i < maxContainers; ++i) { | |
215,626 ( 0.00%) delete[] blockLookupTable[i].load(); | |
429,440 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) (19,520x) | |
527,040 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::load(std::memory_order) const (19,520x) | |
51,589 ( 0.00%) => ???:operator delete[](void*) (302x) | |
. // reset the container within to be empty. | |
195,200 ( 0.00%) blockLookupTable[i].store(nullptr); | |
429,440 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<int*>, 64ul>::operator[](unsigned long) (19,520x) | |
644,160 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<int*>::store(int*, std::memory_order) (19,520x) | |
. } | |
1,220 ( 0.00%) slock.unlock(); | |
8,845 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::unlock() (305x) | |
915 ( 0.00%) } | |
. }; | |
. | |
. template <class T> | |
. class PiggyList { | |
. public: | |
327 ( 0.00%) PiggyList() : num_containers(0), container_size(0), m_size(0) {} | |
207 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<unsigned long>::atomic(unsigned long) (9x) | |
102 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::SpinLock() (3x) | |
4,510 ( 0.00%) PiggyList(std::size_t initialbitsize) | |
95,612 ( 0.00%) : BLOCKBITS(initialbitsize), num_containers(0), container_size(0), m_size(0) {} | |
62,238 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/atomic:std::atomic<unsigned long>::atomic(unsigned long) (2,706x) | |
30,668 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::SpinLock() (902x) | |
. | |
. /** copy constructor */ | |
. PiggyList(const PiggyList& other) : BLOCKBITS(other.BLOCKBITS) { | |
. num_containers.store(other.num_containers.load()); | |
. container_size.store(other.container_size.load()); | |
. m_size.store(other.m_size.load()); | |
. // copy each chunk from other into this | |
. // the size of the next container to allocate | |
-- line 155 ---------------------------------------- | |
-- line 163 ---------------------------------------- | |
. assert((cSize >> 1) == container_size.load()); | |
. } | |
. | |
. /** move constructor */ | |
. PiggyList(PiggyList&& other) = delete; | |
. /** copy assign ctor **/ | |
. PiggyList& operator=(const PiggyList& other) = delete; | |
. | |
3,620 ( 0.00%) ~PiggyList() { | |
2,715 ( 0.00%) freeList(); | |
879,052 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::freeList() (902x) | |
2,715 ( 0.00%) } | |
. | |
. /** | |
. * Well, returns the number of nodes exist within the list + number of nodes queued to be inserted | |
. * The reason for this, is that there may be many nodes queued up | |
. * that haven't had time to had containers created and updated | |
. * @return the number of nodes exist within the list + number of nodes queued to be inserted | |
. */ | |
73,459,644 ( 0.06%) inline std::size_t size() const { | |
73,459,644 ( 0.06%) return m_size.load(); | |
36,729,822 ( 0.03%) }; | |
. | |
1,011,015,150 ( 0.86%) inline T* getBlock(std::size_t blocknum) const { | |
1,415,421,210 ( 1.21%) return this->blockLookupTable[blocknum]; | |
407,968,132 ( 0.35%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int*, 64ul>::operator[](unsigned long) const (18,544,006x) | |
404,406,060 ( 0.34%) } | |
. | |
640,514 ( 0.00%) std::size_t append(T element) { | |
549,012 ( 0.00%) std::size_t new_index = m_size.fetch_add(1, std::memory_order_acquire); | |
. | |
. // will this not fit? | |
915,020 ( 0.00%) if (container_size < new_index + 1) { | |
2,379,052 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (91,502x) | |
16,512 ( 0.00%) sl.lock(); | |
610,944 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::lock() (4,128x) | |
. // check and add as many containers as required | |
86,688 ( 0.00%) while (container_size < new_index + 1) { | |
214,656 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (8,256x) | |
86,688 ( 0.00%) blockLookupTable[num_containers] = new T[allocsize]; | |
107,328 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (4,128x) | |
293,475 ( 0.00%) => ???:operator new[](unsigned long) (4,128x) | |
90,816 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int*, 64ul>::operator[](unsigned long) (4,128x) | |
20,640 ( 0.00%) num_containers += 1; | |
45,408 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator+=(unsigned long) (4,128x) | |
28,896 ( 0.00%) container_size += allocsize; | |
45,408 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator+=(unsigned long) (4,128x) | |
. // double the number elements that will be allocated next time | |
20,640 ( 0.00%) allocsize <<= 1; | |
. } | |
16,512 ( 0.00%) sl.unlock(); | |
119,712 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::unlock() (4,128x) | |
. } | |
. | |
640,514 ( 0.00%) this->get(new_index) = element; | |
7,045,654 ( 0.01%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<int>::get(unsigned long) const (91,502x) | |
91,502 ( 0.00%) return new_index; | |
457,510 ( 0.00%) } | |
. | |
274,512 ( 0.00%) std::size_t createNode() { | |
274,512 ( 0.00%) std::size_t new_index = m_size.fetch_add(1, std::memory_order_acquire); | |
. | |
. // will this not fit? | |
457,520 ( 0.00%) if (container_size < new_index + 1) { | |
1,189,552 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (45,752x) | |
1,208 ( 0.00%) sl.lock(); | |
44,696 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::lock() (302x) | |
. // check and add as many containers as required | |
6,342 ( 0.00%) while (container_size < new_index + 1) { | |
15,704 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (604x) | |
79,174,736 ( 0.07%) blockLookupTable[num_containers] = new T[allocsize]; | |
7,852 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (302x) | |
173,113 ( 0.00%) => ???:operator new[](unsigned long) (302x) | |
6,644 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<unsigned long>*, 64ul>::operator[](unsigned long) (302x) | |
1,510 ( 0.00%) num_containers += 1; | |
3,322 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator+=(unsigned long) (302x) | |
2,114 ( 0.00%) container_size += allocsize; | |
3,322 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator+=(unsigned long) (302x) | |
. // double the number elements that will be allocated next time | |
1,510 ( 0.00%) allocsize <<= 1; | |
. } | |
1,208 ( 0.00%) sl.unlock(); | |
8,758 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::unlock() (302x) | |
. } | |
. | |
45,752 ( 0.00%) return new_index; | |
228,760 ( 0.00%) } | |
. | |
. /** | |
. * Retrieve a reference to the stored value at index | |
. * @param index position to search | |
. * @return the value at index | |
. */ | |
1,011,015,150 ( 0.86%) inline T& get(std::size_t index) const { | |
. // supa fast 2^16 size first block | |
1,011,015,150 ( 0.86%) std::size_t nindex = index + BLOCKSIZE; | |
1,415,421,210 ( 1.21%) std::size_t blockNum = (63 - __builtin_clzll(nindex)); | |
1,819,827,270 ( 1.55%) std::size_t blockInd = (nindex) & ((1 << blockNum) - 1); | |
2,628,639,390 ( 2.24%) return this->getBlock(blockNum - BLOCKBITS)[blockInd]; | |
6,611,724,864 ( 5.64%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::getBlock(unsigned long) const (183,659,024x) | |
404,406,060 ( 0.34%) } | |
. | |
. /** | |
. * Clear all elements from the PiggyList | |
. */ | |
1,208 ( 0.00%) void clear() { | |
906 ( 0.00%) freeList(); | |
136,465 ( 0.00%) => ../nixpkgs/result/bin/../include/souffle/datastructure/PiggyList.h:souffle::PiggyList<std::atomic<unsigned long> >::freeList() (302x) | |
1,510 ( 0.00%) m_size = 0; | |
9,362 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator=(unsigned long) (302x) | |
1,510 ( 0.00%) num_containers = 0; | |
9,362 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator=(unsigned long) (302x) | |
. | |
1,208 ( 0.00%) allocsize = BLOCKSIZE; | |
1,510 ( 0.00%) container_size = 0; | |
9,362 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator=(unsigned long) (302x) | |
906 ( 0.00%) } | |
. | |
. class iterator : std::iterator<std::forward_iterator_tag, T> { | |
. std::size_t cIndex = 0; | |
. PiggyList* bl; | |
. | |
. public: | |
. // default ctor, to silence | |
. iterator() = default; | |
-- line 261 ---------------------------------------- | |
-- line 312 ---------------------------------------- | |
. std::array<T*, max_conts> blockLookupTable = {}; | |
. | |
. // for parallel node insertions | |
. mutable SpinLock sl; | |
. | |
. /** | |
. * Free the arrays allocated within the linked list nodes | |
. */ | |
4,828 ( 0.00%) void freeList() { | |
4,828 ( 0.00%) sl.lock(); | |
45,140 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::lock() (305x) | |
. // we don't know which ones are taken up! | |
55,163 ( 0.00%) for (std::size_t i = 0; i < num_containers; ++i) { | |
15,782 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator unsigned long() const (607x) | |
53,160 ( 0.00%) delete[] blockLookupTable[i]; | |
46,921 ( 0.00%) => ???:operator delete[](void*) (302x) | |
6,644 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<std::atomic<unsigned long>*, 64ul>::operator[](unsigned long) (302x) | |
. } | |
4,828 ( 0.00%) sl.unlock(); | |
8,845 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/ParallelUtil.h:souffle::SpinLock::unlock() (305x) | |
3,621 ( 0.00%) } | |
. }; | |
. | |
. } // namespace souffle | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 79 ---------------------------------------- | |
. void* _M_object; | |
. const void* _M_const_object; | |
. void (*_M_function_pointer)(); | |
. void (_Undefined_class::*_M_member_pointer)(); | |
. }; | |
. | |
. union [[gnu::may_alias]] _Any_data | |
. { | |
443,434,248 ( 0.38%) void* _M_access() { return &_M_pod_data[0]; } | |
279,924 ( 0.00%) const void* _M_access() const { return &_M_pod_data[0]; } | |
. | |
. template<typename _Tp> | |
. _Tp& | |
147,811,416 ( 0.13%) _M_access() | |
184,764,270 ( 0.16%) { return *static_cast<_Tp*>(_M_access()); } | |
221,168,112 ( 0.19%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Any_data::_M_access() (36,861,352x) | |
. | |
. template<typename _Tp> | |
. const _Tp& | |
186,616 ( 0.00%) _M_access() const | |
233,270 ( 0.00%) { return *static_cast<const _Tp*>(_M_access()); } | |
5,412 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Any_data::_M_access() const (902x) | |
. | |
. _Nocopy_types _M_unused; | |
. char _M_pod_data[sizeof(_Nocopy_types)]; | |
. }; | |
. | |
. enum _Manager_operation | |
. { | |
. __get_type_info, | |
-- line 106 ---------------------------------------- | |
-- line 128 ---------------------------------------- | |
. && sizeof(_Functor) <= _M_max_size | |
. && __alignof__(_Functor) <= _M_max_align | |
. && (_M_max_align % __alignof__(_Functor) == 0)); | |
. | |
. typedef integral_constant<bool, __stored_locally> _Local_storage; | |
. | |
. // Retrieve a pointer to the function object | |
. static _Functor* | |
186,616 ( 0.00%) _M_get_pointer(const _Any_data& __source) | |
. { | |
. if _GLIBCXX17_CONSTEXPR (__stored_locally) | |
. { | |
186,616 ( 0.00%) const _Functor& __f = __source._M_access<_Functor>(); | |
686,280 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1} const& std::_Any_data::_M_access<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>() const (45,752x) | |
139,962 ( 0.00%) return const_cast<_Functor*>(std::__addressof(__f)); | |
274,512 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1} const* std::__addressof<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1} const>(souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1} const&) (45,752x) | |
. } | |
. else // have stored a pointer | |
. return __source._M_access<_Functor*>(); | |
93,308 ( 0.00%) } | |
. | |
. // Clone a location-invariant function object that fits within | |
. // an _Any_data structure. | |
. static void | |
. _M_clone(_Any_data& __dest, const _Any_data& __source, true_type) | |
. { | |
. ::new (__dest._M_access()) _Functor(__source._M_access<_Functor>()); | |
. } | |
-- line 153 ---------------------------------------- | |
-- line 159 ---------------------------------------- | |
. { | |
. __dest._M_access<_Functor*>() = | |
. new _Functor(*__source._M_access<const _Functor*>()); | |
. } | |
. | |
. // Destroying a location-invariant object may still require | |
. // destruction. | |
. static void | |
147,811,416 ( 0.13%) _M_destroy(_Any_data& __victim, true_type) | |
. { | |
110,858,562 ( 0.09%) __victim._M_access<_Functor>().~_Functor(); | |
1,372,530 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}& std::_Any_data::_M_access<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>() (91,502x) | |
110,858,562 ( 0.09%) } | |
. | |
. // Destroying an object located on the heap. | |
. static void | |
. _M_destroy(_Any_data& __victim, false_type) | |
. { | |
. delete __victim._M_access<_Functor*>(); | |
. } | |
. | |
. public: | |
. static bool | |
258,669,978 ( 0.22%) _M_manager(_Any_data& __dest, const _Any_data& __source, | |
. _Manager_operation __op) | |
. { | |
110,858,562 ( 0.09%) switch (__op) | |
. { | |
. #if __cpp_rtti | |
. case __get_type_info: | |
. __dest._M_access<const type_info*>() = &typeid(_Functor); | |
. break; | |
. #endif | |
. case __get_functor_ptr: | |
. __dest._M_access<_Functor*>() = _M_get_pointer(__source); | |
. break; | |
. | |
. case __clone_functor: | |
. _M_clone(__dest, __source, _Local_storage()); | |
. break; | |
. | |
. case __destroy_functor: | |
110,858,562 ( 0.09%) _M_destroy(__dest, _Local_storage()); | |
2,287,550 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_destroy(std::_Any_data&, std::integral_constant<bool, true>) (91,502x) | |
36,952,854 ( 0.03%) break; | |
. } | |
36,952,854 ( 0.03%) return false; | |
110,858,562 ( 0.09%) } | |
. | |
. static void | |
184,764,270 ( 0.16%) _M_init_functor(_Any_data& __functor, _Functor&& __f) | |
406,481,394 ( 0.35%) { _M_init_functor(__functor, std::move(__f), _Local_storage()); } | |
3,294,072 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_init_functor(std::_Any_data&, {lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&&, std::integral_constant<bool, true>) (91,502x) | |
549,012 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&>::type&& std::move<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&>(std::remove_reference&&) (91,502x) | |
. | |
. template<typename _Signature> | |
. static bool | |
. _M_not_empty_function(const function<_Signature>& __f) | |
. { return static_cast<bool>(__f); } | |
. | |
. template<typename _Tp> | |
. static bool | |
-- line 216 ---------------------------------------- | |
-- line 219 ---------------------------------------- | |
. | |
. template<typename _Class, typename _Tp> | |
. static bool | |
. _M_not_empty_function(_Tp _Class::* __mp) | |
. { return __mp != nullptr; } | |
. | |
. template<typename _Tp> | |
. static bool | |
110,858,562 ( 0.09%) _M_not_empty_function(const _Tp&) | |
110,858,562 ( 0.09%) { return true; } | |
. | |
. private: | |
. static void | |
221,625,622 ( 0.19%) _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type) | |
590,879,656 ( 0.50%) { ::new (__functor._M_access()) _Functor(std::move(__f)); } | |
640,514 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/new:operator new(unsigned long, void*) (91,502x) | |
549,012 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&>::type&& std::move<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&>(std::remove_reference&&) (91,502x) | |
549,012 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Any_data::_M_access() (91,502x) | |
. | |
. static void | |
. _M_init_functor(_Any_data& __functor, _Functor&& __f, false_type) | |
. { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); } | |
. }; | |
. | |
295,622,832 ( 0.25%) _Function_base() : _M_manager(nullptr) { } | |
. | |
147,811,416 ( 0.13%) ~_Function_base() | |
. { | |
147,811,416 ( 0.13%) if (_M_manager) | |
295,622,832 ( 0.25%) _M_manager(_M_functor, _M_functor, __destroy_functor); | |
2,432,849,232 ( 2.07%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_handler<unsigned long (std::pair<int, unsigned long>&), souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_manager(std::_Any_data&, std::_Function_handler<unsigned long (std::pair<int, unsigned long>&), souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}> const&, std::_Manager_operation) (36,861,352x) | |
6,039,132 ( 0.01%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_handler<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&), souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_manager(std::_Any_data&, std::_Function_handler<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&), souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}> const&, std::_Manager_operation) (91,502x) | |
110,858,562 ( 0.09%) } | |
. | |
419,886 ( 0.00%) bool _M_empty() const { return !_M_manager; } | |
. | |
. typedef bool (*_Manager_type)(_Any_data&, const _Any_data&, | |
. _Manager_operation); | |
. | |
. _Any_data _M_functor; | |
. _Manager_type _M_manager; | |
. }; | |
. | |
-- line 256 ---------------------------------------- | |
-- line 260 ---------------------------------------- | |
. template<typename _Res, typename _Functor, typename... _ArgTypes> | |
. class _Function_handler<_Res(_ArgTypes...), _Functor> | |
. : public _Function_base::_Base_manager<_Functor> | |
. { | |
. typedef _Function_base::_Base_manager<_Functor> _Base; | |
. | |
. public: | |
. static bool | |
258,669,978 ( 0.22%) _M_manager(_Any_data& __dest, const _Any_data& __source, | |
. _Manager_operation __op) | |
. { | |
221,717,124 ( 0.19%) switch (__op) | |
. { | |
. #if __cpp_rtti | |
. case __get_type_info: | |
. __dest._M_access<const type_info*>() = &typeid(_Functor); | |
. break; | |
. #endif | |
. case __get_functor_ptr: | |
. __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source); | |
. break; | |
. | |
. default: | |
221,717,124 ( 0.19%) _Base::_M_manager(__dest, __source, __op); | |
3,934,586 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_manager(std::_Any_data&, std::_Function_base::_Base_manager<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}> const&, std::_Manager_operation) (91,502x) | |
. } | |
36,952,854 ( 0.03%) return false; | |
110,858,562 ( 0.09%) } | |
. | |
. static _Res | |
279,924 ( 0.00%) _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args) | |
. { | |
466,540 ( 0.00%) return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor), | |
318,096 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/invoke.h:std::enable_if<is_invocable_r_v<souffle::PiggyList<int>*, souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&, std::pair<int, souffle::PiggyList<int>*>&>, std::enable_if>::type std::__invoke_r<souffle::PiggyList<int>*, souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&, std::pair<int, souffle::PiggyList<int>*>&>(souffle::PiggyList<int>*&&, (souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}&)...) (902x) | |
30,668 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_get_pointer(std::_Any_data const&) (902x) | |
5,412 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::pair<int, souffle::PiggyList<int>*>& std::forward<std::pair<int, souffle::PiggyList<int>*>&>(std::remove_reference<std::pair<int, souffle::PiggyList<int>*>&>::type&) (902x) | |
. std::forward<_ArgTypes>(__args)...); | |
139,962 ( 0.00%) } | |
. }; | |
. | |
. /** | |
. * @brief Primary class template for std::function. | |
. * @ingroup functors | |
. * | |
. * Polymorphic function wrapper. | |
. */ | |
. template<typename _Res, typename... _ArgTypes> | |
369,528,540 ( 0.32%) class function<_Res(_ArgTypes...)> | |
3,133,214,920 ( 2.67%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::~_Function_base() (36,861,352x) | |
. : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>, | |
. private _Function_base | |
. { | |
. template<typename _Func, | |
. typename _Res2 = __invoke_result<_Func&, _ArgTypes...>> | |
. struct _Callable | |
. : __is_invocable_impl<_Res2, _Res>::type | |
. { }; | |
-- line 311 ---------------------------------------- | |
-- line 593 ---------------------------------------- | |
. __x._M_manager(_M_functor, __x._M_functor, __clone_functor); | |
. _M_invoker = __x._M_invoker; | |
. _M_manager = __x._M_manager; | |
. } | |
. } | |
. | |
. template<typename _Res, typename... _ArgTypes> | |
. template<typename _Functor, typename, typename> | |
221,625,622 ( 0.19%) function<_Res(_ArgTypes...)>:: | |
. function(_Functor __f) | |
110,858,562 ( 0.09%) : _Function_base() | |
294,890,816 ( 0.25%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Function_base() (36,861,352x) | |
. { | |
. typedef _Function_handler<_Res(_ArgTypes...), _Functor> _My_handler; | |
. | |
184,764,270 ( 0.16%) if (_My_handler::_M_not_empty_function(__f)) | |
221,168,112 ( 0.19%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:bool std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_not_empty_function<{lambda(std::pair<int, unsigned long>&)#1}>({lambda(std::pair<int, unsigned long>&)#1} const&) (36,861,352x) | |
. { | |
295,622,832 ( 0.25%) _My_handler::_M_init_functor(_M_functor, std::move(__f)); | |
2,322,265,176 ( 1.98%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_Base_manager<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}>::_M_init_functor(std::_Any_data&, {lambda(std::pair<int, unsigned long>&)#1}&&) (36,861,352x) | |
221,168,112 ( 0.19%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}&>::type&& std::move<souffle::SparseDisjointSet<int>::toDense(int)::{lambda(std::pair<int, unsigned long>&)#1}&>(std::remove_reference&&) (36,861,352x) | |
110,858,562 ( 0.09%) _M_invoker = &_My_handler::_M_invoke; | |
110,858,562 ( 0.09%) _M_manager = &_My_handler::_M_manager; | |
. } | |
184,764,270 ( 0.16%) } | |
. | |
. template<typename _Res, typename... _ArgTypes> | |
. _Res | |
279,924 ( 0.00%) function<_Res(_ArgTypes...)>:: | |
. operator()(_ArgTypes... __args) const | |
. { | |
233,270 ( 0.00%) if (_M_empty()) | |
8,118 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_base::_M_empty() const (902x) | |
. __throw_bad_function_call(); | |
466,540 ( 0.00%) return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...); | |
371,314 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/std_function.h:std::_Function_handler<souffle::PiggyList<int>* (std::pair<int, souffle::PiggyList<int>*>&), souffle::EquivalenceRelation<std::array<int, 2ul> >::genAllDisjointSetLists() const::{lambda(std::pair<int, souffle::PiggyList<int>*>&)#1}>::_M_invoke(std::_Any_data const&, std::pair<int, souffle::PiggyList<int>*>&) (902x) | |
5,412 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::pair<int, souffle::PiggyList<int>*>& std::forward<std::pair<int, souffle::PiggyList<int>*>&>(std::remove_reference<std::pair<int, souffle::PiggyList<int>*>&>::type&) (902x) | |
139,962 ( 0.00%) } | |
. | |
. #if __cpp_rtti | |
. template<typename _Res, typename... _ArgTypes> | |
. const type_info& | |
. function<_Res(_ArgTypes...)>:: | |
. target_type() const noexcept | |
. { | |
. if (_M_manager) | |
-- line 631 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- User-annotated source: ./test.cpp | |
-------------------------------------------------------------------------------- | |
No information has been collected for ./test.cpp | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 47 ---------------------------------------- | |
. template<typename _Tp, std::size_t _Nm> | |
. struct __array_traits | |
. { | |
. typedef _Tp _Type[_Nm]; | |
. typedef __is_swappable<_Tp> _Is_swappable; | |
. typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable; | |
. | |
. static constexpr _Tp& | |
1,104,265,420 ( 0.94%) _S_ref(const _Type& __t, std::size_t __n) noexcept | |
1,656,398,130 ( 1.41%) { return const_cast<_Tp&>(__t[__n]); } | |
. | |
. static constexpr _Tp* | |
. _S_ptr(const _Type& __t) noexcept | |
. { return const_cast<_Tp*>(__t); } | |
. }; | |
. | |
. template<typename _Tp> | |
. struct __array_traits<_Tp, 0> | |
-- line 64 ---------------------------------------- | |
-- line 177 ---------------------------------------- | |
. constexpr size_type | |
. max_size() const noexcept { return _Nm; } | |
. | |
. _GLIBCXX_NODISCARD constexpr bool | |
. empty() const noexcept { return size() == 0; } | |
. | |
. // Element access. | |
. _GLIBCXX17_CONSTEXPR reference | |
92,733,800 ( 0.08%) operator[](size_type __n) noexcept | |
129,827,320 ( 0.11%) { return _AT_Type::_S_ref(_M_elems, __n); } | |
82,560 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::__array_traits<int*, 64ul>::_S_ref(int* const (&) [64], unsigned long) (8,256x) | |
. | |
. constexpr const_reference | |
1,287,597,975 ( 1.10%) operator[](size_type __n) const noexcept | |
1,802,637,165 ( 1.54%) { return _AT_Type::_S_ref(_M_elems, __n); } | |
185,440,060 ( 0.16%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::__array_traits<int*, 64ul>::_S_ref(int* const (&) [64], unsigned long) (18,544,006x) | |
. | |
. _GLIBCXX17_CONSTEXPR reference | |
. at(size_type __n) | |
. { | |
. if (__n >= _Nm) | |
. std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) " | |
. ">= _Nm (which is %zu)"), | |
. __n, _Nm); | |
-- line 198 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: test.cpp | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 31 ---------------------------------------- | |
. std::cerr << str << "\"," << (int32_t)idx << "," << (int32_t)len | |
. << ") functor.\n"; | |
. } | |
. return result; | |
. } | |
. | |
. public: | |
. // -- initialize symbol table -- | |
9 ( 0.00%) SymbolTable symTable; // -- initialize record table -- | |
91 ( 0.00%) RecordTable recordTable; | |
84,946 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RecordTable.h:souffle::SpecializedRecordTable<0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul, 10ul, 11ul, 12ul>::SpecializedRecordTable() (1x) | |
5,525 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SymbolTable.h:souffle::SymbolTable::SymbolTable(unsigned long) (1x) | |
5,520 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/utility/Types.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> > souffle::mk<souffle::t_eqrel, souffle::t_eqrel>() (3x) | |
209 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/basic_string.h:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> >(char const*, std::allocator<char> const&) (1x) | |
364 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::SouffleProgram() (1x) | |
95 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SignalHandler.h:souffle::SignalHandler::instance() (1x) | |
85 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::RelationWrapper<souffle::t_eqrel>::RelationWrapper(unsigned int, souffle::t_eqrel&, souffle::SouffleProgram&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::array<char const*, 2ul> const&, std::array<char const*, 2ul> const&, unsigned int) (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (1x) | |
6 ( 0.00%) => ???:0x0000000000409d50 (1x) | |
10 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string() (2x) | |
1 ( 0.00%) => ???:std::allocator<char>::~allocator() (1x) | |
1 ( 0.00%) => ???:std::allocator<char>::allocator() (1x) | |
. // -- Table: e | |
26 ( 0.00%) Own<t_eqrel> rel_1_e = mk<t_eqrel>(); | |
3,586 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::addRelation(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, souffle::Relation&, bool, bool) (1x) | |
209 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/basic_string.h:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> >(char const*, std::allocator<char> const&) (1x) | |
6 ( 0.00%) => ???:0x0000000000409d50 (1x) | |
1 ( 0.00%) => ???:std::allocator<char>::~allocator() (1x) | |
1 ( 0.00%) => ???:std::allocator<char>::allocator() (1x) | |
9 ( 0.00%) souffle::RelationWrapper<t_eqrel> wrapper_rel_1_e; | |
43 ( 0.00%) // -- Table: @delta_e | |
37,899 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RecordTable.h:souffle::SpecializedRecordTable<0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul, 10ul, 11ul, 12ul>::~SpecializedRecordTable() (1x) | |
35,405 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::~unique_ptr() (3x) | |
2,885 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SymbolTable.h:souffle::SymbolTable::~SymbolTable() (1x) | |
1,186 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::~SouffleProgram() (1x) | |
34 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::RelationWrapper<souffle::t_eqrel>::~RelationWrapper() (1x) | |
12 ( 0.00%) => ???:0x0000000000409d50 (2x) | |
3 ( 0.00%) Own<t_eqrel> rel_2_delta_e = mk<t_eqrel>(); | |
. // -- Table: @new_e | |
. Own<t_eqrel> rel_3_new_e = mk<t_eqrel>(); | |
. | |
. public: | |
. Sf_test() | |
. : wrapper_rel_1_e(0, *rel_1_e, *this, "e", | |
. std::array<const char *, 2>{{"i:number", "i:number"}}, | |
. std::array<const char *, 2>{{"x", "y"}}, 0) { | |
. addRelation("e", wrapper_rel_1_e, false, true); | |
12 ( 0.00%) } | |
. ~Sf_test() {} | |
. | |
10 ( 0.00%) private: | |
24 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (1x) | |
6 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type&& std::move<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (1x) | |
10 ( 0.00%) std::string inputDirectory; | |
24 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (1x) | |
6 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/move.h:std::remove_reference<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type&& std::move<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (1x) | |
3 ( 0.00%) std::string outputDirectory; | |
. SignalHandler *signalHandler{SignalHandler::instance()}; | |
. std::atomic<RamDomain> ctr{}; | |
. std::atomic<std::size_t> iter{}; | |
. bool performIO = false; | |
13 ( 0.00%) | |
293 ( 0.00%) => ???:omp_set_num_threads (1x) | |
14 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::getNumThreads() (2x) | |
. void runFunction(std::string inputDirectoryArg = "", | |
. std::string outputDirectoryArg = "", | |
4 ( 0.00%) bool performIOArg = false) { | |
1,279 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SignalHandler.h:souffle::SignalHandler::set() (1x) | |
. this->inputDirectory = std::move(inputDirectoryArg); | |
. this->outputDirectory = std::move(outputDirectoryArg); | |
12 ( 0.00%) this->performIO = performIOArg; | |
244 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<int, std::allocator<int> >::~vector() (2x) | |
122 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_vector.h:std::vector<int, std::allocator<int> >::vector() (2x) | |
6 ( 0.00%) | |
117,269,399,373 (100.0%) => test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&) (1x) | |
. // set default threads (in embedded mode) | |
. // if this is not set, and omp is used, the default omp setting of number of | |
. // cores is used. | |
4 ( 0.00%) #if defined(_OPENMP) | |
379 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SignalHandler.h:souffle::SignalHandler::reset() (1x) | |
7 ( 0.00%) if (0 < getNumThreads()) { | |
. omp_set_num_threads(getNumThreads()); | |
. } | |
. #endif | |
34 ( 0.00%) | |
117,269,401,845 (100.0%) => test.cpp:souffle::Sf_test::runFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool) (1x) | |
70 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (2x) | |
12 ( 0.00%) => ???:0x0000000000409d50 (2x) | |
7 ( 0.00%) signalHandler->set(); | |
. // -- query evaluation -- | |
. { | |
. std::vector<RamDomain> args, ret; | |
. subroutine_0(args, ret); | |
. } | |
. | |
. // -- relation hint statistics -- | |
. signalHandler->reset(); | |
-- line 90 ---------------------------------------- | |
-- line 104 ---------------------------------------- | |
. try { | |
. std::map<std::string, std::string> directiveMap( | |
. {{"IO", "stdoutprintsize"}, | |
. {"attributeNames", "x\ty"}, | |
. {"auxArity", "0"}, | |
. {"name", "e"}, | |
. {"operation", "printsize"}, | |
. {"params", "{\"records\": {}, \"relation\": {\"arity\": 2, " | |
6 ( 0.00%) "\"params\": [\"x\", \"y\"]}}"}, | |
5 ( 0.00%) {"types", | |
10 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::setNumThreads(unsigned long) (1x) | |
8 ( 0.00%) "{\"ADTs\": {}, \"records\": {}, \"relation\": {\"arity\": 2, " | |
2,547 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SymbolTable.h:souffle::SymbolTable::setNumLanes(unsigned long) (1x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::getNumThreads() (1x) | |
8 ( 0.00%) "\"types\": [\"i:number\", \"i:number\"]}}"}}); | |
33,916 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RecordTable.h:souffle::SpecializedRecordTable<0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul, 10ul, 11ul, 12ul>::setNumLanes(unsigned long) (1x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SouffleInterface.h:souffle::SouffleProgram::getNumThreads() (1x) | |
4 ( 0.00%) if (!outputDirectoryArg.empty()) { | |
. directiveMap["output-dir"] = outputDirectoryArg; | |
. } | |
. IOSystem::getInstance() | |
. .getWriter(directiveMap, symTable, recordTable) | |
. ->writeAll(*rel_1_e); | |
. } catch (std::exception &e) { | |
. std::cerr << e.what(); | |
. exit(1); | |
. } | |
12 ( 0.00%) } | |
5 ( 0.00%) | |
68 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SignalHandler.h:souffle::SignalHandler::setMsg(char const*) (1x) | |
. public: | |
7 ( 0.00%) void loadAll(std::string inputDirectoryArg = "") override {} | |
9 ( 0.00%) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
5 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (1x) | |
6 ( 0.00%) public: | |
30 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RamTypes.h:int souffle::ramBitCast<int, int>(int) (2x) | |
9 ( 0.00%) void dumpInputs() override {} | |
271,326 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
6 ( 0.00%) | |
17 ( 0.00%) public: | |
592 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::extend(souffle::t_eqrel const&) (1x) | |
271,520 ( 0.00%) => test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#1}::operator()() const (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (1x) | |
7 ( 0.00%) void dumpOutputs() override { | |
13 ( 0.00%) try { | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
5 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (1x) | |
5 ( 0.00%) std::map<std::string, std::string> rwOperation; | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
5 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (1x) | |
36 ( 0.00%) rwOperation["IO"] = "stdout"; | |
4,728 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::begin() const (1x) | |
317 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator++() (1x) | |
191 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::end() const (1x) | |
91 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator!=(souffle::t_eqrel::iterator_0 const&) const (2x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (1x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator*() const (1x) | |
16 ( 0.00%) rwOperation["name"] = "e"; | |
44 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (2x) | |
30 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RamTypes.h:int souffle::ramBitCast<int, int>(int) (2x) | |
9 ( 0.00%) rwOperation["types"] = "{\"relation\": {\"arity\": 2, \"auxArity\": 0, " | |
266,899 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
. "\"types\": [\"i:number\", \"i:number\"]}}"; | |
6 ( 0.00%) IOSystem::getInstance() | |
10 ( 0.00%) .getWriter(rwOperation, symTable, recordTable) | |
272,653 ( 0.00%) => test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#2}::operator()() const (1x) | |
31 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator=(unsigned long) (1x) | |
. ->writeAll(*rel_1_e); | |
1,505 ( 0.00%) } catch (std::exception &e) { | |
20,468 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/SignalHandler.h:souffle::SignalHandler::setMsg(char const*) (301x) | |
. std::cerr << e.what(); | |
. exit(1); | |
. } | |
2,709 ( 0.00%) } | |
239,043 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::empty() const (301x) | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (301x) | |
2,709 ( 0.00%) | |
95,413 ( 0.00%) public: | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (301x) | |
1,505 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (301x) | |
1,505 ( 0.00%) SymbolTable &getSymbolTable() override { return symTable; } | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (301x) | |
1,505 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (301x) | |
1,505 ( 0.00%) RecordTable &getRecordTable() override { return recordTable; } | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (301x) | |
1,505 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (301x) | |
137,041,086 ( 0.12%) void setNumThreads(std::size_t numThreadsValue) override { | |
2,023,146,517 ( 1.73%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator++() (9,135,651x) | |
401,982,791 ( 0.34%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator!=(souffle::t_eqrel::iterator_0 const&) const (9,135,952x) | |
63,949,557 ( 0.05%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator*() const (9,135,651x) | |
242,907 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::begin() const (301x) | |
57,491 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::end() const (301x) | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (301x) | |
184,804,032 ( 0.16%) SouffleProgram::setNumThreads(numThreadsValue); | |
404,968,366 ( 0.35%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (18,407,653x) | |
305,970,492 ( 0.26%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::contains(std::array<int, 2ul> const&, souffle::t_eqrel::context&) const (45,450x) | |
278,160,060 ( 0.24%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RamTypes.h:int souffle::ramBitCast<int, int>(int) (18,544,004x) | |
2,772,450 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (45,450x) | |
6,600 ( 0.00%) symTable.setNumLanes(getNumThreads()); | |
13,200 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (600x) | |
18,000 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RamTypes.h:int souffle::ramBitCast<int, int>(int) (1,200x) | |
2,700 ( 0.00%) recordTable.setNumLanes(getNumThreads()); | |
80,582,461 ( 0.07%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) (300x) | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (300x) | |
. } | |
. void executeSubroutine(std::string name, const std::vector<RamDomain> &args, | |
2,709 ( 0.00%) std::vector<RamDomain> &ret) override { | |
1,505 ( 0.00%) if (name == "stratum_0") { | |
3,883,918,810 ( 3.31%) => test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#3}::operator()() const (301x) | |
2,409 ( 0.00%) subroutine_0(args, ret); | |
2,194,510 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::empty() const (301x) | |
18,361 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (301x) | |
3,600 ( 0.00%) return; | |
626,712,138 ( 0.53%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::extend(souffle::t_eqrel const&) (300x) | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (300x) | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (300x) | |
2,100 ( 0.00%) } | |
18,274,600 ( 0.02%) fatal("unknown subroutine"); | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (300x) | |
1,500 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (300x) | |
1,500 ( 0.00%) } | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (300x) | |
1,500 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::createContext() (300x) | |
137,041,050 ( 0.12%) #ifdef _MSC_VER | |
2,023,146,200 ( 1.73%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator++() (9,135,650x) | |
401,982,700 ( 0.34%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator!=(souffle::t_eqrel::iterator_0 const&) const (9,135,950x) | |
172,821,250 ( 0.15%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::begin() const (300x) | |
63,949,550 ( 0.05%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::iterator_0::operator*() const (9,135,650x) | |
57,300 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::end() const (300x) | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (300x) | |
146,170,400 ( 0.12%) #pragma warning(disable : 4100) | |
401,968,600 ( 0.34%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/array:std::array<int, 2ul>::operator[](unsigned long) const (18,271,300x) | |
274,069,500 ( 0.23%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/RamTypes.h:int souffle::ramBitCast<int, int>(int) (18,271,300x) | |
82,220,850 ( 0.07%) #endif // _MSC_VER | |
108,471,202,001 (92.49%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::insert(std::array<int, 2ul> const&, souffle::t_eqrel::context&) (9,135,650x) | |
557,274,650 ( 0.48%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (9,135,650x) | |
. void subroutine_0(const std::vector<RamDomain> &args, | |
1,800 ( 0.00%) std::vector<RamDomain> &ret) { | |
3,600 ( 0.00%) signalHandler->setMsg(R"_(e(0,0). | |
112,750,241,951 (96.14%) => test.cpp:souffle::Sf_test::subroutine_0(std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> >&)::{lambda()#4}::operator()() const (300x) | |
94,200 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::enable_if<std::__is_swappable<std::default_delete<souffle::t_eqrel> >::value, void>::type std::swap<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >(std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >&, std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >&) (300x) | |
1,800 ( 0.00%) in file /home/siddharthist/code/mate/test.dl [3:1-3:9])_"); | |
3,981,202 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::purge() (300x) | |
18,300 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (300x) | |
1,500 ( 0.00%) [&]() { | |
4,500 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator++(int) (300x) | |
300 ( 0.00%) CREATE_OP_CONTEXT(rel_1_e_op_ctxt, rel_1_e->createContext()); | |
5 ( 0.00%) Tuple<RamDomain, 2> tuple{ | |
31 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/atomic_base.h:std::__atomic_base<unsigned long>::operator=(unsigned long) (1x) | |
6 ( 0.00%) {ramBitCast(RamSigned(0)), ramBitCast(RamSigned(0))}}; | |
16,095 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::purge() (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
6 ( 0.00%) rel_1_e->insert(tuple, READ_OP_CONTEXT(rel_1_e_op_ctxt)); | |
9,278 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledSouffle.h:souffle::t_eqrel::purge() (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator->() const (1x) | |
4 ( 0.00%) }(); | |
119 ( 0.00%) rel_1_e->extend(*rel_2_delta_e); | |
8,130 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_map.h:std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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> > > > >::map(std::initializer_list<std::pair<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> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&, std::allocator<std::pair<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&) (1x) | |
2,496 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_map.h:std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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> > > > >::~map() (1x) | |
632 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [6], char const (&) [89], true>(char const (&) [6], char const (&) [89]) (1x) | |
614 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [7], char const (&) [64], true>(char const (&) [7], char const (&) [64]) (1x) | |
518 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [10], char const (&) [10], true>(char const (&) [10], char const (&) [10]) (1x) | |
518 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [15], char const (&) [4], true>(char const (&) [15], char const (&) [4]) (1x) | |
510 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [3], char const (&) [16], true>(char const (&) [3], char const (&) [16]) (1x) | |
503 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [5], char const (&) [2], true>(char const (&) [5], char const (&) [2]) (1x) | |
501 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::pair<char const (&) [9], char const (&) [2], true>(char const (&) [9], char const (&) [2]) (1x) | |
362 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/stl_pair.h:std::pair<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> > >::~pair() (7x) | |
16 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/allocator.h:std::allocator<std::pair<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> > > >::~allocator() (1x) | |
16 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/allocator.h:std::allocator<std::pair<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> > > >::allocator() (1x) | |
8 ( 0.00%) [&]() { | |
3 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::empty() const (1x) | |
25 ( 0.00%) CREATE_OP_CONTEXT(rel_1_e_op_ctxt, rel_1_e->createContext()); | |
1,191,989 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/io/WriteStream.h:void souffle::WriteStream::writeAll<souffle::t_eqrel>(souffle::t_eqrel const&) (1x) | |
54,999 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/io/IOSystem.h:souffle::IOSystem::getWriter(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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&, souffle::SymbolTable const&, souffle::SpecializedRecordTable<0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul, 10ul, 11ul, 12ul> const&) const (1x) | |
41,959 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/io/IOSystem.h:souffle::IOSystem::getInstance() (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::t_eqrel, std::default_delete<souffle::t_eqrel> >::operator*() const (1x) | |
7,373 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::WriteStream, std::default_delete<souffle::WriteStream> >::~unique_ptr() (1x) | |
61 ( 0.00%) => /nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/bits/unique_ptr.h:std::unique_ptr<souffle::WriteStream, std::default_delete<souffle::WriteStream> >::operator->() const (1x) | |
. CREATE_OP_CONTEXT(rel_2_delta_e_op_ctxt, rel_2_delta_e->createContext()); | |
. for (const auto &env0 : *rel_1_e) { | |
11 ( 0.00%) Tuple<RamDomain, 2> tuple{{ramBitCast(env0[0]), ramBitCast(env0[1])}}; | |
. rel_2_delta_e->insert(tuple, READ_OP_CONTEXT(rel_2_delta_e_op_ctxt)); | |
. } | |
. }(); | |
. iter = 0; | |
. for (;;) { | |
. signalHandler->setMsg(R"_(e(x,(x+1)) :- | |
. x < 300, | |
. e(x,x). | |
-- line 193 ---------------------------------------- | |
-- line 200 ---------------------------------------- | |
. rel_2_delta_e->createContext()); | |
. for (const auto &env0 : *rel_2_delta_e) { | |
. if ((ramBitCast<RamDomain>(env0[0]) == | |
. ramBitCast<RamDomain>(env0[1])) && | |
. (ramBitCast<RamSigned>(env0[0]) < | |
. ramBitCast<RamSigned>(RamSigned(300))) && | |
. !(rel_1_e->contains( | |
. Tuple<RamDomain, 2>{ | |
14 ( 0.00%) {ramBitCast(env0[0]), | |
. ramBitCast((ramBitCast<RamSigned>(env0[0]) + | |
. ramBitCast<RamSigned>(RamSigned(1))))}}, | |
. READ_OP_CONTEXT(rel_1_e_op_ctxt)))) { | |
. Tuple<RamDomain, 2> tuple{ | |
. {ramBitCast(env0[0]), | |
. ramBitCast((ramBitCast<RamSigned>(env0[0]) + | |
14 ( 0.00%) ramBitCast<RamSigned>(RamSigned(1))))}}; | |
941 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::CmdOptions(char const*, char const*, char const*, bool, char const*, unsigned long) (1x) | |
46 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::~CmdOptions() (1x) | |
9 ( 0.00%) rel_3_new_e->insert(tuple, READ_OP_CONTEXT(rel_3_new_e_op_ctxt)); | |
1,594 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::parse(int, char**) (1x) | |
6 ( 0.00%) } | |
100,761 ( 0.00%) => test.cpp:souffle::Sf_test::Sf_test() (1x) | |
77,467 ( 0.00%) => test.cpp:souffle::Sf_test::~Sf_test() (1x) | |
. } | |
8 ( 0.00%) }(); | |
36,518 ( 0.00%) => test.cpp:souffle::Sf_test::setNumThreads(unsigned long) (1x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::getNumJobs() const (1x) | |
. } | |
. if (rel_3_new_e->empty()) | |
30 ( 0.00%) break; | |
117,269,401,968 (100.0%) => test.cpp:souffle::Sf_test::runAll(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (1x) | |
70 ( 0.00%) => ???:std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (2x) | |
12 ( 0.00%) => ???:0x0000000000409d50 (2x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::getOutputFileDir[abi:cxx11]() const (1x) | |
7 ( 0.00%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/CompiledOptions.h:souffle::CmdOptions::getInputFileDir[abi:cxx11]() const (1x) | |
1 ( 0.00%) rel_3_new_e->extend(*rel_1_e); | |
. [&]() { | |
44 ( 0.00%) CREATE_OP_CONTEXT(rel_3_new_e_op_ctxt, rel_3_new_e->createContext()); | |
97,863 ( 0.00%) => test.cpp:__static_initialization_and_destruction_0(int, int) (1x) | |
. CREATE_OP_CONTEXT(rel_1_e_op_ctxt, rel_1_e->createContext()); | |
. for (const auto &env0 : *rel_3_new_e) { | |
. Tuple<RamDomain, 2> tuple{{ramBitCast(env0[0]), ramBitCast(env0[1])}}; | |
. rel_1_e->insert(tuple, READ_OP_CONTEXT(rel_1_e_op_ctxt)); | |
. } | |
. }(); | |
. std::swap(rel_2_delta_e, rel_3_new_e); | |
. rel_3_new_e->purge(); | |
-- line 233 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
-- Auto-annotated source: ../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h | |
-------------------------------------------------------------------------------- | |
Ir | |
-- line 149 ---------------------------------------- | |
. // a specialization for a single-entry cache | |
. template <typename T> | |
. class LRUCache<T, 1> { | |
. // the single entry in this cache | |
. T entry; | |
. | |
. public: | |
. // creates a new, empty cache | |
1,771,565,024 ( 1.51%) LRUCache() : entry() {} | |
. | |
. // creates a new, empty cache storing the given value | |
. LRUCache(const T& val) : entry(val) {} | |
. | |
. // clears the content of this cache | |
. void clear(const T& val = T()) { | |
. entry = val; | |
. } | |
. | |
. // registers an access to the given element | |
73,819,608 ( 0.06%) void access(const T& val) { | |
73,819,608 ( 0.06%) entry = val; | |
55,364,706 ( 0.05%) } | |
. | |
. /** | |
. * See description in most general case. | |
. */ | |
. template <typename Op> | |
276,814,040 ( 0.24%) bool forEachInOrder(const Op& op) const { | |
332,176,848 ( 0.28%) return op(entry); | |
626,687,320 ( 0.53%) => /home/siddharthist/code/mate/../nixpkgs/result/bin/../include/souffle/datastructure/LambdaBTree.h:souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}::operator()(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*) const (36,863,960x) | |
110,725,616 ( 0.09%) } | |
. | |
. // equivalent to forEachInOrder | |
. template <typename Op> | |
276,814,040 ( 0.24%) bool any(const Op& op) const { | |
276,814,040 ( 0.24%) return forEachInOrder(op); | |
1,105,918,800 ( 0.94%) => ../nixpkgs/result/bin/../include/souffle/utility/CacheUtil.h:bool souffle::LRUCache<souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*, 1u>::forEachInOrder<souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1}>(souffle::detail::LambdaBTree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, std::function<unsigned long (std::pair<int, unsigned long>&)>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::insert(std::pair<int, unsigned long>&, souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::btree_operation_hints<1u>&, std::function<unsigned long (std::pair<int, unsigned long>&)> const&)::{lambda(souffle::detail::btree<std::pair<int, unsigned long>, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, std::allocator<std::pair<int, unsigned long> >, 256u, souffle::detail::binary_search, true, souffle::EqrelMapComparator<std::pair<int, unsigned long> >, souffle::detail::updater<std::pair<int, unsigned long> > >::node*)#1} const&) const (36,863,960x) | |
110,725,616 ( 0.09%) } | |
. | |
. // --- print support --- | |
. | |
. friend std::ostream& operator<<(std::ostream& out, const LRUCache& cache) { | |
. return out << cache.entry; | |
. } | |
. }; | |
. | |
-- line 192 ---------------------------------------- | |
-- line 269 ---------------------------------------- | |
. | |
. #else | |
. | |
. class CacheAccessCounter { | |
. public: | |
. CacheAccessCounter() = default; | |
. CacheAccessCounter(const CacheAccessCounter& /* other */) = default; | |
. inline void addHit() {} | |
332,176,848 ( 0.28%) inline void addMiss() {} | |
. inline std::size_t getHits() { | |
. return 0; | |
. } | |
. inline std::size_t getMisses() { | |
. return 0; | |
. } | |
. inline std::size_t getAccesses() { | |
. return 0; | |
-- line 285 ---------------------------------------- | |
-------------------------------------------------------------------------------- | |
The following files chosen for auto-annotation could not be found: | |
-------------------------------------------------------------------------------- | |
/build/glibc-2.33/csu/../sysdeps/x86_64/start.S | |
-------------------------------------------------------------------------------- | |
Ir | |
-------------------------------------------------------------------------------- | |
113,656,873,267 (96.91%) events annotated |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment