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 @@
tbb_root?=.
include $(tbb_root)/build/common.inc
.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)
BUILDING_PHASE=1
TEST_RESOURCE = $(RML.RES)
include $(tbb_root)/build/common.inc
......@@ -60,7 +60,7 @@ ifeq (linux,$(tbb_os))
RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
endif
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)
TBB_DEP_RML_TEST= $(RML_ASM.OBJ)
ifeq ($(cfg),debug)
......
......@@ -28,7 +28,7 @@
# Define rules for making the TBB shared library.
#------------------------------------------------------------------------------
tbb_root ?= "$(TBB30_INSTALL_DIR)"
tbb_root ?= "$(TBBROOT)"
BUILDING_PHASE=1
include $(tbb_root)/build/common.inc
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)
BUILDING_PHASE=1
TEST_RESOURCE = $(MALLOC.RES)
include $(tbb_root)/build/common.inc
......@@ -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)
test_malloc_init_shutdown.$(TEST_EXT) \
test_malloc_pools.$(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)
endif
# 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
ifneq (,$(MALLOCPROXY.DLL))
$(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
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# 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)
BUILDING_PHASE=1
include $(tbb_root)/build/common.inc
DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
PROXY_ROOT ?= $(tbb_root)/src/tbbproxy
PROXY_SOURCE_ROOT ?= $(PROXY_ROOT)
VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
VPATH += $(PROXY_ROOT) $(PROXY_SOURCE_ROOT)
CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DLL_NAME=$(TBB.DLL)
CPLUS_FLAGS += $(DEFINE_KEY)__TBB_LST=$(TBB.LST)
CPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir))
CPLUS_FLAGS += $(PIC_KEY)
include $(tbb_root)/build/common_rules.inc
#------------------------------------------------------
# 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)
PROXY.OBJ := $(PROXY_CPLUS.OBJ) $(PROXY_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.OBJ): CPLUS_FLAGS += $(DEFINE_KEY)ARCH_$(arch) $(DEFINE_KEY)OS_$(tbb_os) $(NOINTRINSIC_KEY) $(NODEFAULTLIB_KEY)
$(PROXY_CPLUS.OBJ): %.$(OBJ): %.cpp
$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $<
$(PROXY.LIB): $(PROXY.OBJ)
$(AR) $(AR_FLAGS) $(AR_OUTPUT_KEY)$@ $^
.PRECIOUS : %.$(ASMEXT)
tbbproxy-asm.$(ASMEXT) : tbbproxy-$(tbb_os).$(ASMEXT) $(TBB.LST) $(TBB-OBJECTS.LST)
$(CPLUS) $(PREPROC_ONLY) $< $(INCLUDES) $(CPLUS_FLAGS) > $@
.PHONY: tbbproxy
ifeq (windows,$(tbb_os))
tbbproxy: $(PROXY.LIB)
else
tbbproxy:
endif
#------------------------------------------------------
# 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
PROXY_TESTS_OBJS = $(PROXY_TESTS_SRCS:.cpp=.$(OBJ))
PROXY_TESTS_EXES = $(PROXY_TESTS_OBJS:.$(OBJ)=.$(TEST_EXT))
# 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)
else
tbbproxy_test:
endif
# Link rules.
$(PROXY_TESTS_EXES): %.$(TEST_EXT): %.$(OBJ) $(PROXY_LIB)
$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(PROXY_LIB) $(LIBS) $(LIBDL) $(LINK_FLAGS)
# Compilation rules.
$(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp
$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(OUTPUT_KEY)$@ $<
#------------------------------------------------------
# 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)
BUILDING_PHASE=1
TEST_RESOURCE = $(TBB.RES)
include $(tbb_root)/build/common.inc
......@@ -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
CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1)
ifdef use_proxy
USE_PROXY_FLAG = $(DEFINE_KEY)HARNESS_USE_PROXY
CPLUS_FLAGS += $(USE_PROXY_FLAG)
LINK_TBB.LIB = $(PROXY.LIB)
LIBS += $(LIBDL)
endif
include $(tbb_root)/build/common_rules.inc
# Rule for generating executable test
%.$(TEST_EXT): %.$(OBJ) $(TBB.LIB)
%.$(TEST_EXT): %.$(OBJ) $(TBB.LIB) $(if $(use_proxy),$(LINK_TBB.LIB))
$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBS) $(AUX_LIBS) $(LINK_FLAGS)
# Rules for generating a test DLL
......@@ -57,9 +63,9 @@ include $(tbb_root)/build/common_rules.inc
.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)
$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LIBDL) $(LIBS) $(LINK_FLAGS)
test_cilk_dynamic_load.$(TEST_EXT): test_cilk_dynamic_load.$(OBJ) test_cilk_dynamic_load_dll.$(DLL)
$(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(LINK_TBB.LIB) $(LIBDL) $(LIBS) $(LINK_FLAGS)
......@@ -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) \