-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
1863 lines (1434 loc) · 74.4 KB
/
CHANGES
1
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
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
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
------------------------------------------------------------------------
The list of most significant changes made over time in
Intel(R) Threading Building Blocks (Intel(R) TBB).
------------------------------------------------------------------------
Intel TBB 4.3 Update 4
TBB_INTERFACE_VERSION == 8004
Changes (w.r.t. Intel TBB 4.3 Update 3):
- Added a C++11 variadic constructor for enumerable_thread_specific.
The arguments from this constructor are used to construct
thread-local values.
- Improved exception safety for enumerable_thread_specific.
- Added documentation for tbb::flow::tagged_msg class and
tbb::flow::output_port function.
- Fixed build errors for systems that do not support dynamic linking.
- C++11 move aware insert and emplace methods have been added to
concurrent unordered containers.
Preview Features:
- Interface-breaking change: typedefs changed for node predecessor and
successor lists, affecting copy_predecessors and copy_successors
methods.
- Added template class composite_node to the flow graph API. It packages
a subgraph to represent it as a first-class flow graph node.
- make_edge and remove_edge now accept multiport nodes as arguments,
automatically using the node port with index 0 for an edge.
Open-source contributions integrated:
- Draft code for enumerable_thread_specific constructor with multiple
arguments (see above) by Adrien Guinet.
- Fix for GCC invocation on IBM* Blue Gene*
by Jeff Hammond and Raf Schietekat.
- Extended testing with smart pointers for Clang & libc++
by Raf Schietekat.
------------------------------------------------------------------------
Intel TBB 4.3 Update 3
TBB_INTERFACE_VERSION == 8003
Changes (w.r.t. Intel TBB 4.3 Update 2):
- Move constructor and assignment operator were added to unique_lock.
Preview Features:
- Time overhead for memory pool destruction was reduced.
Open-source contributions integrated:
- Build error fix for iOS* by Raf Schietekat.
------------------------------------------------------------------------
Intel TBB 4.3 Update 2
TBB_INTERFACE_VERSION == 8002
Changes (w.r.t. Intel TBB 4.3 Update 1):
- Binary files for 64-bit Android* applications were added as part of the
Linux* OS package.
- Exact exception propagation is enabled for Intel C++ Compiler on OS X*.
- concurrent_vector::shrink_to_fit was optimized for types that support
C++11 move semantics.
Bugs fixed:
- Fixed concurrent unordered containers to insert elements much faster
in debug mode.
- Fixed concurrent priority queue to support types that do not have
copy constructors.
- Fixed enumerable_thread_specific to forbid copying from an instance
with a different value type.
Open-source contributions integrated:
- Support for PathScale* EKOPath* Compiler by Erik Lindahl.
------------------------------------------------------------------------
Intel TBB 4.3 Update 1
TBB_INTERFACE_VERSION == 8001
Changes (w.r.t. Intel TBB 4.3):
- The ability to split blocked_ranges in a proportion, used by
affinity_partitioner since version 4.2 Update 4, became a formal
extension of the Range concept.
- More checks for an incorrect address to release added to the debug
version of the memory allocator.
- Different kind of solutions for each TBB example were merged.
Preview Features:
- Task priorities are re-enabled in preview binaries.
Bugs fixed:
- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is
used in multiple compilation units.
- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04.
- Fixed a crash in memory release after dynamic replacement of the
OS X* memory allocator.
- Fixed incorrect indexing of arrays in seismic example.
- Fixed a data race in lazy initialization of task_arena.
Open-source contributions integrated:
- Fix for dumping information about gcc and clang compiler versions
by Misty De Meo.
------------------------------------------------------------------------
Intel TBB 4.3
TBB_INTERFACE_VERSION == 8000
Changes (w.r.t. Intel TBB 4.2 Update 5):
- The following features are now fully supported: flow::indexer_node,
task_arena, speculative_spin_rw_mutex.
- Compatibility with C++11 standard improved for tbb/compat/thread
and tbb::mutex.
- C++11 move constructors have been added to concurrent_queue and
concurrent_bounded_queue.
- C++11 move constructors and assignment operators have been added to
concurrent_vector, concurrent_hash_map, concurrent_priority_queue,
concurrent_unordered_{set,multiset,map,multimap}.
- C++11 move aware emplace/push/pop methods have been added to
concurrent_vector, concurrent_queue, concurrent_bounded_queue,
concurrent_priority_queue.
- Methods to insert a C++11 initializer list have been added:
concurrent_vector::grow_by(), concurrent_hash_map::insert(),
concurrent_unordered_{set,multiset,map,multimap}::insert().
- Testing for compatibility of containers with some C++11 standard
library types has been added.
- Dynamic replacement of standard memory allocation routines has been
added for OS X*.
- Microsoft* Visual Studio* projects for Intel TBB examples updated
to VS 2010.
- For open-source packages, debugging information (line numbers) in
precompiled binaries now matches the source code.
- Debug information was added to release builds for OS X*, Solaris*,
FreeBSD* operating systems and MinGW*.
- Various improvements in documentation, debug diagnostics and examples.
Preview Features:
- Additional actions on reset of graphs, and extraction of individual
nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES).
- Support for an arbitrary number of arguments in parallel_invoke
(TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE).
Changes affecting backward compatibility:
- For compatibility with C++11 standard, copy and move constructors and
assignment operators are disabled for all mutex classes. To allow
the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro.
- flow::sequencer_node rejects messages with repeating sequence numbers.
- Changed internal interface between tbbmalloc and tbbmalloc_proxy.
- Following deprecated functionality has been removed:
old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS;
no-op depth-related methods in class task;
tbb::deprecated::concurrent_queue;
deprecated variants of concurrent_vector methods.
- register_successor() and remove_successor() are deprecated as methods
to add and remove edges in flow::graph; use make_edge() and
remove_edge() instead.
Bugs fixed:
- Fixed incorrect scalable_msize() implementation for aligned objects.
- Flow graph buffering nodes now destroy their copy of forwarded items.
- Multiple fixes in task_arena implementation, including for:
inconsistent task scheduler state inside executed functions;
incorrect floating-point settings and exception propagation;
possible stalls in concurrent invocations of execute().
- Fixed floating-point settings propagation when the same instance of
task_group_context is used in different arenas.
- Fixed compilation error in pipeline.h with Intel Compiler on OS X*.
- Added missed headers for individual components to tbb.h.
Open-source contributions integrated:
- Range interface addition to parallel_do, parallel_for_each and
parallel_sort by Stephan Dollberg.
- Variadic template implementation of parallel_invoke
by Kizza George Mbidde (see Preview Features).
- Improvement in Seismic example for MacBook Pro* with Retina* display
by Raf Schietekat.
------------------------------------------------------------------------
Intel TBB 4.2 Update 5
TBB_INTERFACE_VERSION == 7005
Changes (w.r.t. Intel TBB 4.2 Update 4):
- The second template argument of class aligned_space<T,N> now is set
to 1 by default.
Preview Features:
- Better support for exception safety, task priorities and floating
point settings in class task_arena.
- task_arena::current_slot() has been renamed to
task_arena::current_thread_index().
Bugs fixed:
- Task priority change possibly ignored by a worker thread entering
a nested parallel construct.
- Memory leaks inside the task scheduler when running on
Intel(R) Xeon Phi(tm) coprocessor.
Open-source contributions integrated:
- Improved detection of X Window support for Intel TBB examples
and other feedback by Raf Schietekat.
------------------------------------------------------------------------
Intel TBB 4.2 Update 4
TBB_INTERFACE_VERSION == 7004
Changes (w.r.t. Intel TBB 4.2 Update 3):
- Added possibility to specify floating-point settings at invocation
of most parallel algorithms (including flow::graph) via
task_group_context.
- Added dynamic replacement of malloc_usable_size() under
Linux*/Android* and dlmalloc_usable_size() under Android*.
- Added new methods to concurrent_vector:
grow_by() that appends a sequence between two given iterators;
grow_to_at_least() that initializes new elements with a given value.
- Improved affinity_partitioner for better performance on balanced
workloads.
- Improvements in the task scheduler, including better scalability
when threads search for a task arena, and better diagnostics.
- Improved allocation performance for workloads that do intensive
allocation/releasing of same-size objects larger than ~8KB from
multiple threads.
- Exception support is enabled by default for 32-bit MinGW compilers.
- The tachyon example for Android* can be built for all targets
supported by the installed NDK.
- Added Windows Store* version of the tachyon example.
- GettingStarted/sub_string_finder example ported to offload execution
on Windows* for Intel(R) Many Integrated Core Architecture.
Preview Features:
- Removed task_scheduler_observer::on_scheduler_leaving() callback.
- Added task_scheduler_observer::may_sleep() callback.
- The CPF or_node has been renamed indexer_node. The input to
indexer_node is now a list of types. The output of indexer_node is
a tagged_msg type composed of a tag and a value. For indexer_node,
the tag is a size_t.
Bugs fixed:
- Fixed data races in preview extensions of task_scheduler_observer.
- Added noexcept(false) for destructor of task_group_base to avoid
crash on cancelation of structured task group in C++11.
Open-source contributions integrated:
- Improved concurrency detection for BG/Q, and other improvements
by Raf Schietekat.
- Fix for crashes in enumerable_thread_specific in case if a contained
object is too big to be constructed on the stack by Adrien Guinet.
------------------------------------------------------------------------
Intel TBB 4.2 Update 3
TBB_INTERFACE_VERSION == 7003
Changes (w.r.t. Intel TBB 4.2 Update 2):
- Added support for Microsoft* Visual Studio* 2013.
- Improved Microsoft* PPL-compatible form of parallel_for for better
support of auto-vectorization.
- Added a new example for cancellation and reset in the flow graph:
Kohonen self-organizing map (examples/graph/som).
- Various improvements in source code, tests, and makefiles.
Bugs fixed:
- Added dynamic replacement of _aligned_msize() previously missed.
- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling
exception if the specified task handle is already scheduled.
Open-source contributions integrated:
- A fix for ARM* processors by Steve Capper.
- Improvements in std::swap calls by Robert Maynard.
------------------------------------------------------------------------
Intel TBB 4.2 Update 2
TBB_INTERFACE_VERSION == 7002
Changes (w.r.t. Intel TBB 4.2 Update 1):
- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview.
- Added a test for compatibility of TBB containers with C++11
range-based for loop.
Changes affecting backward compatibility:
- Internal layout changed for class tbb::flow::limiter_node.
Preview Features:
- Added speculative_spin_rw_mutex, a read-write lock class which uses
Intel(R) Transactional Synchronization Extensions.
Bugs fixed:
- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs
no longer require explicit linking with librt and libpthread.
Open-source contributions integrated:
- Fixes for ARM* processors by Steve Capper, Leif Lindholm
and Steven Noonan.
- Support for Clang on Linux by Raf Schietekat.
- Typo correction in scheduler.cpp by Julien Schueller.
------------------------------------------------------------------------
Intel TBB 4.2 Update 1
TBB_INTERFACE_VERSION == 7001
Changes (w.r.t. Intel 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.
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.
------------------------------------------------------------------------
Intel TBB 4.2
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 initializer 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.1 Update 4
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.1 Update 3
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.
- Fixed incorrect calculation of hardware concurrency in the presence
of inactive processor groups, particularly on systems running
Windows* 8 and Windows* Server 2012.
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 2
TBB_INTERFACE_VERSION == 6102
Changes (w.r.t. Intel 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 1
TBB_INTERFACE_VERSION == 6101
Changes (w.r.t. Intel 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.
------------------------------------------------------------------------
Intel TBB 4.1
TBB_INTERFACE_VERSION == 6100
Changes (w.r.t. Intel 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 & 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.
------------------------------------------------------------------------
Intel TBB 4.0 Update 5
TBB_INTERFACE_VERSION == 6005
Changes (w.r.t. Intel TBB 4.0 Update 4):
- Parallel pipeline optimization (directly storing small objects in the
interstage data buffers) limited to trivially-copyable types for
C++11 and a short list of types for earlier compilers.
- _VARIADIC_MAX switch is honored for TBB tuple implementation
and flow::graph nodes based on tuple.
- Support of Cocoa framework was added to the GUI examples on OS X*
systems.
Bugs fixed:
- Fixed a tv_nsec overflow bug in condition_variable::wait_for.
- Fixed execution order of enqueued tasks with different priorities.
- Fixed a bug with task priority changes causing lack of progress
for fire-and-forget tasks when TBB was initialized to use 1 thread.
- Fixed duplicate symbol problem when linking multiple compilation
units that include flow_graph.h on VC 10.
------------------------------------------------------------------------
Intel TBB 4.0 Update 4
TBB_INTERFACE_VERSION == 6004
Changes (w.r.t. Intel TBB 4.0 Update 3):
- The TBB memory allocator transparently supports large pages on Linux.
- A new flow_graph example, logic_sim, was added.
- Support for DirectX* 9 was added to GUI examples.
Community Preview Features:
- Added: aggregator, a new concurrency control mechanism.
Bugs fixed:
- The abort operation on concurrent_bounded_queue now leaves the queue
in a reusable state. If a bad_alloc or bad_last_alloc exception is
thrown while the queue is recovering from an abort, that exception
will be reported instead of user_abort on the thread on which it
occurred, and the queue will not be reusable.
- Steal limiting heuristic fixed to avoid premature stealing disabling
when large amount of __thread data is allocated on thread stack.
- Fixed a low-probability leak of arenas in the task scheduler.
- In STL-compatible allocator classes, the method construct() was fixed
to comply with C++11 requirements.
- Fixed a bug that prevented creation of fixed-size memory pools
smaller than 2M.
- Significantly reduced the amount of warnings from various compilers.
Open-source contributions integrated:
- Multiple improvements by Raf Schietekat.
- Basic support for Clang on OS X* by Blas Rodriguez Somoza.
- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza
and Edward Lam.
------------------------------------------------------------------------
Intel TBB 4.0 Update 3
TBB_INTERFACE_VERSION == 6003
Changes (w.r.t. Intel TBB 4.0 Update 2):
- Modifications to the low-level API for memory pools:
added support for aligned allocations;
pool policies reworked to allow backward-compatible extensions;
added a policy to not return memory space till destruction;
pool_reset() does not return memory space anymore.
- Class tbb::flow::graph_iterator added to iterate over all nodes
registered with a graph instance.
- multioutput_function_node has been renamed multifunction_node.
multifunction_node and split_node are now fully-supported features.
- For the tagged join node, the policy for try_put of an item with
already existing tag has been defined: the item will be rejected.
- Matching the behavior on Windows, on other platforms the optional
shared libraries (libtbbmalloc, libirml) now are also searched
only in the directory where libtbb is located.
- The platform isolation layer based on GCC built-ins is extended.
Backward-incompatible API changes:
- a graph reference parameter is now required to be passed to the
constructors of the following flow graph nodes: overwrite_node,
write_once_node, broadcast_node, and the CPF or_node.
- the following tbb::flow node methods and typedefs have been renamed:
Old New
join_node and or_node:
inputs() -> input_ports()
input_ports_tuple_type -> input_ports_type
multifunction_node and split_node:
ports_type -> output_ports_type
Bugs fixed:
- Not all logical processors were utilized on systems with more than
64 cores split by Windows into several processor groups.
------------------------------------------------------------------------
Intel TBB 4.0 Update 2 commercial-aligned release
TBB_INTERFACE_VERSION == 6002
Changes (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):
- concurrent_bounded_queue now has an abort() operation that releases
threads involved in pending push or pop operations. The released
threads will receive a tbb::user_abort exception.
- Added Community Preview Feature: concurrent_lru_cache container,
a concurrent implementation of LRU (least-recently-used) cache.
Bugs fixed:
- fixed a race condition in the TBB scalable allocator.
- concurrent_queue counter wraparound bug was fixed, which occurred when
the number of push and pop operations exceeded ~>4 billion on IA32.
- fixed races in the TBB scheduler that could put workers asleep too
early, especially in presense of affinitized tasks.
------------------------------------------------------------------------
Intel TBB 4.0 Update 1 commercial-aligned release
TBB_INTERFACE_VERSION == 6000 (forgotten to increment)
Changes (w.r.t. Intel TBB 4.0 commercial-aligned release):
- Memory leaks fixed in binpack example.
- Improvements and fixes in the TBB allocator.
------------------------------------------------------------------------
Intel TBB 4.0 commercial-aligned release
TBB_INTERFACE_VERSION == 6000
Changes (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release):
- concurrent_priority_queue is now a fully supported feature.
Capacity control methods were removed.
- Flow graph is now a fully supported feature.
- A new memory backend has been implemented in the TBB allocator.
It can reuse freed memory for both small and large objects, and
returns unused memory blocks to the OS more actively.
- Improved partitioning algorithms for parallel_for and parallel_reduce
to better handle load imbalance.
- The convex_hull example has been refactored for reproducible
performance results.
- The major interface version has changed from 5 to 6.
Deprecated interfaces might be removed in future releases.
Community Preview Features:
- Added: serial subset, i.e. sequential implementations of TBB generic
algorithms (currently, only provided for parallel_for).
- Preview of new flow graph nodes:
or_node (accepts multiple inputs, forwards each input separately
to all successors),
split_node (accepts tuples, and forwards each element of a tuple
to a corresponding successor), and
multioutput_function_node (accepts one input, and passes the input
and a tuple of output ports to the function body to support outputs
to multiple successors).
- Added: memory pools for more control on memory source, grouping,
and collective deallocation.
------------------------------------------------------------------------
Intel TBB 3.0 Update 8 commercial-aligned release
TBB_INTERFACE_VERSION == 5008
Changes (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release):
- Task priorities become an official feature of TBB,
not community preview as before.
- Atomics API extended, and implementation refactored.
- Added task::set_parent() method.
- Added concurrent_unordered_set container.
Open-source contributions integrated:
- PowerPC support by Raf Schietekat.
- Fix of potential task pool overrun and other improvements
in the task scheduler by Raf Schietekat.
- Fix in parallel_for_each to work with std::set in Visual* C++ 2010.
Community Preview Features:
- Graph community preview feature was renamed to flow graph.
Multiple improvements in the implementation.
Binpack example was added for the feature.
- A number of improvements to concurrent_priority_queue.
Shortpath example was added for the feature.
- TBB runtime loaded functionality was added (Windows*-only).
It allows to specify which versions of TBB should be used,
as well as to set directories for the library search.
- parallel_deterministic_reduce template function was added.
------------------------------------------------------------------------
Intel TBB 3.0 Update 7 commercial-aligned release
TBB_INTERFACE_VERSION == 5006 (forgotten to increment)
Changes (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):
- Added implementation of the platform isolation layer based on
GCC atomic built-ins; it is supposed to work on any platform
where GCC has these built-ins.
Community Preview Features:
- Graph's dining_philosophers example added.
- A number of improvements to graph and concurrent_priority_queue.
------------------------------------------------------------------------
Intel TBB 3.0 Update 6 commercial-aligned release
TBB_INTERFACE_VERSION == 5006
Changes (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release):
- Added Community Preview feature: task and task group priority, and
Fractal example demonstrating it.
- parallel_pipeline optimized for data items of small and large sizes.
- Graph's join_node is now parametrized with a tuple of up to 10 types.
- Improved performance of concurrent_priority_queue.
Open-source contributions integrated:
- Initial NetBSD support by Aleksej Saushev.
Bugs fixed:
- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime
library, and a crash caused by invoking the interoperability layer
after one of the libraries was unloaded.
- Data race that could result in concurrent_unordered_map structure
corruption after call to clear() method.
- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel
compiler on Linux.
- Inconsistency of exception propagation mode possible when application
built with Microsoft* Visual Studio* 2008 or earlier uses TBB built
with Microsoft* Visual Studio* 2010.
- Affinitizing master thread to a subset of available CPUs after TBB
scheduler was initialized tied all worker threads to the same CPUs.
- Method is_stolen_task() always returned 'false' for affinitized tasks.
- write_once_node and overwrite_node did not immediately send buffered
items to successors
------------------------------------------------------------------------
Intel TBB 3.0 Update 5 commercial-aligned release
TBB_INTERFACE_VERSION == 5005
Changes (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release):
- Added Community Preview feature: graph.
- Added automatic propagation of master thread FPU settings to
TBB worker threads.
- Added a public function to perform a sequentially consistent full
memory fence: tbb::atomic_fence() in tbb/atomic.h.
Bugs fixed:
- Data race that could result in scheduler data structures corruption
when using fire-and-forget tasks.
- Potential referencing of destroyed concurrent_hash_map element after
using erase(accessor&A) method with A acquired as const_accessor.
- Fixed a correctness bug in the convex hull example.
Open-source contributions integrated:
- Patch for calls to internal::atomic_do_once() by Andrey Semashev.
------------------------------------------------------------------------
Intel TBB 3.0 Update 4 commercial-aligned release
TBB_INTERFACE_VERSION == 5004
Changes (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):
- Added Community Preview feature: concurrent_priority_queue.
- Fixed library loading to avoid possibility for remote code execution,
see http://www.microsoft.com/technet/security/advisory/2269637.mspx.
- Added support of more than 64 cores for appropriate Microsoft*
Windows* versions. For more details, see
http://msdn.microsoft.com/en-us/library/dd405503.aspx.
- Default number of worker threads is adjusted in accordance with
process affinity mask.
Bugs fixed:
- Calls of scalable_* functions from inside the allocator library
caused issues if the functions were overridden by another module.
- A crash occurred if methods run() and wait() were called concurrently
for an empty tbb::task_group (1736).
- The tachyon example exhibited build problems associated with
bug 554339 on Microsoft* Visual Studio* 2010. Project files were
modified as a partial workaround to overcome the problem. See
http://connect.microsoft.com/VisualStudio/feedback/details/554339.
------------------------------------------------------------------------
Intel TBB 3.0 Update 3 commercial-aligned release
TBB_INTERFACE_VERSION == 5003
Changes (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release):
- cache_aligned_allocator class reworked to use scalable_aligned_malloc.
- Improved performance of count() and equal_range() methods
in concurrent_unordered_map.
- Improved implementation of 64-bit atomic loads and stores on 32-bit
platforms, including compilation with VC 7.1.
- Added implementation of atomic operations on top of OSAtomic API
provided by OS X*.
- Removed gratuitous try/catch blocks surrounding thread function calls
in tbb_thread.
- Xcode* projects were added for sudoku and game_of_life examples.
- Xcode* projects were updated to work without TBB framework.
Bugs fixed:
- Fixed a data race in task scheduler destruction that on rare occasion
could result in memory corruption.
- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).
Open-source contributions integrated:
- MinGW-64 basic support by brsomoza (partially).
- Patch for atomic.h by Andrey Semashev.
- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.
- Various improvements by Raf Schietekat.
------------------------------------------------------------------------
Intel TBB 3.0 Update 2 commercial-aligned release
TBB_INTERFACE_VERSION == 5002
Changes (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release):
- Destructor of tbb::task_group class throws missing_wait exception
if there are tasks running when it is invoked.
- Interoperability layer with Intel Cilk Plus runtime library added
to protect TBB TLS in case of nested usage with Intel Cilk Plus.
- Compilation fix for dependent template names in concurrent_queue.
- Memory allocator code refactored to ease development and maintenance.
Bugs fixed:
- Improved interoperability with other Intel software tools on Linux in
case of dynamic replacement of memory allocator (1700)
- Fixed install issues that prevented installation on
Mac OS* X 10.6.4 (1711).
------------------------------------------------------------------------
Intel TBB 3.0 Update 1 commercial-aligned release
TBB_INTERFACE_VERSION == 5000 (forgotten to increment)
Changes (w.r.t. Intel TBB 3.0 commercial-aligned release):
- Decreased memory fragmentation by allocations bigger than 8K.
- Lazily allocate worker threads, to avoid creating unnecessary stacks.
Bugs fixed:
- TBB allocator used much more memory than malloc (1703) - see above.
- Deadlocks happened in some specific initialization scenarios
of the TBB allocator (1701, 1704).
- Regression in enumerable_thread_specific: excessive requirements
for object constructors.
- A bug in construction of parallel_pipeline filters when body instance
was a temporary object.
- Incorrect usage of memory fences on PowerPC and XBOX360 platforms.
- A subtle issue in task group context binding that could result
in cancelation signal being missed by nested task groups.
- Incorrect construction of concurrent_unordered_map if specified
number of buckets is not power of two.
- Broken count() and equal_range() of concurrent_unordered_map.
- Return type of postfix form of operator++ for hash map's iterators.
------------------------------------------------------------------------
Intel TBB 3.0 commercial-aligned release
TBB_INTERFACE_VERSION == 5000
Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):
- All open-source-release changes down to TBB 2.2 U3 below
were incorporated into this release.
------------------------------------------------------------------------
20100406 open-source release
Changes (w.r.t. 20100310 open-source release):
- Added support for Microsoft* Visual Studio* 2010, including binaries.
- Added a PDF file with recommended Design Patterns for TBB.
- Added parallel_pipeline function and companion classes and functions
that provide a strongly typed lambda-friendly pipeline interface.
- Reworked enumerable_thread_specific to use a custom implementation of
hash map that is more efficient for ETS usage models.
- Added example for class task_group; see examples/task_group/sudoku.
- Removed two examples, as they were long outdated and superceded:
pipeline/text_filter (use pipeline/square);
parallel_while/parallel_preorder (use parallel_do/parallel_preorder).
- PDF documentation updated.
- Other fixes and changes in code, tests, and examples.
Bugs fixed:
- Eliminated build errors with MinGW32.
- Fixed post-build step and other issues in VS projects for examples.
- Fixed discrepancy between scalable_realloc and scalable_msize that
caused crashes with malloc replacement on Windows.
------------------------------------------------------------------------
20100310 open-source release
Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):
- Version macros changed in anticipation of a future release.
- Directory structure aligned with Intel(R) C++ Compiler;
now TBB binaries reside in <arch>/<os_key>/[bin|lib]
(in TBB 2.x, it was [bin|lib]/<arch>/<os_key>).
- Visual Studio projects changed for examples: instead of separate set
of files for each VS version, now there is single 'msvs' directory
that contains workspaces for MS C++ compiler (<example>_cl.sln) and
Intel C++ compiler (<example>_icl.sln). Works with VS 2005 and above.
- The name versioning scheme for backward compatibility was improved;
now compatibility-breaking changes are done in a separate namespace.
- Added concurrent_unordered_map implementation based on a prototype
developed in Microsoft for a future version of PPL.
- Added PPL-compatible writer-preference RW lock (reader_writer_lock).
- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names
implemented in TBB into namespace std.
- Added almost-C++0x-compatible std::condition_variable, plus a bunch
of other C++0x classes required by condition_variable.