Commit b206109d authored by Graham Inggs's avatar Graham Inggs

Imported Upstream version 4.0+r233

parent 405e2845
TBB 4.0 commercial-aligned release
Changes (w.r.t. TBB 3.0 Update 8 commercial-aligned release):
- concurrent_priority_queue is now a supported feature. Capacity
control methods were removed.
- Flow graph is now a supported feature of TBB,
rather than being a community preview feature.
- A new memory backend has been implemented in the TBB allocator.
It can return small memory blocks to the OS and thus later reuse
that memory for large object allocation.
- Improved partitioning algorithms for parallel_for and parallel_reduce
to better handle load imbalance.
- The convex_hull example has been refactored to produce 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 Community Preview Feature: serial subset of TBB for modeling
a sequential execution of a parallel algorithm. This release introduces
serial parallel_for.
- Added Community Preview Feature: or_node (accepts multiple inputs,
forwarding each input separately to successors), split_node (accepts
tuples, and forwards each element 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 Community Preview Feature: Scalable Memory Pools (more control on
memory source, grouping, collective deallocatation).
TBB 3.0 Update 8 commercial-aligned release
Changes (w.r.t. 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 of the feature was added.
- A number of improvements to concurrent_priority_queue.
Shortpath example was added for the feature.
- TBB runtime loaded functionality was added (Windows*-only).
This allows set exact versions of TBB library to be used in run-time,
while setting directories for the library search.
- parallel_deterministic_reduce template function was added.
TBB 3.0 Update 7 commercial-aligned release
Changes (w.r.t. 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
TBB 3.0 Update 6 commercial-aligned release
Changes (w.r.t. TBB 3.0 Update 5 commercial-aligned release):
......@@ -14,11 +92,11 @@ Open-source contributions integrated:
Bugs fixed:
- Failure to locate Cilk runtime library to enable Cilk/TBB interop.
- 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.
- Crash caused by invoking Cilk/TBB interop after one of the libraries
is unloaded.
- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel
compiler on Linux.
- Inconsistency of exception propagation mode possible when application
......@@ -115,8 +193,8 @@ Changes (w.r.t. 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.
- Cilk-TBB interop layer added to protect TBB TLS in case of
"Cilk-TBB-Cilk nesting" usage model.
- 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.
......@@ -1056,4 +1134,7 @@ Packaging:
are provided separately on Intel(R) Premier.
Intel and Cilk are registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.
......@@ -26,15 +26,15 @@
include $(tbb_root)/build/
.PHONY: default all tbb tbbmalloc test examples
.PHONY: default all tbb tbbmalloc tbbproxy test examples
#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.tmp
#According to documentation submakes should run in parallel
.NOTPARALLEL: tbb tbbmalloc
.NOTPARALLEL: tbb tbbmalloc tbbproxy
default: tbb tbbmalloc
default: tbb tbbmalloc $(if $(use_proxy),tbbproxy)
all: tbb tbbmalloc test examples
all: tbb tbbmalloc tbbproxy test examples
tbb: mkdir
$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbb cfg=debug tbb_root=$(tbb_root)
......@@ -44,7 +44,11 @@ tbbmalloc: mkdir
$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc tbb_root=$(tbb_root)
$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc tbb_root=$(tbb_root)
test: tbb tbbmalloc
tbbproxy: mkdir
$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy tbb_root=$(tbb_root)
$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy tbb_root=$(tbb_root)
test: tbb tbbmalloc $(if $(use_proxy),tbbproxy)
-$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test tbb_root=$(tbb_root)
-$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.test cfg=debug tbb_root=$(tbb_root)
-$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test tbb_root=$(tbb_root)
......@@ -24,7 +24,7 @@
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.
tbb_root ?= $(TBB30_INSTALL_DIR)
tbb_root ?= $(TBBROOT)
include $(tbb_root)/build/
......@@ -60,7 +60,7 @@ ifeq (linux,$(tbb_os))
RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) semaphore_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
ifeq ($(cfg),debug)
......@@ -28,7 +28,7 @@
# Define rules for making the TBB shared library.
tbb_root ?= "$(TBB30_INSTALL_DIR)"
tbb_root ?= "$(TBBROOT)"
include $(tbb_root)/build/
DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
......@@ -73,6 +73,7 @@ TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
condition_variable.$(OBJ) \
tbb_thread.$(OBJ) \
concurrent_monitor.$(OBJ) \
semaphore.$(OBJ) \
private_server.$(OBJ) \
rml_tbb.$(OBJ) \
task_group_context.$(OBJ) \
......@@ -27,7 +27,7 @@
# default target
default_malloc: malloc malloc_test
tbb_root ?= $(TBB30_INSTALL_DIR)
tbb_root ?= $(TBBROOT)
include $(tbb_root)/build/
......@@ -131,7 +131,8 @@ MALLOC_MAIN_TESTS = test_ScalableAllocator.$(TEST_EXT) \
test_ScalableAllocator_STL.$(TEST_EXT) \
test_malloc_compliance.$(TEST_EXT) \
test_malloc_regression.$(TEST_EXT) \
test_malloc_init_shutdown.$(TEST_EXT) \
MALLOC_OVERLOAD_TESTS = test_malloc_overload.$(TEST_EXT) test_malloc_overload_proxy.$(TEST_EXT) test_malloc_atexit.$(TEST_EXT)
MALLOC_LIB = $(call cross_suffix,$(MALLOC.LIB))
......@@ -175,7 +176,10 @@ MALLOC_TESTS += $(MALLOC_OVERLOAD_TESTS) test_malloc_lib_unload.$(TEST_EXT)
# run_cmd is usually empty
malloc_test: $(call cross_suffix,$(MALLOC.DLL)) $(TEST_PREREQUISITE) $(MALLOC_TESTS)
malloc_test: $(call cross_suffix,$(MALLOC.DLL)) malloc_test_no_depends
malloc_test_no_depends: $(TEST_PREREQUISITE) $(MALLOC_TESTS)
$(run_cmd) ./test_malloc_pools.$(TEST_EXT) $(args) 1:4
$(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args)
$(run_cmd) ./test_malloc_lib_unload.$(TEST_EXT) $(args)
# Copyright 2005-2011 Intel Corporation. All Rights Reserved.
# This file is part of Threading Building Blocks.
# Threading Building Blocks is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
# Threading Building Blocks is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Threading Building Blocks; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# As a special exception, you may use this file as part of a free software
# library without restriction. Specifically, if other files instantiate
# templates or use macros or inline functions from this file, or you compile
# this file and link it with other files to produce an executable, this
# file does not by itself cause the resulting executable to be covered by
# the GNU General Public License. This exception does not however
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.
# default target
default_tbbproxy: tbbproxy tbbproxy_test
tbb_root ?= $(TBBROOT)
include $(tbb_root)/build/
DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
PROXY_ROOT ?= $(tbb_root)/src/tbbproxy
VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
CPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir))
include $(tbb_root)/build/
# Define rules for making the TBB Proxy static library.
# Object files that make up TBB Proxy
PROXY_CPLUS.OBJ = tbbproxy.$(OBJ)
PROXY_ASM.OBJ = tbbproxy-asm.$(OBJ)
# Not using intrinsics prevents undesired dependence from ICL libraries (e.g. libirc).
# Not using default libs prevents link issues caused by different CRT versions in tbbproxy and in an app.
$(PROXY_CPLUS.OBJ): %.$(OBJ): %.cpp
tbbproxy-asm.$(ASMEXT) : tbbproxy-$(tbb_os).$(ASMEXT) $(TBB.LST) $(TBB-OBJECTS.LST)
.PHONY: tbbproxy
ifeq (windows,$(tbb_os))
tbbproxy: $(PROXY.LIB)
# End of rules for making the TBB Proxy static library
# Define rules for making the TBB Proxy unit tests
add_debug=$(basename $(1))_debug$(suffix $(1))
cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
PROXY_LIB = $(call cross_suffix,$(PROXY.LIB))
PROXY_TESTS_SRCS = test_runtime_loader.cpp
# Run rules.
.PHONY: tbbproxy_test
ifeq (windows,$(tbb_os))
tbbproxy_test: $(call cross_suffix,$(PROXY.LIB)) $(TEST_PREREQUISITE) $(PROXY_TESTS_EXES)
$(run_cmd) ./test_runtime_loader.$(TEST_EXT) $(args)
# Link rules.
# Compilation rules.
$(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp
# End of rules for making the TBB Proxy unit tests
# Include automatically generated dependences
-include *.d
......@@ -31,7 +31,7 @@
default: test_tbb_plain test_tbb_old
tbb_root ?= $(TBB30_INSTALL_DIR)
tbb_root ?= $(TBBROOT)
include $(tbb_root)/build/
......@@ -44,11 +44,17 @@ DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))
VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/rml/client $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf
ifdef use_proxy
include $(tbb_root)/build/
# Rule for generating executable test
%.$(TEST_EXT): %.$(OBJ) $(TBB.LIB)
%.$(TEST_EXT): %.$(OBJ) $(TBB.LIB) $(if $(use_proxy),$(LINK_TBB.LIB))
# Rules for generating a test DLL
......@@ -57,9 +63,9 @@ include $(tbb_root)/build/
.PRECIOUS: %_dll.$(OBJ) %_dll.$(DLL)
# Rules for the tests, which use TBB in a dynamically loadable library
test_model_plugin.$(TEST_EXT): CPLUS_FLAGS := $(CPLUS_FLAGS:$(USE_PROXY_FLAG)=)
test_model_plugin.$(TEST_EXT): test_model_plugin.$(OBJ) test_model_plugin_dll.$(DLL)
test_cilk_dynamic_load.$(TEST_EXT): test_cilk_dynamic_load.$(OBJ) test_cilk_dynamic_load_dll.$(DLL)
......@@ -142,8 +148,8 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT) \
test_combinable.$(TEST_EXT) \
test_task_auto_init.$(TEST_EXT) \
test_concurrent_monitor.$(TEST_EXT) \
semaphore.$(OBJ) \
test_critical_section.$(TEST_EXT) \
test_semaphore.$(TEST_EXT) \
test_reader_writer_lock.$(TEST_EXT) \
test_tbb_condition_variable.$(TEST_EXT) \
test_intrusive_list.$(TEST_EXT) \
......@@ -151,12 +157,12 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT) \
test_cilk_dynamic_load.$(TEST_EXT) \
test_concurrent_priority_queue.$(TEST_EXT) \
test_task_priority.$(TEST_EXT) \
test_faf_task.$(TEST_EXT) \
test_task_enqueue.$(TEST_EXT) \
test_hw_concurrency.$(TEST_EXT) \
test_fp.$(TEST_EXT) \
test_flow_graph.$(TEST_EXT) \
test_broadcast_node.$(TEST_EXT) \
test_continue_node.$(TEST_EXT) \
test_executable_node.$(TEST_EXT) \
test_function_node.$(TEST_EXT) \
test_limiter_node.$(TEST_EXT) \
test_join_node.$(TEST_EXT) \
......@@ -167,7 +173,11 @@ TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT) \