Skip to content

Releases: bloomberg/quantum

v2.2 Release

14 Apr 16:48
09990a1
Compare
Choose a tag to compare

Description

  • Added json schema for the sequencer configuration. #148
  • Fix validity check on generic futures when they are default constructed. #147
  • Added compile test for the Promise constructor. #146
  • Added support for Promise in the GenericFuture constructor. #145
  • Allow generic futures to be accessed from coroutines and threads interchangeably. #144
  • Refactored GenericFuture class using variants. Provide runtime checks. #142
  • Fixed some header includes. #140
  • Ensure coroutine stack size is a multiple of page size. #139
  • Alloc coroutine stacks with MMAP. #138
  • Ensure Sequencer returns success when running tasks. #137
  • Prevent some compiler optimizations. #136
  • Ensure proper catch/re-throw of coroutine stack unwind exceptions. #135
  • ReadWriteLock upgradeToWrite fix for simultaneous upgrades. #134
  • Added support for DeferLock in Mutex and SpinLock classes. #133
  • Return error if drain fails. #132
  • Correctly set writer in ReadWriteMutex::tryUpgradeToWrite(). Add tests. #131
  • Fixed assert statement in SpinLock::lock(). #130
  • Updated ReadWriteSpinlock to be atomically upgrade-able from Reader to Writer. Created LockTraits. #129
  • Catch the right coroutine unwind exception. Terminate all coroutines on the same thread which started them. #128
  • SpinLock improvements and TaskId. #127
  • Changed default infinite timeout to be -1 instead of 0. Updated ConditionVariable::waitFor() to match more closely the STL behavior. #126
  • Added varargs to support non-default-constructible types in the Promise class. #125
  • Use mutable temporary duration for ConditionVariable::waitFor(). #124

v2.1 Release

04 Nov 16:17
0e38871
Compare
Choose a tag to compare

Description

  • Added Travis tests for C++17 and upgraded to Ubuntu bionic distro for all tests. PR#122.
  • Allow access to the coroutine context from within any function call and added GenericFuture util class. PR#117.
  • Added coroutine local storage (similar to thread local storage which cannot be used in certain modes such as coroutine sharing). PR#103 and PR#115. Thanks @demin80.
  • Added drain functionality to the Sequencer class. PR#110
  • Named all threads running in Quantum. PR#100
  • Added shared coroutine mode which allows coroutines published to the any queue to be shared among all threads. This essentially allows a coroutine to run (suspend and resume) on different threads giving increased performance. Usage of thread_local should not be made in this mode. PR#96. Thanks @demin80.
  • Added QUANTUM_EXPORT_PKGCONFIG and QUANTUM_EXPORT_CMAKE_CONFIG to control the creation of config files. PR#99.
  • Generate QuantumConfig.cmake, QuantumTargets.cmake and QuantumConfigVersion.cmake files which are exported in the default location ${CMAKE_INSTALL_PREFIX}/share/cmake/Quantum. This location can now be overwritten via QUANTUM_CMAKE_CONFIG_DIR. Export Quantum::quantum target which can be imported by 3rd-party projects and applications. PR#97.
  • Switch to using steady_clock for time interval measurements. PR#95
  • Implement ReadWriteSpinLock. PR#90
  • Reduce contention on the run queue and added AllocatorTraits::ioQueueListAllocSize() to control the pre-allocation buffers. PR#87

API changes

  • V1 and V2 apis are now merged. V1 API is overloaded to take V2 signatures as well. PR#114 and PR#116.
  • Automatically deduce return type for all invokable functions. PR#106
  • Added support for compile-time determination of multiple function args. PR#107

Fixes

  • Added move semantics to the Quantum::Promise class. PR#118
  • Fix drain issue when last coroutine is still running. PR#113
  • Check for buffer validity in ContiguousPoolManager and fixed move constructor for HeapPoolAllocator. PR#112
  • Fixed memory leaks in the ContiguousPoolManager as well as Quantum::Function class. PR#104
  • Fixed INTERFACE_SOURCES target property as it was hard-coded to what's generated in the build server. Once installed it would not longer point to the proper file. PR#100
  • Changed empty condition signal to be under queue lock. PR#93
  • Removed boost dependency from pkg_config file. PR#89

v2.0.1 Release

14 May 15:12
906e18d
Compare
Choose a tag to compare

Description

Includes PR#85 which fixes issues with package config file generation.

v2.0 Release

13 May 20:08
2db8e21
Compare
Choose a tag to compare

Description

This is an API breaking release - see warnings below

  • Added support for the V2 coroutine API which simplifies coroutine signatures and makes conversion from a regular function to a coroutine seamless, especially for async IO where no changes are needed! Both V1 (original) and V2 APIS can be used concurrently.
  • Sequencer::post() and Sequencer::postAll() functions are now called Sequencer::enqueue() and Sequencer::enqueueAll(). This is needed because Sequencer::post() is calling the new post2() API underneath and it would cause too much confusion. Also first parameter in the passed-in functor has changed from CoroContextPtr<int> to VoidContextPtr. warning
  • Functors passed-in inside forEach()/forEachBatch()/mapReduce()/mapReduceBatch() now take an additional first parameter VoidContextPtr. This is to allow creating other coroutines or yielding which was not possible before. See documentation for details. warning
  • Internal allocator improvements.
  • Support for _GLIBCXX_USE_CXX11_ABI macro when determining if std::list::size() is linear or constant.
  • Rethrowing const boost::coroutines2::detail::forced_unwind exception to allow proper coroutine stack unwind in certain situations.
  • Added support for Boost segmented stacks and protected stacks.
  • New macros for enabling various stacks at compile-time: __QUANTUM_BOOST_USE_SEGMENTED_STACKS , __QUANTUM_BOOST_USE_PROTECTED_STACKS and __QUANTUM_BOOST_USE_FIXEDSIZE_STACKS .
  • Deprecation of __QUANTUM_USE_BOOST_CORO_ALLOCATOR . warning
  • Removal of old quantum::Dispatcher constructor which did not take a configuration object. warning

v1.2 Release

26 Mar 20:44
c09f840
Compare
Choose a tag to compare

Minor cmake changes mainly to avoid pre-build step. As a result the src directory was renamed quantum.

v1.1 Release

19 Mar 19:03
9febf23
Compare
Choose a tag to compare

This release does not contain any source code changes.

Description

  • Updated header file guards to include full namespace
  • Flattened quantum/src/quantum/* to quantum/src/*
  • Updated Doxygen API documentation

Note: If the include path to the user application was pointing directly to the quantum/src source directory, the code will no longer compile. Instead, the recommended way is to make install and to include the install directory in your -I include path.

v1.0 First release

19 Mar 13:40
f94148a
Compare
Choose a tag to compare

Description

  • This release contains the main functionality of the quantum coroutine dispatcher.
  • Sequencer util class for scheduling work items in parallel, which are then serialized within each parallel stream based on a user-specified sequenceId.