react-native-windows 0.81.34 → 0.81.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Directory.Build.props +1 -16
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +48 -2
- package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +40 -13
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/React.Cpp.props +3 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -10
- package/ReactCommon/packages.lock.win32.json +0 -10
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/creaternwlib.cmd +2 -2
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/{fmt → external/fmt}/cgmanifest.json +1 -1
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/package.json +3 -3
- package/template/cpp-app/proj/MyApp.sln +0 -33
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-app/proj/MyApp.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +31 -6
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -383
- package/Folly/Folly.vcxproj.filters +0 -558
- package/Folly/Folly.win32.vcxproj +0 -11
- package/Folly/packages.lock.win32.json +0 -20
- package/Scripts/Warm-RnwFeedCache.ps1 +0 -413
- package/fmt/fmt.vcxproj +0 -163
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/fmt.win32.vcxproj +0 -10
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp
ADDED
|
@@ -0,0 +1,1570 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include <iomanip>
|
|
18
|
+
#include <thread>
|
|
19
|
+
|
|
20
|
+
#include <boost/thread.hpp>
|
|
21
|
+
|
|
22
|
+
#include <folly/Random.h>
|
|
23
|
+
#include <folly/SpinLock.h>
|
|
24
|
+
#include <folly/concurrency/container/FlatCombiningPriorityQueue.h>
|
|
25
|
+
#include <folly/concurrency/container/RelaxedConcurrentPriorityQueue.h>
|
|
26
|
+
#include <folly/portability/GFlags.h>
|
|
27
|
+
#include <folly/portability/GTest.h>
|
|
28
|
+
#include <folly/test/DeterministicSchedule.h>
|
|
29
|
+
|
|
30
|
+
#include <glog/logging.h>
|
|
31
|
+
|
|
32
|
+
using namespace folly;
|
|
33
|
+
|
|
34
|
+
DEFINE_bool(bench, false, "run benchmark");
|
|
35
|
+
DEFINE_int32(reps, 1, "number of reps");
|
|
36
|
+
DEFINE_int64(ops, 32, "number of operations per rep");
|
|
37
|
+
DEFINE_int64(elems, 64, "number of elements");
|
|
38
|
+
|
|
39
|
+
static std::vector<int> nthr = {1, 2, 4, 8};
|
|
40
|
+
// threads number
|
|
41
|
+
static uint32_t nthreads;
|
|
42
|
+
|
|
43
|
+
template <class PriorityQueue>
|
|
44
|
+
void basicOpsTest() {
|
|
45
|
+
int res;
|
|
46
|
+
PriorityQueue pq;
|
|
47
|
+
|
|
48
|
+
EXPECT_TRUE(pq.empty());
|
|
49
|
+
EXPECT_EQ(pq.size(), 0);
|
|
50
|
+
pq.push(1);
|
|
51
|
+
pq.push(2);
|
|
52
|
+
pq.push(3);
|
|
53
|
+
|
|
54
|
+
EXPECT_FALSE(pq.empty());
|
|
55
|
+
EXPECT_EQ(pq.size(), 3);
|
|
56
|
+
pq.pop(res);
|
|
57
|
+
EXPECT_EQ(res, 3);
|
|
58
|
+
pq.pop(res);
|
|
59
|
+
EXPECT_EQ(res, 2);
|
|
60
|
+
pq.pop(res);
|
|
61
|
+
EXPECT_EQ(res, 1);
|
|
62
|
+
EXPECT_TRUE(pq.empty());
|
|
63
|
+
EXPECT_EQ(pq.size(), 0);
|
|
64
|
+
|
|
65
|
+
pq.push(3);
|
|
66
|
+
pq.push(2);
|
|
67
|
+
pq.push(1);
|
|
68
|
+
|
|
69
|
+
pq.pop(res);
|
|
70
|
+
EXPECT_EQ(res, 3);
|
|
71
|
+
pq.pop(res);
|
|
72
|
+
EXPECT_EQ(res, 2);
|
|
73
|
+
pq.pop(res);
|
|
74
|
+
EXPECT_EQ(res, 1);
|
|
75
|
+
EXPECT_TRUE(pq.empty());
|
|
76
|
+
EXPECT_EQ(pq.size(), 0);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
TEST(CPQ, BasicOpsTest) {
|
|
80
|
+
// Spinning
|
|
81
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true>>();
|
|
82
|
+
// Strict
|
|
83
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0>>();
|
|
84
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0, 1>>();
|
|
85
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0, 3>>();
|
|
86
|
+
// Relaxed
|
|
87
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 1, 1>>();
|
|
88
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 2, 1>>();
|
|
89
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 3, 3>>();
|
|
90
|
+
// Blocking
|
|
91
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true>>();
|
|
92
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true, 0>>();
|
|
93
|
+
basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true, 2>>();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// execute the function for nthreads
|
|
97
|
+
template <typename Func>
|
|
98
|
+
static uint64_t run_once(const Func& fn) {
|
|
99
|
+
boost::barrier barrier_start{nthreads + 1};
|
|
100
|
+
std::vector<std::thread> threads(nthreads);
|
|
101
|
+
for (uint32_t tid = 0; tid < nthreads; ++tid) {
|
|
102
|
+
threads[tid] = std::thread([&, tid] {
|
|
103
|
+
barrier_start.wait();
|
|
104
|
+
fn(tid);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
barrier_start.wait(); // start the execution
|
|
109
|
+
auto tbegin = std::chrono::steady_clock::now();
|
|
110
|
+
for (auto& t : threads) {
|
|
111
|
+
t.join();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// end time measurement
|
|
115
|
+
uint64_t duration = 0;
|
|
116
|
+
auto tend = std::chrono::steady_clock::now();
|
|
117
|
+
duration = std::chrono::duration_cast<std::chrono::nanoseconds>(tend - tbegin)
|
|
118
|
+
.count();
|
|
119
|
+
return duration;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
template <class PriorityQueue>
|
|
123
|
+
void singleThreadTest() {
|
|
124
|
+
PriorityQueue pq;
|
|
125
|
+
|
|
126
|
+
folly::Random::DefaultGenerator rng;
|
|
127
|
+
rng.seed(FLAGS_elems);
|
|
128
|
+
uint64_t expect_sum = 0;
|
|
129
|
+
// random push
|
|
130
|
+
for (int i = 0; i < FLAGS_elems; i++) {
|
|
131
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
132
|
+
expect_sum += val;
|
|
133
|
+
pq.push(val);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
int val = 0;
|
|
137
|
+
int counter = 0;
|
|
138
|
+
uint64_t sum = 0;
|
|
139
|
+
while (counter < FLAGS_elems) {
|
|
140
|
+
pq.pop(val);
|
|
141
|
+
sum += val;
|
|
142
|
+
counter++;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
EXPECT_EQ(sum, expect_sum);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
TEST(CPQ, SingleThrStrictImplTest) {
|
|
149
|
+
// spinning
|
|
150
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
|
|
151
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>();
|
|
152
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0, 8>>();
|
|
153
|
+
// blocking
|
|
154
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0>>();
|
|
155
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
|
|
156
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0, 8>>();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
TEST(CPQ, SingleThrRelaxedImplTest) {
|
|
160
|
+
// spinning
|
|
161
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 1>>();
|
|
162
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8>>();
|
|
163
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8, 2>>();
|
|
164
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
|
|
165
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 2, 128>>();
|
|
166
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 100, 8>>();
|
|
167
|
+
// blocking
|
|
168
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 1>>();
|
|
169
|
+
singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 8>>();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// concurrent pop should made the queue empty
|
|
173
|
+
/// with executing the eaqual elements pop function
|
|
174
|
+
template <class PriorityQueue>
|
|
175
|
+
void concurrentPopforSharedBuffer() {
|
|
176
|
+
for (int t : nthr) {
|
|
177
|
+
PriorityQueue pq;
|
|
178
|
+
|
|
179
|
+
folly::Random::DefaultGenerator rng;
|
|
180
|
+
rng.seed(FLAGS_elems);
|
|
181
|
+
uint64_t check_sum = 0;
|
|
182
|
+
// random push
|
|
183
|
+
for (int i = 0; i < FLAGS_elems; i++) {
|
|
184
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
185
|
+
pq.push(val);
|
|
186
|
+
check_sum += val;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
std::atomic<uint64_t> pop_sum(0);
|
|
190
|
+
std::atomic<int> to_end(0);
|
|
191
|
+
|
|
192
|
+
nthreads = t;
|
|
193
|
+
auto fn = [&](uint32_t tid) {
|
|
194
|
+
int val = tid;
|
|
195
|
+
while (true) {
|
|
196
|
+
int index = to_end.fetch_add(1, std::memory_order_acq_rel);
|
|
197
|
+
if (index < FLAGS_elems) {
|
|
198
|
+
pq.pop(val);
|
|
199
|
+
} else {
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
pop_sum.fetch_add(val, std::memory_order_acq_rel);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
run_once(fn);
|
|
206
|
+
// check the sum of returned values of successful pop
|
|
207
|
+
EXPECT_EQ(pop_sum, check_sum);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
TEST(CPQ, ConcurrentPopStrictImplTest) {
|
|
212
|
+
// spinning
|
|
213
|
+
concurrentPopforSharedBuffer<
|
|
214
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
|
|
215
|
+
concurrentPopforSharedBuffer<
|
|
216
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>();
|
|
217
|
+
concurrentPopforSharedBuffer<
|
|
218
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 0, 128>>();
|
|
219
|
+
// blocking
|
|
220
|
+
concurrentPopforSharedBuffer<
|
|
221
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 0>>();
|
|
222
|
+
concurrentPopforSharedBuffer<
|
|
223
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
|
|
224
|
+
concurrentPopforSharedBuffer<
|
|
225
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 0, 128>>();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
TEST(CPQ, ConcurrentPopRelaxedImplTest) {
|
|
229
|
+
// spinning
|
|
230
|
+
concurrentPopforSharedBuffer<
|
|
231
|
+
RelaxedConcurrentPriorityQueue<int, false, false>>();
|
|
232
|
+
concurrentPopforSharedBuffer<
|
|
233
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>();
|
|
234
|
+
concurrentPopforSharedBuffer<
|
|
235
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 8, 2>>();
|
|
236
|
+
concurrentPopforSharedBuffer<
|
|
237
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 128, 2>>();
|
|
238
|
+
// blocking
|
|
239
|
+
concurrentPopforSharedBuffer<
|
|
240
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 1>>();
|
|
241
|
+
concurrentPopforSharedBuffer<
|
|
242
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 128>>();
|
|
243
|
+
concurrentPopforSharedBuffer<
|
|
244
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 8, 128>>();
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// executing fixed number of push, counting the
|
|
248
|
+
/// element number & total value.
|
|
249
|
+
template <class PriorityQueue>
|
|
250
|
+
void concurrentPush() {
|
|
251
|
+
for (int t : nthr) {
|
|
252
|
+
PriorityQueue pq;
|
|
253
|
+
std::atomic<uint64_t> counter_sum(0);
|
|
254
|
+
nthreads = t;
|
|
255
|
+
|
|
256
|
+
auto fn = [&](uint32_t tid) {
|
|
257
|
+
folly::Random::DefaultGenerator rng;
|
|
258
|
+
rng.seed(tid);
|
|
259
|
+
uint64_t local_sum = 0;
|
|
260
|
+
for (int i = tid; i < FLAGS_elems; i += nthreads) {
|
|
261
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
262
|
+
local_sum += val;
|
|
263
|
+
pq.push(val);
|
|
264
|
+
}
|
|
265
|
+
counter_sum.fetch_add(local_sum, std::memory_order_acq_rel);
|
|
266
|
+
};
|
|
267
|
+
run_once(fn);
|
|
268
|
+
|
|
269
|
+
// check the total number of elements
|
|
270
|
+
uint64_t actual_sum = 0;
|
|
271
|
+
for (int i = 0; i < FLAGS_elems; i++) {
|
|
272
|
+
int res = 0;
|
|
273
|
+
pq.pop(res);
|
|
274
|
+
actual_sum += res;
|
|
275
|
+
}
|
|
276
|
+
EXPECT_EQ(actual_sum, counter_sum);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
TEST(CPQ, ConcurrentPushStrictImplTest) {
|
|
281
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
|
|
282
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0, 8>>();
|
|
283
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0, 128>>();
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
TEST(CPQ, ConcurrentPushRelaxedImplTest) {
|
|
287
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false>>();
|
|
288
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>();
|
|
289
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 2, 128>>();
|
|
290
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 128, 8>>();
|
|
291
|
+
concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
template <class PriorityQueue>
|
|
295
|
+
void concurrentOps(int ops) {
|
|
296
|
+
for (int t : nthr) {
|
|
297
|
+
PriorityQueue pq;
|
|
298
|
+
std::atomic<uint64_t> counter_push(0);
|
|
299
|
+
std::atomic<uint64_t> counter_pop(0);
|
|
300
|
+
nthreads = t;
|
|
301
|
+
|
|
302
|
+
boost::barrier rb0{nthreads};
|
|
303
|
+
boost::barrier rb1{nthreads};
|
|
304
|
+
boost::barrier rb2{nthreads};
|
|
305
|
+
std::atomic<int> to_end(0);
|
|
306
|
+
|
|
307
|
+
auto fn = [&](uint32_t tid) {
|
|
308
|
+
folly::Random::DefaultGenerator rng;
|
|
309
|
+
rng.seed(tid);
|
|
310
|
+
uint64_t local_push = 0;
|
|
311
|
+
uint64_t local_pop = 0;
|
|
312
|
+
int res;
|
|
313
|
+
|
|
314
|
+
/// initialize the queue
|
|
315
|
+
for (int i = tid; i < FLAGS_elems; i += nthreads) {
|
|
316
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
317
|
+
local_push++;
|
|
318
|
+
pq.push(val);
|
|
319
|
+
}
|
|
320
|
+
rb0.wait();
|
|
321
|
+
|
|
322
|
+
/// operations
|
|
323
|
+
for (int i = 0; i < ops; i++) {
|
|
324
|
+
if (ops % 2 == 0) {
|
|
325
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
326
|
+
local_push++;
|
|
327
|
+
pq.push(val);
|
|
328
|
+
} else {
|
|
329
|
+
pq.pop(res);
|
|
330
|
+
local_pop++;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
rb1.wait();
|
|
334
|
+
// collecting the ops info for checking purpose
|
|
335
|
+
counter_push.fetch_add(local_push, std::memory_order_seq_cst);
|
|
336
|
+
counter_pop.fetch_add(local_pop, std::memory_order_seq_cst);
|
|
337
|
+
rb2.wait();
|
|
338
|
+
/// clean up work
|
|
339
|
+
uint64_t r = counter_push.load(std::memory_order_seq_cst) -
|
|
340
|
+
counter_pop.load(std::memory_order_seq_cst);
|
|
341
|
+
while (true) {
|
|
342
|
+
uint64_t index = to_end.fetch_add(1, std::memory_order_acq_rel);
|
|
343
|
+
if (index < r) {
|
|
344
|
+
pq.pop(res);
|
|
345
|
+
} else {
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
run_once(fn);
|
|
351
|
+
// the total push and pop ops should be the same
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
template <class PriorityQueue>
|
|
356
|
+
void concurrentSizeTest(int ops) {
|
|
357
|
+
for (int t : nthr) {
|
|
358
|
+
PriorityQueue pq;
|
|
359
|
+
nthreads = t;
|
|
360
|
+
EXPECT_TRUE(pq.empty());
|
|
361
|
+
auto fn = [&](uint32_t tid) {
|
|
362
|
+
folly::Random::DefaultGenerator rng;
|
|
363
|
+
rng.seed(tid);
|
|
364
|
+
int res;
|
|
365
|
+
|
|
366
|
+
/// initialize the queue
|
|
367
|
+
for (int i = tid; i < FLAGS_elems; i += nthreads) {
|
|
368
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
369
|
+
pq.push(val);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/// operations
|
|
373
|
+
for (int i = 0; i < ops; i++) {
|
|
374
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
375
|
+
pq.push(val);
|
|
376
|
+
pq.pop(res);
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
run_once(fn);
|
|
380
|
+
// the total push and pop ops should be the same
|
|
381
|
+
EXPECT_EQ(pq.size(), FLAGS_elems);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
static std::vector<int> sizes = {0, 1024};
|
|
386
|
+
|
|
387
|
+
TEST(CPQ, ConcurrentMixedStrictImplTest) {
|
|
388
|
+
for (auto size : sizes) {
|
|
389
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0>>(size);
|
|
390
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>(
|
|
391
|
+
size);
|
|
392
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0, 32>>(
|
|
393
|
+
size);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
TEST(CPQ, ConcurrentMixedRelaxedImplTest) {
|
|
398
|
+
for (auto size : sizes) {
|
|
399
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false>>(size);
|
|
400
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 1, 32>>(
|
|
401
|
+
size);
|
|
402
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 32, 1>>(
|
|
403
|
+
size);
|
|
404
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>(
|
|
405
|
+
size);
|
|
406
|
+
concurrentOps<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>(size);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
TEST(CPQ, StrictImplSizeTest) {
|
|
411
|
+
for (auto size : sizes) {
|
|
412
|
+
concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true, 0>>(
|
|
413
|
+
size);
|
|
414
|
+
concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, true, true, 0>>(
|
|
415
|
+
size);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
TEST(CPQ, RelaxedImplSizeTest) {
|
|
420
|
+
for (auto size : sizes) {
|
|
421
|
+
concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true>>(size);
|
|
422
|
+
concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, true, true, 2, 8>>(
|
|
423
|
+
size);
|
|
424
|
+
concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true, 8, 2>>(
|
|
425
|
+
size);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
template <class PriorityQueue>
|
|
430
|
+
void multiPusherPopper(int PushThr, int PopThr) {
|
|
431
|
+
int ops = FLAGS_ops;
|
|
432
|
+
uint32_t total_threads = PushThr + PopThr;
|
|
433
|
+
|
|
434
|
+
PriorityQueue pq;
|
|
435
|
+
std::atomic<uint64_t> sum_push(0);
|
|
436
|
+
std::atomic<uint64_t> sum_pop(0);
|
|
437
|
+
|
|
438
|
+
auto fn_popthr = [&](uint32_t tid) {
|
|
439
|
+
for (int i = tid; i < ops; i += PopThr) {
|
|
440
|
+
int val;
|
|
441
|
+
pq.pop(val);
|
|
442
|
+
sum_pop.fetch_add(val, std::memory_order_acq_rel);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
auto fn_pushthr = [&](uint32_t tid) {
|
|
447
|
+
folly::Random::DefaultGenerator rng_t;
|
|
448
|
+
rng_t.seed(tid);
|
|
449
|
+
for (int i = tid; i < ops; i += PushThr) {
|
|
450
|
+
int val = folly::Random::rand32(rng_t);
|
|
451
|
+
pq.push(val);
|
|
452
|
+
sum_push.fetch_add(val, std::memory_order_acq_rel);
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
boost::barrier barrier_start{total_threads + 1};
|
|
456
|
+
|
|
457
|
+
std::vector<std::thread> threads_push(PushThr);
|
|
458
|
+
for (int tid = 0; tid < PushThr; ++tid) {
|
|
459
|
+
threads_push[tid] = std::thread([&, tid] {
|
|
460
|
+
barrier_start.wait();
|
|
461
|
+
fn_pushthr(tid);
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
std::vector<std::thread> threads_pop(PopThr);
|
|
465
|
+
for (int tid = 0; tid < PopThr; ++tid) {
|
|
466
|
+
threads_pop[tid] = std::thread([&, tid] {
|
|
467
|
+
barrier_start.wait();
|
|
468
|
+
fn_popthr(tid);
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
barrier_start.wait(); // start the execution
|
|
473
|
+
// begin time measurement
|
|
474
|
+
for (auto& t : threads_push) {
|
|
475
|
+
t.join();
|
|
476
|
+
}
|
|
477
|
+
for (auto& t : threads_pop) {
|
|
478
|
+
t.join();
|
|
479
|
+
}
|
|
480
|
+
EXPECT_EQ(sum_pop, sum_push);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
TEST(CPQ, PusherPopperBlockingTest) {
|
|
484
|
+
for (auto i : nthr) {
|
|
485
|
+
for (auto j : nthr) {
|
|
486
|
+
// Original
|
|
487
|
+
multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>(
|
|
488
|
+
i, j);
|
|
489
|
+
// Relaxed
|
|
490
|
+
multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false, 1, 8>>(
|
|
491
|
+
i, j);
|
|
492
|
+
multiPusherPopper<
|
|
493
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 8, 128>>(i, j);
|
|
494
|
+
multiPusherPopper<
|
|
495
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 128, 8>>(i, j);
|
|
496
|
+
multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false>>(i, j);
|
|
497
|
+
multiPusherPopper<
|
|
498
|
+
RelaxedConcurrentPriorityQueue<int, true, false, 16, 16>>(i, j);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
TEST(CPQ, PusherPopperSpinningTest) {
|
|
504
|
+
for (auto i : nthr) {
|
|
505
|
+
for (auto j : nthr) {
|
|
506
|
+
// Original
|
|
507
|
+
multiPusherPopper<
|
|
508
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>(i, j);
|
|
509
|
+
// Relaxed
|
|
510
|
+
multiPusherPopper<
|
|
511
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>(i, j);
|
|
512
|
+
multiPusherPopper<
|
|
513
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 8, 128>>(i, j);
|
|
514
|
+
multiPusherPopper<
|
|
515
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 128, 8>>(i, j);
|
|
516
|
+
multiPusherPopper<RelaxedConcurrentPriorityQueue<int, false, false>>(
|
|
517
|
+
i, j);
|
|
518
|
+
multiPusherPopper<
|
|
519
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 16, 16>>(i, j);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
template <class PriorityQueue>
|
|
525
|
+
void blockingFirst() {
|
|
526
|
+
PriorityQueue pq;
|
|
527
|
+
int nPop = 16;
|
|
528
|
+
|
|
529
|
+
boost::barrier b{static_cast<unsigned int>(nPop + 1)};
|
|
530
|
+
std::atomic<int> finished{0};
|
|
531
|
+
|
|
532
|
+
std::vector<std::thread> threads_pop(nPop);
|
|
533
|
+
for (int tid = 0; tid < nPop; ++tid) {
|
|
534
|
+
threads_pop[tid] = std::thread([&] {
|
|
535
|
+
int val;
|
|
536
|
+
b.wait();
|
|
537
|
+
pq.pop(val);
|
|
538
|
+
finished.fetch_add(1, std::memory_order_acq_rel);
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
b.wait();
|
|
543
|
+
int c = 0;
|
|
544
|
+
// push to Mound one by one
|
|
545
|
+
// the popping threads should wake up one by one
|
|
546
|
+
do {
|
|
547
|
+
pq.push(1);
|
|
548
|
+
c++;
|
|
549
|
+
while (finished.load(std::memory_order_acquire) != c)
|
|
550
|
+
;
|
|
551
|
+
EXPECT_EQ(finished.load(std::memory_order_acquire), c);
|
|
552
|
+
} while (c < nPop);
|
|
553
|
+
|
|
554
|
+
for (auto& t : threads_pop) {
|
|
555
|
+
t.join();
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
template <class PriorityQueue>
|
|
560
|
+
void concurrentBlocking() {
|
|
561
|
+
uint32_t nThrs = 16;
|
|
562
|
+
|
|
563
|
+
for (int iter = 0; iter < FLAGS_reps * 10; iter++) {
|
|
564
|
+
PriorityQueue pq;
|
|
565
|
+
boost::barrier b{static_cast<unsigned int>(nThrs + nThrs + 1)};
|
|
566
|
+
std::atomic<uint32_t> finished{0};
|
|
567
|
+
std::vector<std::thread> threads_pop(nThrs);
|
|
568
|
+
for (uint32_t tid = 0; tid < nThrs; ++tid) {
|
|
569
|
+
threads_pop[tid] = std::thread([&] {
|
|
570
|
+
b.wait();
|
|
571
|
+
int val;
|
|
572
|
+
pq.pop(val);
|
|
573
|
+
finished.fetch_add(1, std::memory_order_acq_rel);
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
std::vector<std::thread> threads_push(nThrs);
|
|
578
|
+
for (uint32_t tid = 0; tid < nThrs; ++tid) {
|
|
579
|
+
threads_push[tid] = std::thread([&, tid] {
|
|
580
|
+
b.wait();
|
|
581
|
+
pq.push(tid);
|
|
582
|
+
while (finished.load(std::memory_order_acquire) != nThrs)
|
|
583
|
+
;
|
|
584
|
+
EXPECT_EQ(finished.load(std::memory_order_acquire), nThrs);
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
b.wait();
|
|
589
|
+
for (auto& t : threads_pop) {
|
|
590
|
+
t.join();
|
|
591
|
+
}
|
|
592
|
+
for (auto& t : threads_push) {
|
|
593
|
+
t.join();
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
TEST(CPQ, PopBlockingTest) {
|
|
599
|
+
// strict
|
|
600
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
|
|
601
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 0, 16>>();
|
|
602
|
+
// relaxed
|
|
603
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false>>();
|
|
604
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>();
|
|
605
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 16, 1>>();
|
|
606
|
+
// Spinning
|
|
607
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false>>();
|
|
608
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
|
|
609
|
+
blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false, 16, 1>>();
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
TEST(CPQ, MixedBlockingTest) {
|
|
613
|
+
// strict
|
|
614
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
|
|
615
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 0, 16>>();
|
|
616
|
+
// relaxed
|
|
617
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false>>();
|
|
618
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>();
|
|
619
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 16, 1>>();
|
|
620
|
+
// Spinning
|
|
621
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, false, false>>();
|
|
622
|
+
concurrentBlocking<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
|
|
623
|
+
concurrentBlocking<
|
|
624
|
+
RelaxedConcurrentPriorityQueue<int, false, false, 16, 1>>();
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
using DSched = folly::test::DeterministicSchedule;
|
|
628
|
+
using folly::test::DeterministicAtomic;
|
|
629
|
+
using folly::test::DeterministicMutex;
|
|
630
|
+
|
|
631
|
+
template <class PriorityQueue, template <typename> class Atom = std::atomic>
|
|
632
|
+
static void DSchedMixedTest() {
|
|
633
|
+
for (int r = 0; r < FLAGS_reps; r++) {
|
|
634
|
+
// the thread number is 32
|
|
635
|
+
int thr = 8;
|
|
636
|
+
PriorityQueue pq;
|
|
637
|
+
folly::Random::DefaultGenerator rng;
|
|
638
|
+
rng.seed(thr);
|
|
639
|
+
uint64_t pre_sum = 0;
|
|
640
|
+
uint64_t pre_size = 0;
|
|
641
|
+
for (int i = 0; i < FLAGS_elems; i++) {
|
|
642
|
+
int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
|
|
643
|
+
pq.push(val);
|
|
644
|
+
pre_sum += val;
|
|
645
|
+
}
|
|
646
|
+
pre_size = FLAGS_elems;
|
|
647
|
+
Atom<uint64_t> atom_push_sum{0};
|
|
648
|
+
Atom<uint64_t> atom_pop_sum{0};
|
|
649
|
+
std::vector<std::thread> threads(thr);
|
|
650
|
+
for (int tid = 0; tid < thr; ++tid) {
|
|
651
|
+
threads[tid] = DSched::thread([&]() {
|
|
652
|
+
folly::Random::DefaultGenerator tl_rng;
|
|
653
|
+
tl_rng.seed(thr);
|
|
654
|
+
uint64_t pop_sum = 0;
|
|
655
|
+
uint64_t push_sum = 0;
|
|
656
|
+
for (int i = 0; i < FLAGS_ops; i++) {
|
|
657
|
+
int val = folly::Random::rand32(tl_rng) % FLAGS_elems + 1;
|
|
658
|
+
pq.push(val);
|
|
659
|
+
push_sum += val;
|
|
660
|
+
pq.pop(val);
|
|
661
|
+
pop_sum += val;
|
|
662
|
+
}
|
|
663
|
+
atom_push_sum.fetch_add(push_sum, std::memory_order_acq_rel);
|
|
664
|
+
atom_pop_sum.fetch_add(pop_sum, std::memory_order_acq_rel);
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
for (auto& t : threads) {
|
|
669
|
+
DSched::join(t);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
// It checks the number of elements remain in Mound
|
|
673
|
+
while (pre_size > 0) {
|
|
674
|
+
pre_size--;
|
|
675
|
+
int val = -1;
|
|
676
|
+
pq.pop(val);
|
|
677
|
+
atom_pop_sum += val;
|
|
678
|
+
}
|
|
679
|
+
// Check the accumulation of popped and pushed priorities
|
|
680
|
+
EXPECT_EQ(atom_pop_sum, pre_sum + atom_push_sum);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
TEST(CPQ, DSchedMixedStrictTest) {
|
|
685
|
+
DSched sched(DSched::uniform(0));
|
|
686
|
+
DSchedMixedTest<
|
|
687
|
+
RelaxedConcurrentPriorityQueue<
|
|
688
|
+
int,
|
|
689
|
+
false,
|
|
690
|
+
false,
|
|
691
|
+
0,
|
|
692
|
+
25,
|
|
693
|
+
DeterministicMutex,
|
|
694
|
+
DeterministicAtomic>,
|
|
695
|
+
DeterministicAtomic>();
|
|
696
|
+
DSchedMixedTest<
|
|
697
|
+
RelaxedConcurrentPriorityQueue<
|
|
698
|
+
int,
|
|
699
|
+
true,
|
|
700
|
+
false,
|
|
701
|
+
0,
|
|
702
|
+
25,
|
|
703
|
+
DeterministicMutex,
|
|
704
|
+
DeterministicAtomic>,
|
|
705
|
+
DeterministicAtomic>();
|
|
706
|
+
DSchedMixedTest<
|
|
707
|
+
RelaxedConcurrentPriorityQueue<
|
|
708
|
+
int,
|
|
709
|
+
false,
|
|
710
|
+
false,
|
|
711
|
+
0,
|
|
712
|
+
1,
|
|
713
|
+
DeterministicMutex,
|
|
714
|
+
DeterministicAtomic>,
|
|
715
|
+
DeterministicAtomic>();
|
|
716
|
+
DSchedMixedTest<
|
|
717
|
+
RelaxedConcurrentPriorityQueue<
|
|
718
|
+
int,
|
|
719
|
+
true,
|
|
720
|
+
false,
|
|
721
|
+
0,
|
|
722
|
+
1,
|
|
723
|
+
DeterministicMutex,
|
|
724
|
+
DeterministicAtomic>,
|
|
725
|
+
DeterministicAtomic>();
|
|
726
|
+
DSchedMixedTest<
|
|
727
|
+
RelaxedConcurrentPriorityQueue<
|
|
728
|
+
int,
|
|
729
|
+
false,
|
|
730
|
+
false,
|
|
731
|
+
0,
|
|
732
|
+
128,
|
|
733
|
+
DeterministicMutex,
|
|
734
|
+
DeterministicAtomic>,
|
|
735
|
+
DeterministicAtomic>();
|
|
736
|
+
DSchedMixedTest<
|
|
737
|
+
RelaxedConcurrentPriorityQueue<
|
|
738
|
+
int,
|
|
739
|
+
true,
|
|
740
|
+
false,
|
|
741
|
+
0,
|
|
742
|
+
128,
|
|
743
|
+
DeterministicMutex,
|
|
744
|
+
DeterministicAtomic>,
|
|
745
|
+
DeterministicAtomic>();
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
TEST(CPQ, DSchedMixedRelaxedTest) {
|
|
749
|
+
DSched sched(DSched::uniform(0));
|
|
750
|
+
DSchedMixedTest<
|
|
751
|
+
RelaxedConcurrentPriorityQueue<
|
|
752
|
+
int,
|
|
753
|
+
false,
|
|
754
|
+
false,
|
|
755
|
+
16,
|
|
756
|
+
25,
|
|
757
|
+
DeterministicMutex,
|
|
758
|
+
DeterministicAtomic>,
|
|
759
|
+
DeterministicAtomic>();
|
|
760
|
+
DSchedMixedTest<
|
|
761
|
+
RelaxedConcurrentPriorityQueue<
|
|
762
|
+
int,
|
|
763
|
+
true,
|
|
764
|
+
false,
|
|
765
|
+
16,
|
|
766
|
+
25,
|
|
767
|
+
DeterministicMutex,
|
|
768
|
+
DeterministicAtomic>,
|
|
769
|
+
DeterministicAtomic>();
|
|
770
|
+
DSchedMixedTest<
|
|
771
|
+
RelaxedConcurrentPriorityQueue<
|
|
772
|
+
int,
|
|
773
|
+
false,
|
|
774
|
+
false,
|
|
775
|
+
1,
|
|
776
|
+
16,
|
|
777
|
+
DeterministicMutex,
|
|
778
|
+
DeterministicAtomic>,
|
|
779
|
+
DeterministicAtomic>();
|
|
780
|
+
DSchedMixedTest<
|
|
781
|
+
RelaxedConcurrentPriorityQueue<
|
|
782
|
+
int,
|
|
783
|
+
true,
|
|
784
|
+
false,
|
|
785
|
+
1,
|
|
786
|
+
16,
|
|
787
|
+
DeterministicMutex,
|
|
788
|
+
DeterministicAtomic>,
|
|
789
|
+
DeterministicAtomic>();
|
|
790
|
+
DSchedMixedTest<
|
|
791
|
+
RelaxedConcurrentPriorityQueue<
|
|
792
|
+
int,
|
|
793
|
+
false,
|
|
794
|
+
false,
|
|
795
|
+
16,
|
|
796
|
+
1,
|
|
797
|
+
DeterministicMutex,
|
|
798
|
+
DeterministicAtomic>,
|
|
799
|
+
DeterministicAtomic>();
|
|
800
|
+
DSchedMixedTest<
|
|
801
|
+
RelaxedConcurrentPriorityQueue<
|
|
802
|
+
int,
|
|
803
|
+
true,
|
|
804
|
+
false,
|
|
805
|
+
16,
|
|
806
|
+
1,
|
|
807
|
+
DeterministicMutex,
|
|
808
|
+
DeterministicAtomic>,
|
|
809
|
+
DeterministicAtomic>();
|
|
810
|
+
DSchedMixedTest<
|
|
811
|
+
RelaxedConcurrentPriorityQueue<
|
|
812
|
+
int,
|
|
813
|
+
false,
|
|
814
|
+
false,
|
|
815
|
+
16,
|
|
816
|
+
16,
|
|
817
|
+
DeterministicMutex,
|
|
818
|
+
DeterministicAtomic>,
|
|
819
|
+
DeterministicAtomic>();
|
|
820
|
+
DSchedMixedTest<
|
|
821
|
+
RelaxedConcurrentPriorityQueue<
|
|
822
|
+
int,
|
|
823
|
+
true,
|
|
824
|
+
false,
|
|
825
|
+
16,
|
|
826
|
+
16,
|
|
827
|
+
DeterministicMutex,
|
|
828
|
+
DeterministicAtomic>,
|
|
829
|
+
DeterministicAtomic>();
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
template <typename T>
|
|
833
|
+
class Queue {
|
|
834
|
+
std::queue<T> q_;
|
|
835
|
+
|
|
836
|
+
public:
|
|
837
|
+
void push(const T& val) { q_.push(val); }
|
|
838
|
+
void pop(T& val) {
|
|
839
|
+
val = q_.front();
|
|
840
|
+
q_.pop();
|
|
841
|
+
}
|
|
842
|
+
};
|
|
843
|
+
|
|
844
|
+
template <typename T>
|
|
845
|
+
class GlobalLockPQ {
|
|
846
|
+
std::priority_queue<T> q_;
|
|
847
|
+
std::mutex m_;
|
|
848
|
+
|
|
849
|
+
public:
|
|
850
|
+
void push(const T& val) {
|
|
851
|
+
std::lock_guard<std::mutex> g(m_);
|
|
852
|
+
q_.push(val);
|
|
853
|
+
}
|
|
854
|
+
void pop(T& val) {
|
|
855
|
+
while (true) {
|
|
856
|
+
std::lock_guard<std::mutex> g(m_);
|
|
857
|
+
if (q_.empty()) {
|
|
858
|
+
continue;
|
|
859
|
+
}
|
|
860
|
+
val = q_.top();
|
|
861
|
+
q_.pop();
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
};
|
|
866
|
+
|
|
867
|
+
template <class PriorityQueue>
|
|
868
|
+
static uint64_t producer_consumer_test(
|
|
869
|
+
std::string name,
|
|
870
|
+
uint32_t PushThr,
|
|
871
|
+
uint32_t PopThr,
|
|
872
|
+
uint64_t initial_size) {
|
|
873
|
+
int ops = 1 << 18;
|
|
874
|
+
int reps = 15;
|
|
875
|
+
if (name.find("RCPQ") != std::string::npos) {
|
|
876
|
+
ops <<= 3;
|
|
877
|
+
}
|
|
878
|
+
uint64_t min = UINTMAX_MAX;
|
|
879
|
+
uint64_t max = 0;
|
|
880
|
+
uint64_t sum = 0;
|
|
881
|
+
uint32_t total_threads = PushThr + PopThr;
|
|
882
|
+
|
|
883
|
+
for (int r = 0; r < reps; ++r) {
|
|
884
|
+
uint64_t dur;
|
|
885
|
+
PriorityQueue pq;
|
|
886
|
+
|
|
887
|
+
folly::Random::DefaultGenerator rng;
|
|
888
|
+
rng.seed(initial_size);
|
|
889
|
+
// initialize the queue according to initial_size
|
|
890
|
+
for (uint64_t i = 0; i < initial_size; i++) {
|
|
891
|
+
int val = folly::Random::rand32(rng) % ops;
|
|
892
|
+
pq.push(val);
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
auto fn_popthr = [&](uint32_t tid) {
|
|
896
|
+
for (int i = tid; i < ops; i += PopThr) {
|
|
897
|
+
int val;
|
|
898
|
+
pq.pop(val);
|
|
899
|
+
}
|
|
900
|
+
};
|
|
901
|
+
|
|
902
|
+
auto fn_pushthr = [&](uint32_t tid) {
|
|
903
|
+
folly::Random::DefaultGenerator rng_t;
|
|
904
|
+
rng_t.seed(tid);
|
|
905
|
+
for (int i = tid; i < ops; i += PushThr) {
|
|
906
|
+
int val = folly::Random::rand32(rng_t) % ops;
|
|
907
|
+
pq.push(val);
|
|
908
|
+
}
|
|
909
|
+
};
|
|
910
|
+
boost::barrier barrier_start{total_threads + 1};
|
|
911
|
+
std::vector<std::thread> threads_push(PushThr);
|
|
912
|
+
for (uint32_t tid = 0; tid < PushThr; ++tid) {
|
|
913
|
+
threads_push[tid] = std::thread([&, tid] {
|
|
914
|
+
barrier_start.wait();
|
|
915
|
+
fn_pushthr(tid);
|
|
916
|
+
});
|
|
917
|
+
}
|
|
918
|
+
std::vector<std::thread> threads_pop(PopThr);
|
|
919
|
+
for (uint32_t tid = 0; tid < PopThr; ++tid) {
|
|
920
|
+
threads_pop[tid] = std::thread([&, tid] {
|
|
921
|
+
barrier_start.wait();
|
|
922
|
+
fn_popthr(tid);
|
|
923
|
+
});
|
|
924
|
+
}
|
|
925
|
+
barrier_start.wait(); // start the execution
|
|
926
|
+
// begin time measurement
|
|
927
|
+
auto tbegin = std::chrono::steady_clock::now();
|
|
928
|
+
for (auto& t : threads_push) {
|
|
929
|
+
t.join();
|
|
930
|
+
}
|
|
931
|
+
for (auto& t : threads_pop) {
|
|
932
|
+
t.join();
|
|
933
|
+
}
|
|
934
|
+
// end time measurement
|
|
935
|
+
auto tend = std::chrono::steady_clock::now();
|
|
936
|
+
dur = std::chrono::duration_cast<std::chrono::nanoseconds>(tend - tbegin)
|
|
937
|
+
.count();
|
|
938
|
+
sum += dur;
|
|
939
|
+
min = std::min(min, dur);
|
|
940
|
+
max = std::max(max, dur);
|
|
941
|
+
}
|
|
942
|
+
uint64_t avg = sum / reps;
|
|
943
|
+
std::cout << std::setw(12) << name;
|
|
944
|
+
std::cout << " " << std::setw(8) << max / ops << " ns";
|
|
945
|
+
std::cout << " " << std::setw(8) << avg / ops << " ns";
|
|
946
|
+
std::cout << " " << std::setw(8) << min / ops << " ns";
|
|
947
|
+
std::cout << std::endl;
|
|
948
|
+
return min;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
template <class PriorityQueue>
|
|
952
|
+
static uint64_t throughtput_test(std::string name, uint64_t initial_size) {
|
|
953
|
+
int ops = 1 << 18;
|
|
954
|
+
int reps = 15;
|
|
955
|
+
uint64_t min = UINTMAX_MAX;
|
|
956
|
+
uint64_t max = 0;
|
|
957
|
+
uint64_t sum = 0;
|
|
958
|
+
|
|
959
|
+
for (int r = 0; r < reps; ++r) {
|
|
960
|
+
uint64_t dur;
|
|
961
|
+
PriorityQueue pq;
|
|
962
|
+
|
|
963
|
+
folly::Random::DefaultGenerator rng;
|
|
964
|
+
rng.seed(initial_size);
|
|
965
|
+
// initialize the queue according to initial_size
|
|
966
|
+
for (uint64_t i = 0; i < initial_size; i++) {
|
|
967
|
+
int val = folly::Random::rand32(rng) % (ops + 1);
|
|
968
|
+
pq.push(val);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
auto fn = [&](uint32_t tid) {
|
|
972
|
+
folly::Random::DefaultGenerator rng_tl;
|
|
973
|
+
rng_tl.seed(tid);
|
|
974
|
+
uint32_t counter = 0;
|
|
975
|
+
for (int i = tid; i < ops; i += nthreads) {
|
|
976
|
+
int val;
|
|
977
|
+
counter++;
|
|
978
|
+
if (counter % 2) {
|
|
979
|
+
val = folly::Random::rand32(rng_tl) % (ops + 1);
|
|
980
|
+
pq.push(val);
|
|
981
|
+
} else {
|
|
982
|
+
pq.pop(val);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
};
|
|
986
|
+
|
|
987
|
+
dur = run_once(fn);
|
|
988
|
+
sum += dur;
|
|
989
|
+
min = std::min(min, dur);
|
|
990
|
+
max = std::max(max, dur);
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
uint64_t avg = sum / reps;
|
|
994
|
+
std::cout << std::setw(12) << name;
|
|
995
|
+
std::cout << " " << std::setw(8) << max / ops << " ns";
|
|
996
|
+
std::cout << " " << std::setw(8) << avg / ops << " ns";
|
|
997
|
+
std::cout << " " << std::setw(8) << min / ops << " ns";
|
|
998
|
+
std::cout << std::endl;
|
|
999
|
+
return min;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
template <class PriorityQueue>
|
|
1003
|
+
static void accuracy_test(
|
|
1004
|
+
std::string name, uint64_t initial_size, uint32_t top_percent) {
|
|
1005
|
+
int avg = 0;
|
|
1006
|
+
int reps = 15;
|
|
1007
|
+
int valid = initial_size / top_percent;
|
|
1008
|
+
if (valid < 1) {
|
|
1009
|
+
return;
|
|
1010
|
+
}
|
|
1011
|
+
int target = initial_size - valid;
|
|
1012
|
+
for (int r = 0; r < reps; ++r) {
|
|
1013
|
+
PriorityQueue pq;
|
|
1014
|
+
std::unordered_set<int> filter;
|
|
1015
|
+
folly::Random::DefaultGenerator rng;
|
|
1016
|
+
rng.seed(initial_size + r);
|
|
1017
|
+
|
|
1018
|
+
// initialize the queue according to initial_size
|
|
1019
|
+
// eliminate repeated priorities
|
|
1020
|
+
for (uint64_t i = 0; i < initial_size; i++) {
|
|
1021
|
+
int val;
|
|
1022
|
+
do {
|
|
1023
|
+
val = folly::Random::rand32(rng) % initial_size;
|
|
1024
|
+
} while (filter.find(val) != filter.end());
|
|
1025
|
+
filter.insert(val);
|
|
1026
|
+
pq.push(val);
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
int counter = 0;
|
|
1030
|
+
int stop = valid;
|
|
1031
|
+
for (uint64_t i = 0; i < initial_size; i++) {
|
|
1032
|
+
int val;
|
|
1033
|
+
pq.pop(val);
|
|
1034
|
+
if (val >= target) {
|
|
1035
|
+
stop--;
|
|
1036
|
+
}
|
|
1037
|
+
if (stop > 0 && val < target) {
|
|
1038
|
+
counter++;
|
|
1039
|
+
}
|
|
1040
|
+
if (stop == 0) {
|
|
1041
|
+
break;
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
avg += counter;
|
|
1045
|
+
}
|
|
1046
|
+
avg /= reps;
|
|
1047
|
+
std::cout << std::setw(16) << name << " ";
|
|
1048
|
+
std::cout << "Lower priority popped: " << avg;
|
|
1049
|
+
std::cout << std::endl;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
using FCPQ = folly::FlatCombiningPriorityQueue<int>;
|
|
1053
|
+
|
|
1054
|
+
TEST(CPQ, ThroughtputBench) {
|
|
1055
|
+
if (!FLAGS_bench) {
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1058
|
+
std::vector<int> test_sizes = {64, 512, 65536};
|
|
1059
|
+
std::vector<int> nthrs = {1, 2, 4, 8, 12, 14, 16, 28, 32, 56};
|
|
1060
|
+
|
|
1061
|
+
std::cout << "Threads have equal chance to push and pop. \n"
|
|
1062
|
+
<< "The bench caculates the avg execution time for\n"
|
|
1063
|
+
<< "one operation (push OR pop).\n"
|
|
1064
|
+
<< "GL : std::priority_queue protected by global lock\n"
|
|
1065
|
+
<< "FL : flatcombinning priority queue\n"
|
|
1066
|
+
<< "RCPQ: the relaxed concurrent priority queue\n"
|
|
1067
|
+
<< std::endl;
|
|
1068
|
+
std::cout << "\nTest_name, Max time, Avg time, Min time" << std::endl;
|
|
1069
|
+
for (auto s : test_sizes) {
|
|
1070
|
+
std::cout << "\n ------ Initial size: " << s << " ------" << std::endl;
|
|
1071
|
+
for (int i : nthrs) {
|
|
1072
|
+
nthreads = i;
|
|
1073
|
+
std::cout << "Thread number: " << i << std::endl;
|
|
1074
|
+
throughtput_test<GlobalLockPQ<int>>("GL", s);
|
|
1075
|
+
throughtput_test<FCPQ>("FC", s);
|
|
1076
|
+
throughtput_test<RelaxedConcurrentPriorityQueue<int>>("RCPQ", s);
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
TEST(CPQ, ProducerConsumerBench) {
|
|
1082
|
+
if (!FLAGS_bench) {
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
1085
|
+
std::vector<int> test_sizes = {0, 512, 65536};
|
|
1086
|
+
std::vector<int> nthrs = {1, 2, 4, 8, 12, 16, 24};
|
|
1087
|
+
|
|
1088
|
+
std::cout << "<Producer, Consumer> pattern \n"
|
|
1089
|
+
<< "The bench caculates the avg execution time for\n"
|
|
1090
|
+
<< "push AND pop pair(two operations).\n"
|
|
1091
|
+
<< "GL : std::priority_queue protected by global lock\n"
|
|
1092
|
+
<< "FL : flatcombinning priority queue\n"
|
|
1093
|
+
<< "RCPQ SPN: RCPQ spinning\n"
|
|
1094
|
+
<< "RCPQ BLK: RCPQ blocking\n"
|
|
1095
|
+
<< std::endl;
|
|
1096
|
+
for (int s : test_sizes) {
|
|
1097
|
+
std::cout << "\n ------ Scalability ------" << std::endl;
|
|
1098
|
+
for (int m : nthrs) {
|
|
1099
|
+
for (int n : nthrs) {
|
|
1100
|
+
if (m != n) {
|
|
1101
|
+
continue;
|
|
1102
|
+
}
|
|
1103
|
+
std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
|
|
1104
|
+
<< std::endl;
|
|
1105
|
+
producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
|
|
1106
|
+
producer_consumer_test<FCPQ>("FC", m, n, s);
|
|
1107
|
+
producer_consumer_test<
|
|
1108
|
+
RelaxedConcurrentPriorityQueue<int, false, false>>(
|
|
1109
|
+
"RCPQ SPN", m, n, s);
|
|
1110
|
+
producer_consumer_test<
|
|
1111
|
+
RelaxedConcurrentPriorityQueue<int, true, false>>(
|
|
1112
|
+
"RCPQ BLK", m, n, s);
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
std::cout << "\n ------ Unbalanced(Producer<Consumer) ------" << std::endl;
|
|
1116
|
+
for (int m : nthrs) {
|
|
1117
|
+
for (int n : nthrs) {
|
|
1118
|
+
if (m > 4 || n - 4 <= m) {
|
|
1119
|
+
continue;
|
|
1120
|
+
}
|
|
1121
|
+
std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
|
|
1122
|
+
<< std::endl;
|
|
1123
|
+
producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
|
|
1124
|
+
producer_consumer_test<FCPQ>("FC", m, n, s);
|
|
1125
|
+
producer_consumer_test<
|
|
1126
|
+
RelaxedConcurrentPriorityQueue<int, false, false>>(
|
|
1127
|
+
"RCPQ SPN", m, n, s);
|
|
1128
|
+
producer_consumer_test<
|
|
1129
|
+
RelaxedConcurrentPriorityQueue<int, true, false>>(
|
|
1130
|
+
"RCPQ BLK", m, n, s);
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
std::cout << "\n ------ Unbalanced(Producer>Consumer) ------" << std::endl;
|
|
1135
|
+
for (int m : nthrs) {
|
|
1136
|
+
for (int n : nthrs) {
|
|
1137
|
+
if (m <= 8 || n > m - 4 || n % 4 != 0) {
|
|
1138
|
+
continue;
|
|
1139
|
+
}
|
|
1140
|
+
std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
|
|
1141
|
+
<< std::endl;
|
|
1142
|
+
producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
|
|
1143
|
+
producer_consumer_test<FCPQ>("FC", m, n, s);
|
|
1144
|
+
producer_consumer_test<
|
|
1145
|
+
RelaxedConcurrentPriorityQueue<int, false, false>>(
|
|
1146
|
+
"RCPQ SPN", m, n, s);
|
|
1147
|
+
producer_consumer_test<
|
|
1148
|
+
RelaxedConcurrentPriorityQueue<int, true, false>>(
|
|
1149
|
+
"RCPQ BLK", m, n, s);
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
TEST(CPQ, Accuracy) {
|
|
1156
|
+
if (!FLAGS_bench) {
|
|
1157
|
+
return;
|
|
1158
|
+
}
|
|
1159
|
+
std::vector<int> test_sizes = {512, 65536, 1 << 20};
|
|
1160
|
+
std::vector<int> rates = {1000, 100, 10};
|
|
1161
|
+
for (auto s : test_sizes) {
|
|
1162
|
+
for (auto p : rates) {
|
|
1163
|
+
std::cout << "\n------ Size: " << s << " Get top: " << 100. / p << "%"
|
|
1164
|
+
<< " (Num: " << s / p << ")" << " ------" << std::endl;
|
|
1165
|
+
accuracy_test<Queue<int>>("FIFO Q", s, p);
|
|
1166
|
+
accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 0>>(
|
|
1167
|
+
"RCPQ(strict)", s, p);
|
|
1168
|
+
accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 2>>(
|
|
1169
|
+
"RCPQ(batch=2)", s, p);
|
|
1170
|
+
accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 8>>(
|
|
1171
|
+
"RCPQ(batch=8)", s, p);
|
|
1172
|
+
accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 16>>(
|
|
1173
|
+
"RCPQ(batch=16)", s, p);
|
|
1174
|
+
accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 50>>(
|
|
1175
|
+
"RCPQ(batch=50)", s, p);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
/*
|
|
1181
|
+
* The folly::SpinningLock use CAS directly for try_lock, which is not
|
|
1182
|
+
efficient in the
|
|
1183
|
+
* experiment. The lock used in the experiment based on the test-test-and-set
|
|
1184
|
+
lock(Add
|
|
1185
|
+
* check before doing CAS).
|
|
1186
|
+
*
|
|
1187
|
+
Threads have equal chance to push and pop.
|
|
1188
|
+
The bench caculates the avg execution time for
|
|
1189
|
+
one operation (push OR pop).
|
|
1190
|
+
GL : std::priority_queue protected by global lock
|
|
1191
|
+
FL : flatcombinning priority queue
|
|
1192
|
+
RCPQ: the relaxed concurrent priority queue
|
|
1193
|
+
|
|
1194
|
+
Test_name, Max time, Avg time, Min time
|
|
1195
|
+
|
|
1196
|
+
------ Initial size: 64 ------
|
|
1197
|
+
Thread number: 1
|
|
1198
|
+
GL 30 ns 29 ns 27 ns
|
|
1199
|
+
FC 47 ns 42 ns 40 ns
|
|
1200
|
+
RCPQ 85 ns 81 ns 77 ns
|
|
1201
|
+
Thread number: 2
|
|
1202
|
+
GL 377 ns 274 ns 154 ns
|
|
1203
|
+
FC 227 ns 187 ns 139 ns
|
|
1204
|
+
RCPQ 108 ns 106 ns 102 ns
|
|
1205
|
+
Thread number: 4
|
|
1206
|
+
GL 244 ns 214 ns 191 ns
|
|
1207
|
+
FC 212 ns 191 ns 173 ns
|
|
1208
|
+
RCPQ 98 ns 95 ns 92 ns
|
|
1209
|
+
Thread number: 8
|
|
1210
|
+
GL 252 ns 221 ns 197 ns
|
|
1211
|
+
FC 127 ns 112 ns 102 ns
|
|
1212
|
+
RCPQ 78 ns 78 ns 76 ns
|
|
1213
|
+
Thread number: 12
|
|
1214
|
+
GL 251 ns 227 ns 217 ns
|
|
1215
|
+
FC 104 ns 96 ns 88 ns
|
|
1216
|
+
RCPQ 81 ns 79 ns 77 ns
|
|
1217
|
+
Thread number: 14
|
|
1218
|
+
GL 243 ns 232 ns 224 ns
|
|
1219
|
+
FC 103 ns 96 ns 90 ns
|
|
1220
|
+
RCPQ 84 ns 82 ns 81 ns
|
|
1221
|
+
Thread number: 16
|
|
1222
|
+
GL 254 ns 239 ns 229 ns
|
|
1223
|
+
FC 105 ns 98 ns 92 ns
|
|
1224
|
+
RCPQ 88 ns 85 ns 83 ns
|
|
1225
|
+
Thread number: 28
|
|
1226
|
+
GL 265 ns 261 ns 258 ns
|
|
1227
|
+
FC 106 ns 100 ns 96 ns
|
|
1228
|
+
RCPQ 93 ns 87 ns 68 ns
|
|
1229
|
+
Thread number: 32
|
|
1230
|
+
GL 274 ns 267 ns 261 ns
|
|
1231
|
+
FC 110 ns 98 ns 37 ns
|
|
1232
|
+
RCPQ 93 ns 80 ns 47 ns
|
|
1233
|
+
Thread number: 56
|
|
1234
|
+
GL 274 ns 263 ns 257 ns
|
|
1235
|
+
FC 78 ns 50 ns 24 ns
|
|
1236
|
+
RCPQ 85 ns 71 ns 45 ns
|
|
1237
|
+
|
|
1238
|
+
------ Initial size: 512 ------
|
|
1239
|
+
Thread number: 1
|
|
1240
|
+
GL 36 ns 35 ns 33 ns
|
|
1241
|
+
FC 54 ns 49 ns 47 ns
|
|
1242
|
+
RCPQ 79 ns 76 ns 72 ns
|
|
1243
|
+
Thread number: 2
|
|
1244
|
+
GL 248 ns 187 ns 151 ns
|
|
1245
|
+
FC 228 ns 179 ns 147 ns
|
|
1246
|
+
RCPQ 95 ns 92 ns 90 ns
|
|
1247
|
+
Thread number: 4
|
|
1248
|
+
GL 282 ns 260 ns 236 ns
|
|
1249
|
+
FC 218 ns 199 ns 174 ns
|
|
1250
|
+
RCPQ 85 ns 81 ns 79 ns
|
|
1251
|
+
Thread number: 8
|
|
1252
|
+
GL 306 ns 288 ns 270 ns
|
|
1253
|
+
FC 188 ns 114 ns 104 ns
|
|
1254
|
+
RCPQ 64 ns 62 ns 59 ns
|
|
1255
|
+
Thread number: 12
|
|
1256
|
+
GL 317 ns 296 ns 280 ns
|
|
1257
|
+
FC 105 ns 99 ns 91 ns
|
|
1258
|
+
RCPQ 59 ns 57 ns 52 ns
|
|
1259
|
+
Thread number: 14
|
|
1260
|
+
GL 331 ns 305 ns 293 ns
|
|
1261
|
+
FC 109 ns 99 ns 92 ns
|
|
1262
|
+
RCPQ 64 ns 57 ns 53 ns
|
|
1263
|
+
Thread number: 16
|
|
1264
|
+
GL 316 ns 308 ns 291 ns
|
|
1265
|
+
FC 110 ns 99 ns 92 ns
|
|
1266
|
+
RCPQ 58 ns 54 ns 52 ns
|
|
1267
|
+
Thread number: 28
|
|
1268
|
+
GL 348 ns 339 ns 333 ns
|
|
1269
|
+
FC 109 ns 105 ns 100 ns
|
|
1270
|
+
RCPQ 64 ns 62 ns 56 ns
|
|
1271
|
+
Thread number: 32
|
|
1272
|
+
GL 353 ns 347 ns 341 ns
|
|
1273
|
+
FC 116 ns 102 ns 39 ns
|
|
1274
|
+
RCPQ 62 ns 32 ns 3 ns
|
|
1275
|
+
Thread number: 56
|
|
1276
|
+
GL 360 ns 352 ns 342 ns
|
|
1277
|
+
FC 101 ns 58 ns 41 ns
|
|
1278
|
+
RCPQ 59 ns 43 ns 26 ns
|
|
1279
|
+
|
|
1280
|
+
------ Initial size: 65536 ------
|
|
1281
|
+
Thread number: 1
|
|
1282
|
+
GL 64 ns 60 ns 56 ns
|
|
1283
|
+
FC 93 ns 72 ns 67 ns
|
|
1284
|
+
RCPQ 293 ns 286 ns 281 ns
|
|
1285
|
+
Thread number: 2
|
|
1286
|
+
GL 262 ns 248 ns 231 ns
|
|
1287
|
+
FC 318 ns 301 ns 288 ns
|
|
1288
|
+
RCPQ 230 ns 216 ns 206 ns
|
|
1289
|
+
Thread number: 4
|
|
1290
|
+
GL 463 ns 452 ns 408 ns
|
|
1291
|
+
FC 273 ns 265 ns 257 ns
|
|
1292
|
+
RCPQ 141 ns 131 ns 126 ns
|
|
1293
|
+
Thread number: 8
|
|
1294
|
+
GL 582 ns 574 ns 569 ns
|
|
1295
|
+
FC 152 ns 139 ns 131 ns
|
|
1296
|
+
RCPQ 98 ns 81 ns 72 ns
|
|
1297
|
+
Thread number: 12
|
|
1298
|
+
GL 593 ns 586 ns 576 ns
|
|
1299
|
+
FC 126 ns 123 ns 119 ns
|
|
1300
|
+
RCPQ 85 ns 72 ns 62 ns
|
|
1301
|
+
Thread number: 14
|
|
1302
|
+
GL 599 ns 595 ns 588 ns
|
|
1303
|
+
FC 138 ns 123 ns 119 ns
|
|
1304
|
+
RCPQ 79 ns 70 ns 62 ns
|
|
1305
|
+
Thread number: 16
|
|
1306
|
+
GL 599 ns 592 ns 587 ns
|
|
1307
|
+
FC 138 ns 123 ns 117 ns
|
|
1308
|
+
RCPQ 75 ns 65 ns 56 ns
|
|
1309
|
+
Thread number: 28
|
|
1310
|
+
GL 611 ns 609 ns 608 ns
|
|
1311
|
+
FC 147 ns 144 ns 137 ns
|
|
1312
|
+
RCPQ 74 ns 70 ns 66 ns
|
|
1313
|
+
Thread number: 32
|
|
1314
|
+
GL 635 ns 630 ns 627 ns
|
|
1315
|
+
FC 151 ns 143 ns 76 ns
|
|
1316
|
+
RCPQ 199 ns 94 ns 59 ns
|
|
1317
|
+
Thread number: 56
|
|
1318
|
+
GL 637 ns 633 ns 627 ns
|
|
1319
|
+
FC 176 ns 103 ns 41 ns
|
|
1320
|
+
RCPQ 561 ns 132 ns 46 ns
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
<Producer, Consumer> pattern
|
|
1324
|
+
The bench caculates the avg execution time for
|
|
1325
|
+
push AND pop pair(two operations).
|
|
1326
|
+
GL : std::priority_queue protected by global lock
|
|
1327
|
+
FL : flatcombinning priority queue
|
|
1328
|
+
RCPQ SPN: RCPQ spinning
|
|
1329
|
+
RCPQ BLK: RCPQ blocking
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
------ Scalability ------
|
|
1333
|
+
<1 , 1> , size = 0:
|
|
1334
|
+
GL 781 ns 735 ns 652 ns
|
|
1335
|
+
FC 599 ns 535 ns 462 ns
|
|
1336
|
+
RCPQ SPN 178 ns 166 ns 148 ns
|
|
1337
|
+
RCPQ BLK 217 ns 201 ns 182 ns
|
|
1338
|
+
<2 , 2> , size = 0:
|
|
1339
|
+
GL 686 ns 665 ns 619 ns
|
|
1340
|
+
FC 487 ns 430 ns 398 ns
|
|
1341
|
+
RCPQ SPN 281 ns 239 ns 139 ns
|
|
1342
|
+
RCPQ BLK 405 ns 367 ns 181 ns
|
|
1343
|
+
<4 , 4> , size = 0:
|
|
1344
|
+
GL 1106 ns 1082 ns 1050 ns
|
|
1345
|
+
FC 278 ns 242 ns 208 ns
|
|
1346
|
+
RCPQ SPN 114 ns 107 ns 103 ns
|
|
1347
|
+
RCPQ BLK 169 ns 158 ns 148 ns
|
|
1348
|
+
<8 , 8> , size = 0:
|
|
1349
|
+
GL 1169 ns 1156 ns 1144 ns
|
|
1350
|
+
FC 236 ns 214 ns 197 ns
|
|
1351
|
+
RCPQ SPN 121 ns 114 ns 110 ns
|
|
1352
|
+
RCPQ BLK 154 ns 150 ns 141 ns
|
|
1353
|
+
<12 , 12> , size = 0:
|
|
1354
|
+
GL 1191 ns 1185 ns 1178 ns
|
|
1355
|
+
FC 232 ns 221 ns 201 ns
|
|
1356
|
+
RCPQ SPN 802 ns 205 ns 123 ns
|
|
1357
|
+
RCPQ BLK 218 ns 161 ns 147 ns
|
|
1358
|
+
<16 , 16> , size = 0:
|
|
1359
|
+
GL 1236 ns 1227 ns 1221 ns
|
|
1360
|
+
FC 269 ns 258 ns 243 ns
|
|
1361
|
+
RCPQ SPN 826 ns 733 ns 655 ns
|
|
1362
|
+
RCPQ BLK 172 ns 149 ns 137 ns
|
|
1363
|
+
<24 , 24> , size = 0:
|
|
1364
|
+
GL 1269 ns 1262 ns 1255 ns
|
|
1365
|
+
FC 280 ns 225 ns 171 ns
|
|
1366
|
+
RCPQ SPN 931 ns 891 ns 836 ns
|
|
1367
|
+
RCPQ BLK 611 ns 445 ns 362 ns
|
|
1368
|
+
|
|
1369
|
+
------ Unbalanced(Producer<Consumer) ------
|
|
1370
|
+
<1 , 8> , size = 0:
|
|
1371
|
+
GL 1454 ns 1225 ns 1144 ns
|
|
1372
|
+
FC 2141 ns 1974 ns 1811 ns
|
|
1373
|
+
RCPQ SPN 597 ns 586 ns 573 ns
|
|
1374
|
+
RCPQ BLK 663 ns 649 ns 636 ns
|
|
1375
|
+
<1 , 12> , size = 0:
|
|
1376
|
+
GL 1763 ns 1658 ns 1591 ns
|
|
1377
|
+
FC 3396 ns 3261 ns 3107 ns
|
|
1378
|
+
RCPQ SPN 735 ns 714 ns 651 ns
|
|
1379
|
+
RCPQ BLK 773 ns 761 ns 744 ns
|
|
1380
|
+
<1 , 16> , size = 0:
|
|
1381
|
+
GL 2231 ns 2070 ns 1963 ns
|
|
1382
|
+
FC 6305 ns 5771 ns 5603 ns
|
|
1383
|
+
RCPQ SPN 787 ns 756 ns 694 ns
|
|
1384
|
+
RCPQ BLK 828 ns 806 ns 775 ns
|
|
1385
|
+
<1 , 24> , size = 0:
|
|
1386
|
+
GL 3802 ns 3545 ns 3229 ns
|
|
1387
|
+
FC 10625 ns 10311 ns 10119 ns
|
|
1388
|
+
RCPQ SPN 781 ns 756 ns 739 ns
|
|
1389
|
+
RCPQ BLK 892 ns 882 ns 870 ns
|
|
1390
|
+
<2 , 8> , size = 0:
|
|
1391
|
+
GL 873 ns 750 ns 718 ns
|
|
1392
|
+
FC 815 ns 712 ns 659 ns
|
|
1393
|
+
RCPQ SPN 720 ns 691 ns 673 ns
|
|
1394
|
+
RCPQ BLK 738 ns 707 ns 694 ns
|
|
1395
|
+
<2 , 12> , size = 0:
|
|
1396
|
+
GL 1061 ns 968 ns 904 ns
|
|
1397
|
+
FC 1410 ns 1227 ns 1190 ns
|
|
1398
|
+
RCPQ SPN 862 ns 829 ns 767 ns
|
|
1399
|
+
RCPQ BLK 825 ns 804 ns 771 ns
|
|
1400
|
+
<2 , 16> , size = 0:
|
|
1401
|
+
GL 1438 ns 1283 ns 1162 ns
|
|
1402
|
+
FC 2095 ns 2012 ns 1909 ns
|
|
1403
|
+
RCPQ SPN 763 ns 706 ns 628 ns
|
|
1404
|
+
RCPQ BLK 833 ns 804 ns 777 ns
|
|
1405
|
+
<2 , 24> , size = 0:
|
|
1406
|
+
GL 2031 ns 1972 ns 1872 ns
|
|
1407
|
+
FC 4298 ns 4191 ns 4107 ns
|
|
1408
|
+
RCPQ SPN 762 ns 709 ns 680 ns
|
|
1409
|
+
RCPQ BLK 876 ns 859 ns 825 ns
|
|
1410
|
+
<4 , 12> , size = 0:
|
|
1411
|
+
GL 696 ns 649 ns 606 ns
|
|
1412
|
+
FC 561 ns 517 ns 480 ns
|
|
1413
|
+
RCPQ SPN 759 ns 698 ns 498 ns
|
|
1414
|
+
RCPQ BLK 823 ns 803 ns 786 ns
|
|
1415
|
+
<4 , 16> , size = 0:
|
|
1416
|
+
GL 862 ns 800 ns 749 ns
|
|
1417
|
+
FC 857 ns 824 ns 781 ns
|
|
1418
|
+
RCPQ SPN 730 ns 679 ns 589 ns
|
|
1419
|
+
RCPQ BLK 863 ns 824 ns 803 ns
|
|
1420
|
+
<4 , 24> , size = 0:
|
|
1421
|
+
GL 1138 ns 1125 ns 1105 ns
|
|
1422
|
+
FC 1635 ns 1576 ns 1540 ns
|
|
1423
|
+
RCPQ SPN 756 ns 717 ns 668 ns
|
|
1424
|
+
RCPQ BLK 865 ns 839 ns 812 ns
|
|
1425
|
+
|
|
1426
|
+
------ Unbalanced(Producer>Consumer) ------
|
|
1427
|
+
<12 , 4> , size = 0:
|
|
1428
|
+
GL 1115 ns 1087 ns 1053 ns
|
|
1429
|
+
FC 373 ns 355 ns 333 ns
|
|
1430
|
+
RCPQ SPN 155 ns 147 ns 142 ns
|
|
1431
|
+
RCPQ BLK 202 ns 190 ns 182 ns
|
|
1432
|
+
<12 , 8> , size = 0:
|
|
1433
|
+
GL 1167 ns 1157 ns 1148 ns
|
|
1434
|
+
FC 281 ns 256 ns 227 ns
|
|
1435
|
+
RCPQ SPN 132 ns 126 ns 120 ns
|
|
1436
|
+
RCPQ BLK 175 ns 164 ns 161 ns
|
|
1437
|
+
<16 , 4> , size = 0:
|
|
1438
|
+
GL 1103 ns 1088 ns 1074 ns
|
|
1439
|
+
FC 442 ns 380 ns 327 ns
|
|
1440
|
+
RCPQ SPN 178 ns 162 ns 150 ns
|
|
1441
|
+
RCPQ BLK 217 ns 200 ns 188 ns
|
|
1442
|
+
<16 , 8> , size = 0:
|
|
1443
|
+
GL 1164 ns 1153 ns 1143 ns
|
|
1444
|
+
FC 290 ns 268 ns 243 ns
|
|
1445
|
+
RCPQ SPN 146 ns 138 ns 134 ns
|
|
1446
|
+
RCPQ BLK 184 ns 175 ns 161 ns
|
|
1447
|
+
<16 , 12> , size = 0:
|
|
1448
|
+
GL 1196 ns 1189 ns 1185 ns
|
|
1449
|
+
FC 269 ns 260 ns 245 ns
|
|
1450
|
+
RCPQ SPN 405 ns 172 ns 129 ns
|
|
1451
|
+
RCPQ BLK 172 ns 165 ns 152 ns
|
|
1452
|
+
<24 , 4> , size = 0:
|
|
1453
|
+
GL 1097 ns 1081 ns 1030 ns
|
|
1454
|
+
FC 407 ns 369 ns 301 ns
|
|
1455
|
+
RCPQ SPN 184 ns 176 ns 164 ns
|
|
1456
|
+
RCPQ BLK 220 ns 211 ns 201 ns
|
|
1457
|
+
<24 , 8> , size = 0:
|
|
1458
|
+
GL 1177 ns 1158 ns 1148 ns
|
|
1459
|
+
FC 321 ns 297 ns 233 ns
|
|
1460
|
+
RCPQ SPN 155 ns 148 ns 139 ns
|
|
1461
|
+
RCPQ BLK 204 ns 188 ns 173 ns
|
|
1462
|
+
<24 , 12> , size = 0:
|
|
1463
|
+
GL 1224 ns 1215 ns 1205 ns
|
|
1464
|
+
FC 320 ns 287 ns 218 ns
|
|
1465
|
+
RCPQ SPN 145 ns 141 ns 135 ns
|
|
1466
|
+
RCPQ BLK 176 ns 167 ns 160 ns
|
|
1467
|
+
<24 , 16> , size = 0:
|
|
1468
|
+
GL 1250 ns 1244 ns 1238 ns
|
|
1469
|
+
FC 339 ns 257 ns 209 ns
|
|
1470
|
+
RCPQ SPN 615 ns 480 ns 359 ns
|
|
1471
|
+
RCPQ BLK 185 ns 151 ns 137 ns
|
|
1472
|
+
|
|
1473
|
+
[ RUN ] CPQ.Accuracy
|
|
1474
|
+
The Accuracy test check how many pops return lower
|
|
1475
|
+
priority when popping the top X% priorities.
|
|
1476
|
+
The default batch size is 16.
|
|
1477
|
+
|
|
1478
|
+
------ Size: 512 Get top: 1% (Num: 5) ------
|
|
1479
|
+
FIFO Q Lower priority popped: 439
|
|
1480
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1481
|
+
RCPQ(batch=2) Lower priority popped: 1
|
|
1482
|
+
RCPQ(batch=8) Lower priority popped: 10
|
|
1483
|
+
RCPQ(batch=16) Lower priority popped: 13
|
|
1484
|
+
RCPQ(batch=50) Lower priority popped: 11
|
|
1485
|
+
|
|
1486
|
+
------ Size: 512 Get top: 10% (Num: 51) ------
|
|
1487
|
+
FIFO Q Lower priority popped: 451
|
|
1488
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1489
|
+
RCPQ(batch=2) Lower priority popped: 15
|
|
1490
|
+
RCPQ(batch=8) Lower priority popped: 73
|
|
1491
|
+
RCPQ(batch=16) Lower priority popped: 147
|
|
1492
|
+
RCPQ(batch=50) Lower priority popped: 201
|
|
1493
|
+
|
|
1494
|
+
------ Size: 65536 Get top: 0.1% (Num: 65) ------
|
|
1495
|
+
FIFO Q Lower priority popped: 64917
|
|
1496
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1497
|
+
RCPQ(batch=2) Lower priority popped: 35
|
|
1498
|
+
RCPQ(batch=8) Lower priority popped: 190
|
|
1499
|
+
RCPQ(batch=16) Lower priority popped: 387
|
|
1500
|
+
RCPQ(batch=50) Lower priority popped: 655
|
|
1501
|
+
|
|
1502
|
+
------ Size: 65536 Get top: 1% (Num: 655) ------
|
|
1503
|
+
FIFO Q Lower priority popped: 64793
|
|
1504
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1505
|
+
RCPQ(batch=2) Lower priority popped: 122
|
|
1506
|
+
RCPQ(batch=8) Lower priority popped: 516
|
|
1507
|
+
RCPQ(batch=16) Lower priority popped: 1450
|
|
1508
|
+
RCPQ(batch=50) Lower priority popped: 3219
|
|
1509
|
+
|
|
1510
|
+
------ Size: 65536 Get top: 10% (Num: 6553) ------
|
|
1511
|
+
FIFO Q Lower priority popped: 58977
|
|
1512
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1513
|
+
RCPQ(batch=2) Lower priority popped: 174
|
|
1514
|
+
RCPQ(batch=8) Lower priority popped: 753
|
|
1515
|
+
RCPQ(batch=16) Lower priority popped: 1436
|
|
1516
|
+
RCPQ(batch=50) Lower priority popped: 3297
|
|
1517
|
+
|
|
1518
|
+
------ Size: 1048576 Get top: 0.1% (Num: 1048) ------
|
|
1519
|
+
FIFO Q Lower priority popped: 1046345
|
|
1520
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1521
|
+
RCPQ(batch=2) Lower priority popped: 124
|
|
1522
|
+
RCPQ(batch=8) Lower priority popped: 449
|
|
1523
|
+
RCPQ(batch=16) Lower priority popped: 1111
|
|
1524
|
+
RCPQ(batch=50) Lower priority popped: 3648
|
|
1525
|
+
|
|
1526
|
+
------ Size: 1048576 Get top: 1% (Num: 10485) ------
|
|
1527
|
+
FIFO Q Lower priority popped: 1038012
|
|
1528
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1529
|
+
RCPQ(batch=2) Lower priority popped: 297
|
|
1530
|
+
RCPQ(batch=8) Lower priority popped: 1241
|
|
1531
|
+
RCPQ(batch=16) Lower priority popped: 2489
|
|
1532
|
+
RCPQ(batch=50) Lower priority popped: 7764
|
|
1533
|
+
|
|
1534
|
+
------ Size: 1048576 Get top: 10% (Num: 104857) ------
|
|
1535
|
+
FIFO Q Lower priority popped: 943706
|
|
1536
|
+
RCPQ(strict) Lower priority popped: 0
|
|
1537
|
+
RCPQ(batch=2) Lower priority popped: 1984
|
|
1538
|
+
RCPQ(batch=8) Lower priority popped: 8150
|
|
1539
|
+
RCPQ(batch=16) Lower priority popped: 15787
|
|
1540
|
+
RCPQ(batch=50) Lower priority popped: 42778
|
|
1541
|
+
|
|
1542
|
+
The experiment was running on 1 NUMA node,
|
|
1543
|
+
which is 14 cores.
|
|
1544
|
+
|
|
1545
|
+
rchitecture: x86_64
|
|
1546
|
+
CPU op-mode(s): 32-bit, 64-bit
|
|
1547
|
+
Byte Order: Little Endian
|
|
1548
|
+
CPU(s): 56
|
|
1549
|
+
On-line CPU(s) list: 0-55
|
|
1550
|
+
Thread(s) per core: 2
|
|
1551
|
+
Core(s) per socket: 14
|
|
1552
|
+
Socket(s): 2
|
|
1553
|
+
NUMA node(s): 2
|
|
1554
|
+
Vendor ID: GenuineIntel
|
|
1555
|
+
CPU family: 6
|
|
1556
|
+
Model: 79
|
|
1557
|
+
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|
|
1558
|
+
Stepping: 1
|
|
1559
|
+
CPU MHz: 2401.000
|
|
1560
|
+
CPU max MHz: 2401.0000
|
|
1561
|
+
CPU min MHz: 1200.0000
|
|
1562
|
+
BogoMIPS: 4788.91
|
|
1563
|
+
Virtualization: VT-x
|
|
1564
|
+
L1d cache: 32K
|
|
1565
|
+
L1i cache: 32K
|
|
1566
|
+
L2 cache: 256K
|
|
1567
|
+
L3 cache: 35840K
|
|
1568
|
+
NUMA node0 CPU(s): 0-13,28-41
|
|
1569
|
+
NUMA node1 CPU(s): 14-27,42-55
|
|
1570
|
+
*/
|