CHANGELOG.md 11.9 KB
Newer Older
1
Embedded Multicore Building Blocks (EMB²)
2 3
=========================================

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

Version 0.4.0
-------------

### Features:
  - Added C++ wrapper and tests for logging facilities

### Changes and improvements:
* Base:
  - Changed assertions on user input into checks with error code return
  - Improved checks and documentation in time, duration, and log
  - Added exceptions when errors occur that depend on user input
  - Added volatile keyword to member of internal atomic struct
  - Changed spin lock implementaion to yield every 1024 spins
* MTAPI:
  - Created defines for MTAPI version
  - Added missing fields in mtapi_info_t structure, in particular organization ID
  - Changed reporting of number of domains and nodes to "unlimited"
  - Changed group deleted and task state attributes to atomic
  - Enabled reuse of main thread, which is configurable via node attributes
  - Set result to MTAPI_NULL on error in mtapi_group_wait_any
  - Network plugin:
    - Disabled adress reuse for listening socket
	- Solved problem with port reuse on Linux
    - Set values to zero on failure for buffer pop operations
	- Improved protocol for better error handling
	- Changed signaling of task completion to atomic
	- Introduced tagging of operations
	- Improved task cancellation support
	- Changed sending of result messages to complete ones only
* Tasks:
  - Added function to query the maximum number of queues
  - Added function to query the task limit
  - Changed initalization in the implementaion of ExecutionPolicy
  - Made creation of groups and queues thread-safe as documented
* Dataflow:
  - Added connection chain test
  - Added connection checks in outputs
  - Added check for cycles in graph
  - Added default token count to network
  - Changed internal exceptions to assertions
  - Changed return type of operator >> to allow for connection chains
  - Changed semantics of source process (emit tokens only if function returns true)
  - Changed initalization so that the number of slices can now be set at runtime
  - Added automatic computation of maximum number of slices
  - Changed done sync to atomics
  - Removed Network::Make for simpler usage
  - Added Network:IsValid to check network for errors
* Containers:
  - Added missing PT_ASSERT calls in hazard pointer test
* All:
  - Resolved several Codesonar warnings

### Bug fixes:
* Base:
  - Fixed uninitialized variables in failure cases
  - Changed implementation of atomic store on Windows to ensure sequential consistency
  - Fixed memory leak in test for thread-specific storage
* MTAPI:
  - Fixed bug causing mtapi_task_wait to hang when a task was cancelled before it was running
  - Fixed potential null pointer dereferences
  - Fixed issue with AMD APP SDK in OpenCL plugin
  - Fixed race condition in OpenCL plugin
* Dataflow:
  - Fixed bug with global network instances in MTAPI scheduler
  - Fixed initalization of input
  - Fixed memory leaks
* Containers:
  - Fixed uninitialized variables in test

### Build system:
- Moved MTAPI plugins to folder mtapi_plugins_c
- Removed dependency on installed OpenCL SDK, adapted test to succeed when OpenCL is unavailable
- Resolved MSVC warnings and build problem

### Documentation:
- Changed documentation to reflect that atomics are initialized to zero by default
- Improved documentation for functions without error code return
- Updated year in license headers and tutorial
- Updated documentation of spinlock implementations
- Changed encoding of COPYING.md file to UTF-8
- Adapted tutorial and examples to reflect changes to dataflow_cpp
- Revised README.md to reflect new directory structure and removed UTF8 BOM


89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
Version 0.3.2
-------------

### Features:
- Added central spinlock implementation for C/C++ and removed existing (decentral) ones

### Changes and improvements:
- Reworked and optimized hazard pointer implementation
- Adjusted interfaces of value pool and object pool
- Replaced C style casts

### Bug fixes:
- Fixed ordering of destruction and deallocation in value pool
- Fixed potential use of uninitialized memory in WaitFreeArrayValuePool and LockFreeTreeValuePool

### Build system:
- Given user the ability to append compiler flags
- Let Cmake return an error on Doxygen warnings when WARNINGS_ARE_ERRORS is enabled
- Fixed cpplint warnings

### Documentation:
- Added mutex concept
- Corrected library ordering/names in README (section "Using the Library")
- Improved exception messages
- Fixed typos in condition_var_test.cc


116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
Version 0.3.1
-------------

### Features:
- None

### Changes and improvements:
- Removed one function argument from algorithms::Invoke
- Added "explicit" specifier to base type constructor of Atomic<BaseType*>
- Added "const" qualifier to dereference operator and member access operator of AtomicPointer<>
- Changed AtomicBase<>::CompareAndSwap to atomically return expected value
- Replaced constant in dataflow_cpp_test_simple.cc with corresponding macro
- Added initialization of atomic variable in hazard_pointer_test.cc to avoid warning with GCC 5.1
- Changed initial value of allocated_object_from_different_thread
- Added tests for ID Pool and check for memory leaks
- Updated unit test for the UniqueLock::Swap

### Bug fixes:
- Fixed implementation of ID pool (provided fewer elements than specified by capacity)
- Fixed unsigned overflow bug in timed wait function of condition variables
- Fixed implementation of UniqueLock::Swap

### Build system:
- Improved CMake output for automatic initialization option
- Fixed cpplint and unsigned/signed warnings

### Documentation:
- Fixed documentation of UniqueLock class
- Updated README file


147
Version 0.3.0
148 149
-------------

150
### Features:
151 152 153 154 155 156
* MTAPI:
  - Implemented action plugin API
  - Implemented load balancing for distributed/heterogeneous systems
  - Implemented OpenCL action plugin
  - Implemented network action plugin
  - Added support for distributed/heterogeneous systems
157 158

### Changes and improvements:
159
* Base:
160
    - Moved tick types to internal namespace and added duration typedefs
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
* MTAPI:
  - Added multi-instance task support and test
  - Improved notification of worker threads
  - Moved interface for homogeneous systems to tasks_cpp
* Algorithms:
  - Restricted partitioners to random access iterators
  - Added unit tests for partitioners on large ranges
  - Refactored to use tasks_cpp
* Dataflow:
  - Removed spinlocks
  - Simplified registration of processes (only sources need to be added)
  - Increased number of task queues in unit test
  - Added assertion in unit test
  - Improved exception handling
  - Removed stray include
  - Refactored to use tasks_cpp
177

178
### Bug fixes:
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
- Fixed unit test for dataflow_cpp
- Fixed wait-free SPSC queue

### Build system:
- Fixed compilation for newer CMake Versions (>= 3.1)
- Changed task test to avoid Jenkins timeout
- Changed CMakeLists to avoid error if policy is unknown
- Added mtapi_network_c and mtapi_opencl_c to root CMakeLists
- Added tasks_cpp to test scripts / batch file
- Fixed cpplint warnings

### Documentation:
- Extended tutorial and examples regarding support for distributed/heterogeneous systems including plugins and new task interface
- Added Doxygen documentation for mtapi_opencl_c and mtapi_network_c
- Added Doxygen documentation to mtapi_ext.h
- Updated README and removed limitation to homogeneous systems
- Added missing concurrency tags in mtapi_cpp


Version 0.2.3
-------------

### Features:
- None
203 204 205 206 207 208 209 210 211 212 213 214 215

### Changes and improvements:
- Changed use of partitioners in ForEach, Reduce, Scan, Count, and MergeSort
- Added guard definition to QuickSort and MergeSort requiring random access iterators as inputs
- Unified behavior of algorithms on empty input
- Cleaned up MergeSort and Scan
- Extended computation of number of cores to take into account affinities
- Changed MTAPI_CHECK_STATUS in examples to use exit() instead of abort()
- Added overload for std::exception::what() in embb::base::Exception
- Added missing include in execution_policy.cc
- Added tests for Thread::ID (base_cpp), ExecutionPolicy (mtapi_cpp), and error cases in mtapi_c
- Added tests on empty and negative input ranges in algorithms

216 217 218 219
### Bug fixes:
- Fixed freeing of temporary buffer in MergeSortAllocate
- Fixed minor bugs in mtapi_c
- Fixed paths in Doxyfile.in template
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236

### Build system:
- Added option to CMake to toggle automatic initialization of MTAPI C++ interface
- Changed run_tests_cygwin script to work with /bin/sh
- Modified create_tarball.sh script for completely automatic tarball creation
- Removed cppcheck warnings
- Removed cpplint warnings
- Updated partest

### Documentation:
- Added paragraphs in tutorial and README regarding performance impact of automatic initialization of MTAPI C++ interface
- Removed automatic collapsing of trees in Doxygen documentation due to incompatibility with latest versions of Doxygen
- Modified reference manual to consistently use function object concept
- Added description of default node attributes in mtapi_c and fixed typo in mtapi_cpp documentation
- Modified paragraph on documentation in README and fixed typo


237 238 239
Version 0.2.2
-------------

240 241
### Features:
- None
242 243 244 245 246 247 248 249 250 251 252 253

### Changes and improvements:
- Added checks for memory leaks in tests
- Added block size support in MergeSort
- Renamed all platform specific defines to EMBB_PLATFORM_*
- Changed all checks for platform specific defines to checks for EMBB_* defines
- Replaced C++11 initializer lists in examples with C++03 compliant statements
- Extended unit tests for MPMC queue with checks for relative order
- Added check for result of pthread_attr_destroy
- Added assert in embb_tss_get
- Moved ExecutionPolicy from algorithms to mtapi_cpp, removed Affinity

254 255 256 257 258 259 260 261 262 263 264
### Bug fixes:
- Fixed 64bit problem in atomics
- Fixed bug in dataflow_cpp causing network to hang
- Fixed bug in conversion of core_set
- Fixed fetch-and-add implementation to support armv7-a
- Fixed missing freeing of mutex attributes in case of error
- Fixed bug where closure was allocated with Allocation::New but deleted with operator delete
- Fixed inconsistent naming of unit test cases
- Fixed memory allocation in hazard pointer implementation by replacing calls to new and delete with EMB²-specific functions
- Fixed memory leak in tests for containers
- Fixed affinity implementation for FreeBSD
265 266 267 268 269 270 271 272

### Build system:
- Removed cppcheck warnings
- Removed cpplint warnings

### Documentation:
- Improved documentation of default values and priorities
- Revised template argument names in base_cpp and containers_cpp
273
- Moved ExecutionPolicy to CPP_MTAPI and Identity to CPP_ALGORITHMS Doxygen group
274 275 276 277 278 279 280 281 282
- Fixed description of token limit in tutorial
- Added Clang support to README
- Mentioned the ability to cross compile in README
- Added link to release files in README
- Minor corrections in README
- Updated copyright notice
- Changed year in tutorial.tex to 2015


283 284 285
Version 0.2.1
-------------

286 287 288 289 290 291
### Features:
- Added embb_core_count_available() implementation for FreeBSD.

### Changes and improvements:
- None

292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
### Bug fixes:
- Fixed implementation of atomic operations on ARM.
- Fixed bug in HelpScan routine of hazard pointer implementation.
- Replaced inclusion of non-standard header malloc.h with stdlib.h.

### Build system:
- Added initial support for Clang.
- Added initial support for Travis.
- Fixed "Policy CMP0026 is not set" warning of CMake >= 3.0.2.
- Made build independent of build-dir / source-dir location.
- Fixed remaining GCC, Clang, MSVC, and cpplint warnings.
- Replaced /bin/bash with /usr/bin/env bash in scripts.
- Added executable flag to shell scripts.
- Omitted Doxygen "Makefiles" from tarball.
- Included patchlevel in name of installation directory on Linux.
- Added LaTeX .bbl and .blg files to ignore list.

### Documentation:
- Updated README file, created CHANGELOG file, and added markdown support.
311
- Corrected license in COPYING file (BSD 2-clause).
312 313 314 315 316 317
- Changed default Doxygen level for API to two.
- Added check for Doxyfile.in (if not present, do not add Doxygen target).
- Added PDF image of building blocks and updated tutorial.tex.
- Fixed typos and wording.


318 319 320 321
Version 0.2.0
-------------

- Initial version of open source release