TBB 4.1 commercial-aligned release (2012-07-18)

Changes (w.r.t. TBB 4.0 Update 5):

- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB
    on Microsoft* Windows*.
- parallel_deterministic_reduce template function is fully supported.
- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC
    and Intel(R) Compiler.
- C++11 std::make_exception_ptr is used where available, instead of
    std::copy_exception from earlier C++0x implementations.
- Improvements in the TBB allocator to reduce extra memory consumption.
- Partial refactoring of the task scheduler data structures.
- TBB examples allow more flexible specification of the thread number,
    including arithmetic and geometric progression.

Bugs fixed:

- On Linux & Mac OS* X, pre-built TBB binaries do not yet support exact
    exception propagation via C++11 exception_ptr. To prevent run time
    errors, by default TBB headers disable exact exception propagation
    even if the C++ implementation provides exception_ptr.

Community Preview Features:

- Added: class task_arena, for work submission by multiple application
    threads with thread-independent control of concurrency level.
- Added: task_scheduler_observer can be created as local to a master
    thread, to observe threads that work on behalf of that master.
    Local observers may have new on_scheduler_leaving() callback.
TBB 4.1 Update 1 commercial-aligned release (2012-10-03)

Changes (w.r.t. TBB 4.1):

- concurrent_vector class now supports initialization/assignment
    via C++11 initializer list feature (std::initializer_list<T>)
- Added implementation of the platform isolation layer based on
    Intel compiler atomic built-ins; it is supposed to work on
    any platform supported by compiler version 12.1 and newer.
- Using GetNativeSystemInfo() instead of GetSystemInfo() to support
    more than 32 processors for 32-bit applications under WOW64.
- The following form of parallel_for:
    parallel_for(first, last, [step,] f[, context]) now accepts an optional
    partitioner parameter after the function f.

Backward-incompatible API changes:

- The library no longer injects tuple in to namespace std.  In previous
    releases, tuple was injected into namespace std by flow_graph.h when
    std::tuple was not available.  In this release, flow_graph.h now uses
    tbb::flow::tuple.  On platforms where std::tuple is available,
    tbb::flow::tuple is typedef'ed to std::tuple.  On all other platforms,
    tbb::flow::tuple provides a subset of the functionality defined by
    std::tuple. Users of flow_graph.h may need to change their uses of
    std::tuple to tbb::flow::tuple to ensure compatibility with non-C++11
    compliant compilers.

Bugs fixed:

- Fixed local observer to be able to override propagated CPU state and
    to provide correct value of task_arena::current_slot() in callbacks.
TBB 4.1 Update 2 commercial-aligned release (2013-01-16)

Changes (w.r.t. TBB 4.1 Update 1):

- Objects up to 128 MB are now cached by the tbbmalloc. Previously
    the threshold was 8MB. Objects larger than 128 MB are still
    processed by direct OS calls.
- concurrent_unordered_multiset and concurrent_unordered_multimap
    have been added, based on Microsoft* PPL prototype.
- Ability to value-initialize a tbb::atomic<T> variable on construction
    in C++11, with const expressions properly supported.

Community Preview Features:

- Added a possibility to wait until all worker threads terminate.
    This is necessary before calling fork() from an application.

Bugs fixed:

- Fixed data race in tbbmalloc that might lead to memory leaks
    for large object allocations.
- Fixed task_arena::enqueue() to use task_group_context of target arena.
- Improved implementation of 64 bit atomics on ia32.
Intel TBB 4.1 Update 3 commercial-aligned release (2013-03-14)

TBB_INTERFACE_VERSION == 6103

Changes (w.r.t. Intel TBB 4.1 Update 2):

- Binary files for Android* applications were added to the Linux* OS
    package.
- Binary files for Windows Store* applications were added to the
    Windows* OS package.
- Exact exception propagation (exception_ptr) support on Linux OS is
    now turned on by default for GCC 4.4 and higher.
- Stopped implicit use of large memory pages by tbbmalloc (Linux-only).
    Now use of large pages must be explicitly enabled with
    scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES
    environment variable.

Community Preview Features:

- Extended class task_arena constructor and method initialize() to
    allow some concurrency to be reserved strictly for application
    threads.
- New methods terminate() and is_active() were added to class
    task_arena.

Bugs fixed:

- Fixed initialization of hashing helper constant in the hash
    containers.
- Fixed possible stalls in concurrent invocations of
    task_arena::execute() when no worker thread is available to make
    progress.

Open-source contributions integrated:

- The fix for the GUI examples on OS X* systems by Raf Schietekat.
- Moved some power-of-2 calculations to functions to improve readability
    by Raf Schietekat.
- C++11/Clang support improvements by arcata.
- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara
    (ARM).
Intel TBB 4.1 Update 4 commercial-aligned release (2013-06-13)

TBB_INTERFACE_VERSION == 6105

Changes (w.r.t. Intel TBB 4.1 Update 3):

- Use /volatile:iso option with VS 2012 to disable extended
    semantics for volatile variables.
- Various improvements in affinity_partitioner, scheduler,
    tests, examples, makefiles.
- Concurrent_priority_queue class now supports initialization/assignment
    via C++11 initializer list feature (std::initializer_list<T>).

Bugs fixed:

- Fixed more possible stalls in concurrent invocations of
    task_arena::execute(), especially waiting for enqueued tasks.
- Fixed requested number of workers for task_arena(P,0).
- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in
    case of using task_arena::enqueue() from a terminating thread.

Open-source contributions integrated:

- Type fixes, cleanups, and code beautification by Raf Schietekat.
- Improvements in atomic operations for big endian platforms
    by Raf Schietekat.
Intel TBB 4.2 commercial-aligned release (2013-07-25)

TBB_INTERFACE_VERSION == 7000

Changes (w.r.t. Intel TBB 4.1 Update 4):

- Added speculative_spin_mutex, which uses Intel(R) Transactional
    Synchronization Extensions when they are supported by hardware.
- Binary files linked with libc++ (the C++ standard library in Clang)
    were added on OS X*.
- For OS X* exact exception propagation is supported with Clang;
    it requires use of libc++ and corresponding Intel TBB binaries.
- Support for C++11 initilizer lists in constructor and assigment
    has been added to concurrent_hash_map, concurrent_unordered_set,
    concurrent_unordered_multiset, concurrent_unordered_map,
    concurrent_unordered_multimap.
- The memory allocator may now clean its per-thread memory caches
    when it cannot get more memory.
- Added the scalable_allocation_command() function for on-demand
    cleaning of internal memory caches.
- Reduced the time overhead for freeing memory objects smaller than ~8K.
- Simplified linking with the debug library for applications that use
    Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors.
    See an example in
    examples/GettingStarted/sub_string_finder/Makefile.
- Various improvements in source code, scripts and makefiles.

Changes affecting backward compatibility:

- tbb::flow::graph has been modified to spawn its tasks;
    the old behaviour (task enqueuing) is deprecated. This change may
    impact applications that expected a flow graph to make progress
    without calling wait_for_all(), which is no longer guaranteed. See
    the documentation for more details.
- Changed the return values of the scalable_allocation_mode() function.

Bugs fixed:

- Fixed a leak of parallel_reduce body objects when execution is
    cancelled or an exception is thrown, as suggested by Darcy Harrison.
- Fixed a race in the task scheduler which can lower the effective
    priority despite the existence of higher priority tasks.
- On Linux an error during destruction of the internal thread local
    storage no longer results in an exception.

Open-source contributions integrated:

- Fixed task_group_context state propagation to unrelated context trees
    by Raf Schietekat.
Intel TBB 4.2 Update 1 commercial-aligned release (2013-10-03)

TBB_INTERFACE_VERSION == 7001

Changes (w.r.t. TBB 4.2):

- Added project files for Microsoft* Visual Studio* 2010.
- Initial support of Microsoft* Visual Studio* 2013 Preview.
- Enable C++11 features available in Intel(R) C++ Compiler 14.0.
- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, <size>) can be
    used to urge releasing memory from tbbmalloc internal buffers when
    the given limit is exceeded.

Community Preview Features:

- Class task_arena no longer requires linking with a preview library,
    though still remains a community preview feature.
- The method task_arena::wait_until_empty() is removed.
- The method task_arena::current_slot() now returns -1 if the task scheduler
    is not initialized in the thread.

Changes affecting backward compatibility:

- Because of changes in internal layout of graph nodes, the namespace
    interface number of flow::graph has been incremented from 6 to 7.

Bugs fixed:

- Fixed a race in lazy initialization of task_arena.
- Fixed flow::graph::reset() to prevent situations where tasks would be
    spawned in the process of resetting the graph to its initial state.
- Fixed decrement bug in limiter_node.
- Fixed a race in arc deletion in the flow graph.

Open-source contributions integrated:

- Improved support for IBM* Blue Gene* by Raf Schietekat.