diff --git a/CHANGES b/CHANGES index 5105e3c143..2a02117f02 100644 --- a/CHANGES +++ b/CHANGES @@ -2,13 +2,34 @@ The list of most significant changes made over time in Intel(R) Threading Building Blocks (Intel(R) TBB). +Intel TBB 2019 Update 3 +TBB_INTERFACE_VERSION == 11003 + +Changes (w.r.t. Intel TBB 2019 Update 2): + +- Added tbb::transform_iterator. +- Added new Makefile target 'profile' to flow graph examples enabling + additional support for Intel(R) Parallel Studio XE tools. +- Added TBB_MALLOC_DISABLE_REPLACEMENT environment variable to switch off + dynamic memory allocation replacement on Windows*. Inspired by + a contribution from Edward Lam. + +Preview Features: + +- Extended flow graph API to support relative priorities for functional + nodes, specified as an optional parameter to the node constructors. + +Open-source contributions integrated: + +- Enabled using process-local futex operations + (https://github.com/01org/tbb/pull/58) by Andrey Semashev. + +------------------------------------------------------------------------ Intel TBB 2019 Update 2 TBB_INTERFACE_VERSION == 11002 Changes (w.r.t. Intel TBB 2019 Update 1): -- Added constructors with HashCompare argument to concurrent_hash_map - (https://github.com/01org/tbb/pull/63). - Added overloads for parallel_reduce with default partitioner and user-supplied context. - Added deduction guides for tbb containers: concurrent_vector, @@ -25,6 +46,11 @@ Bugs fixed: - Fixed compilation of task_group.h when targeting macOS* 10.11 or earlier (https://github.com/conda-forge/tbb-feedstock/issues/42). +Open-source contributions integrated: + +- Added constructors with HashCompare argument to concurrent_hash_map + (https://github.com/01org/tbb/pull/63) by arewedancer. + ------------------------------------------------------------------------ Intel TBB 2019 Update 1 TBB_INTERFACE_VERSION == 11001 @@ -44,7 +70,7 @@ Bugs fixed: - Fixed an issue with dynamic memory allocation replacement on Windows* occurred for some versions of ucrtbase.dll. - Fixed possible deadlock in tbbmalloc cleanup procedure during process - shutdown. + shutdown. Inspired by a contribution from Edward Lam. - Fixed usage of std::uncaught_exception() deprecated in C++17 (https://github.com/01org/tbb/issues/67). - Fixed a crash when a local observer is activated after an arena @@ -55,6 +81,11 @@ Bugs fixed: libraries. - Fixed compilation for Anaconda environment with GCC 7.3 and higher. +Open-source contributions integrated: + +- Fix various warnings when building with Visual C++ + (https://github.com/01org/tbb/pull/70) by Edward Lam. + ------------------------------------------------------------------------ Intel TBB 2019 TBB_INTERFACE_VERSION == 11000 diff --git a/README.md b/README.md index 4a9d1bd35f..8189669956 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Threading Building Blocks 2019 Update 2 -[![Stable release](https://img.shields.io/badge/version-2019_U2-green.svg)](https://github.com/01org/tbb/releases/tag/2019_U2) +# Threading Building Blocks 2019 Update 3 +[![Stable release](https://img.shields.io/badge/version-2019_U3-green.svg)](https://github.com/01org/tbb/releases/tag/2019_U3) [![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](LICENSE) Threading Building Blocks (TBB) lets you easily write parallel C++ programs that take @@ -21,7 +21,9 @@ Please report issues and suggestions via [TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/). ## How to Contribute -Please, read the instructions on the official [TBB open source site](https://www.threadingbuildingblocks.org/submit-contribution). +To contribute to TBB, please open a GitHub pull request (preferred) or send us a patch by e-mail. +Threading Building Blocks is licensed under [Apache License, Version 2.0](LICENSE). +By its terms, contributions submitted to the project are also done under that license. ## Engineering team contacts * [E-mail us.](mailto:inteltbbdevelopers@intel.com) diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc index 01214fd06a..c147568be8 100644 --- a/build/Makefile.tbbmalloc +++ b/build/Makefile.tbbmalloc @@ -143,6 +143,7 @@ MALLOC_TESTS = test_ScalableAllocator.$(TEST_EXT) \ ifneq (,$(MALLOCPROXY.DLL)) MALLOC_TESTS += test_malloc_overload.$(TEST_EXT) \ test_malloc_overload_proxy.$(TEST_EXT) \ + test_malloc_overload_disable.$(TEST_EXT) \ test_malloc_atexit.$(TEST_EXT) \ test_malloc_new_handler.$(TEST_EXT) endif @@ -236,6 +237,7 @@ ifneq (,$(MALLOCPROXY.DLL)) $(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args) $(run_cmd) $(TEST_LAUNCHER) -l $(MALLOCPROXY.DLL) ./test_malloc_overload.$(TEST_EXT) $(args) $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_overload_proxy.$(TEST_EXT) $(args) + $(run_cmd) ./test_malloc_overload_disable.$(TEST_EXT) $(args) $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_new_handler.$(TEST_EXT) $(args) endif $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_lib_unload.$(TEST_EXT) $(args) diff --git a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj index 9e28b39399..9ff1086cd4 100644 --- a/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj +++ b/examples/GettingStarted/sub_string_finder/xcode/sub_string_finder.xcodeproj/project.pbxproj @@ -8,16 +8,39 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* sub_string_finder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sub_string_finder.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */; }; - A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; A1F594270B8F1F8100073279 /* sub_string_finder_extended.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F594260B8F1F8100073279 /* sub_string_finder_extended.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5894D218B576600DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C5894E218B57EA00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C5894F218B581400DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -25,7 +48,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -35,7 +57,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F594160B8F1E8000073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -45,7 +66,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F594250B8F1F6800073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -54,7 +74,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* sub_string_finder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* sub_string_finder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder.cpp; path = ../sub_string_finder.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; A1F5940A0B8F1D8E00073279 /* sub_string_finder_pretty */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_pretty; sourceTree = BUILT_PRODUCTS_DIR; }; A1F594110B8F1E0C00073279 /* sub_string_finder_pretty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sub_string_finder_pretty.cpp; path = ../sub_string_finder_pretty.cpp; sourceTree = SOURCE_ROOT; }; A1F5941B0B8F1F0900073279 /* sub_string_finder_extended */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sub_string_finder_extended; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -66,7 +85,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -74,7 +92,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F594130B8F1E1700073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -82,7 +99,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F594240B8F1F5F00073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -93,7 +109,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = sub_string_finder; @@ -119,14 +134,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -139,6 +146,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5894F218B581400DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -157,6 +165,7 @@ A1F594140B8F1E2D00073279 /* CopyFiles */, ); buildRules = ( + C3C5894E218B57EA00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -174,6 +183,7 @@ A1F5941D0B8F1F2D00073279 /* CopyFiles */, ); buildRules = ( + C3C5894D218B576600DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -188,7 +198,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */; compatibilityVersion = "Xcode 3.2"; @@ -221,7 +231,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A1F594120B8F1E0C00073279 /* sub_string_finder_pretty.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -236,84 +245,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder; ZERO_LINK = NO; }; @@ -322,15 +265,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder; ZERO_LINK = NO; }; @@ -340,19 +281,58 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -360,161 +340,118 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; - A1F5940D0B8F1DB600073279 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder_pretty; - ZERO_LINK = NO; - }; - name = Debug; - }; A1F5940E0B8F1DB600073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder_pretty; ZERO_LINK = NO; }; name = Debug64; }; - A1F5940F0B8F1DB600073279 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder_pretty; - ZERO_LINK = NO; - }; - name = Release; - }; A1F594100B8F1DB600073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder_pretty; ZERO_LINK = NO; }; name = Release64; }; - A1F594200B8F1F4E00073279 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder_extended; - ZERO_LINK = NO; - }; - name = Debug; - }; A1F594210B8F1F4E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder_extended; ZERO_LINK = NO; }; name = Debug64; }; - A1F594220B8F1F4E00073279 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = sub_string_finder_extended; - ZERO_LINK = NO; - }; - name = Release; - }; A1F594230B8F1F4E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = sub_string_finder_extended; ZERO_LINK = NO; }; @@ -526,46 +463,38 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "sub_string_finder" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sub_string_finder" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; A1F5940C0B8F1DB600073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_pretty" */ = { isa = XCConfigurationList; buildConfigurations = ( - A1F5940D0B8F1DB600073279 /* Debug */, A1F5940E0B8F1DB600073279 /* Debug64 */, - A1F5940F0B8F1DB600073279 /* Release */, A1F594100B8F1DB600073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; A1F5941F0B8F1F4E00073279 /* Build configuration list for PBXNativeTarget "sub_string_finder_extended" */ = { isa = XCConfigurationList; buildConfigurations = ( - A1F594200B8F1F4E00073279 /* Debug */, A1F594210B8F1F4E00073279 /* Debug64 */, - A1F594220B8F1F4E00073279 /* Release */, A1F594230B8F1F4E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/common/index.html b/examples/common/index.html index 95ab1d5249..6e9398a72f 100644 --- a/examples/common/index.html +++ b/examples/common/index.html @@ -341,7 +341,7 @@

Intel® Threading Building Blocks.
Common source code fo
utility
Common driver and utility code for examples. Currently provides:
    -
  • class FastRandom - a random number generator that uses linear congruental method +
  • class FastRandom - a random number generator that uses linear congruential method (fast_random.h)
  • class thread_number_range - a class to specify the numbers of threads an example should use (utility.h) diff --git a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj index 1b90bf71a6..44900a5f96 100644 --- a/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj +++ b/examples/concurrent_hash_map/count_strings/xcode/count_strings.xcodeproj/project.pbxproj @@ -8,10 +8,20 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* count_strings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* count_strings.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5894B218B547B00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,7 +29,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -28,7 +37,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* count_strings */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = count_strings; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* count_strings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = count_strings.cpp; path = ../count_strings.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = count_strings; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5894B218B547B00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */; compatibilityVersion = "Xcode 3.2"; @@ -134,84 +133,17 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = count_strings; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = count_strings; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = count_strings; ZERO_LINK = NO; }; @@ -220,15 +152,12 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = count_strings; ZERO_LINK = NO; }; @@ -238,19 +167,60 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +228,58 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +289,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "count_strings" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "count_strings" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj b/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj index 0b5b8f9d30..4b26fb1514 100644 --- a/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj +++ b/examples/concurrent_priority_queue/shortpath/xcode/shortpath.xcodeproj/project.pbxproj @@ -7,11 +7,21 @@ objects = { /* Begin PBXBuildFile section */ - 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; - 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; 61C4771B13CE199D0022F8F6 /* shortpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61C4771A13CE199D0022F8F6 /* shortpath.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5894C218B560C00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,14 +29,12 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; 61C4771A13CE199D0022F8F6 /* shortpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shortpath.cpp; path = ../shortpath.cpp; sourceTree = ""; }; 8DD76F6C0486A84900D96B5E /* Shortpath */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Shortpath; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Shortpath; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 0E8A7310136F4A4600453C80 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5894C218B560C00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */; compatibilityVersion = "Xcode 3.2"; @@ -134,84 +133,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Shortpath; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Shortpath; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Shortpath; ZERO_LINK = NO; }; @@ -220,15 +153,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Shortpath; ZERO_LINK = NO; }; @@ -238,19 +169,58 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +228,56 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +287,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Shortpath" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "shortpath" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/binpack/Makefile b/examples/graph/binpack/Makefile index 7c03768cbb..e79459653d 100644 --- a/examples/graph/binpack/Makefile +++ b/examples/graph/binpack/Makefile @@ -46,6 +46,9 @@ release: *.cpp debug: *.cpp $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d diff --git a/examples/graph/binpack/Makefile.windows b/examples/graph/binpack/Makefile.windows index a7f53a39af..ebab52d4be 100644 --- a/examples/graph/binpack/Makefile.windows +++ b/examples/graph/binpack/Makefile.windows @@ -37,6 +37,8 @@ release: $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe debug: $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest test: diff --git a/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj index 58bde8e88f..5d282c4bde 100644 --- a/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj +++ b/examples/graph/binpack/xcode/binpack.xcodeproj/project.pbxproj @@ -7,11 +7,21 @@ objects = { /* Begin PBXBuildFile section */ - 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; - 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* libtbb.dylib */; }; A1F593A60B8F042A00073279 /* binpack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* binpack.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58950218B599300DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,14 +29,12 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - 0E8A7311136F4A4600453C80 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0E8A7310136F4A4600453C80 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; 8DD76F6C0486A84900D96B5E /* Binpack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Binpack; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* binpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = binpack.cpp; path = ../binpack.cpp; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0E8A7325136F4D3600453C80 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Binpack; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 0E8A7310136F4A4600453C80 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58950218B599300DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */; compatibilityVersion = "Xcode 3.2"; @@ -134,84 +133,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Binpack; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Binpack; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Binpack; ZERO_LINK = NO; }; @@ -220,15 +153,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Binpack; ZERO_LINK = NO; }; @@ -238,19 +169,57 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +227,55 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +285,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Binpack" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "binpack" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/cholesky/Makefile b/examples/graph/cholesky/Makefile index b2da85dd71..5f8b60e39e 100644 --- a/examples/graph/cholesky/Makefile +++ b/examples/graph/cholesky/Makefile @@ -29,7 +29,7 @@ endif # which icpc ifeq ($(shell uname), Darwin) override CXXFLAGS += -Wl,-rpath,$(TBBROOT)/lib -Wl,-rpath,$(MKLROOT)/lib # MKL support -override MKL_LIBS += -lmkl_core -lmkl_sequential -lmkl_intel +override MKL_LIBS += -lmkl_intel_lp64 -lmkl_sequential -lmkl_core else ifeq ($(shell uname), Linux) LIBS+= -lrt @@ -49,6 +49,9 @@ release: *.cpp debug: *.cpp $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(MKL_LIBS) $(LIBS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d diff --git a/examples/graph/cholesky/Makefile.windows b/examples/graph/cholesky/Makefile.windows index aeb3c7d2cc..d244a6ac11 100644 --- a/examples/graph/cholesky/Makefile.windows +++ b/examples/graph/cholesky/Makefile.windows @@ -41,6 +41,8 @@ release: compiler_check $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe debug: compiler_check $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: compiler_check + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(MKL_LIBS) $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest test: diff --git a/examples/graph/cholesky/readme.html b/examples/graph/cholesky/readme.html index f24f164be3..cb82eba310 100644 --- a/examples/graph/cholesky/readme.html +++ b/examples/graph/cholesky/readme.html @@ -383,7 +383,7 @@

    Intel® Threading Building Blocks.
    Cholesky sample


    size - the row/column size of NxN matrix (size <= 46000)
    blocksize - the block size; size must be a multiple of the blocksize
    num_trials - the number of times to run each algorithm -
    output_prefix - if provided the prefix will be preappended to output files: +
    output_prefix - if provided the prefix will be prepended to output files: output_prefix_posdef.txt and output_prefix_X.txt; where X is the algorithm used
    if output_prefix is not provided, no output will be written diff --git a/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj index 63a3b2cb54..6529166dba 100644 --- a/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj +++ b/examples/graph/cholesky/xcode/cholesky.xcodeproj/project.pbxproj @@ -9,10 +9,20 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* Cholesky.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Cholesky.cpp */; }; A1F593A60B8F053A00073279 /* init.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F053A00073279 /* init.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58951218B5ACC00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -20,7 +30,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -30,7 +39,6 @@ 8DD76F6C0486A84900D96B5E /* Cholesky */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Cholesky; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* Cholesky.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Cholesky.cpp; path = ../Cholesky.cpp; sourceTree = SOURCE_ROOT; }; A1F593A50B8F053A00073279 /* init.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = init.cpp; path = ../init.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -38,7 +46,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -49,7 +56,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Cholesky; @@ -72,14 +78,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -92,6 +90,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58951218B5ACC00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -107,7 +106,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "cholesky" */; compatibilityVersion = "Xcode 3.2"; @@ -138,84 +137,17 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Cholesky; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Cholesky; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Cholesky; ZERO_LINK = NO; }; @@ -224,15 +156,12 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Cholesky; ZERO_LINK = NO; }; @@ -242,19 +171,61 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /opt/intel/tbb/include, + /opt/intel/mkl/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib $(MKLROOT)/lib /opt/intel/mkl/lib"; + LIBRARY_SEARCH_PATHS = ( + /opt/intel/tbb/lib, + /opt/intel/mkl/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + "-lmkl_intel_lp64", + "-lmkl_sequential", + "-lmkl_core", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -262,19 +233,59 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /opt/intel/tbb/include, + /opt/intel/mkl/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib $(MKLROOT)/lib /opt/intel/mkl/lib"; + LIBRARY_SEARCH_PATHS = ( + /opt/intel/tbb/lib, + /opt/intel/mkl/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + "-lmkl_intel_lp64", + "-lmkl_sequential", + "-lmkl_core", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -284,24 +295,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Cholesky" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; - 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "Cholesky" */ = { + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "cholesky" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/dining_philosophers/Makefile b/examples/graph/dining_philosophers/Makefile index a095f24683..63d4273491 100644 --- a/examples/graph/dining_philosophers/Makefile +++ b/examples/graph/dining_philosophers/Makefile @@ -45,6 +45,9 @@ release: dining_philosophers.cpp debug: dining_philosophers.cpp $(CXX) -O0 -D_CONSOLE -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ -ltbb_debug $(LIBS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: rm -f $(PROG) *.o *.d diff --git a/examples/graph/dining_philosophers/Makefile.windows b/examples/graph/dining_philosophers/Makefile.windows index c69c58e673..6a3267b632 100644 --- a/examples/graph/dining_philosophers/Makefile.windows +++ b/examples/graph/dining_philosophers/Makefile.windows @@ -37,6 +37,8 @@ release: $(CXX) ./dining_philosophers.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe debug: $(CXX) ./dining_philosophers.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) ./dining_philosophers.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest test: diff --git a/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj index fc048821d8..83e626613e 100644 --- a/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj +++ b/examples/graph/dining_philosophers/xcode/dining_philosophers.xcodeproj/project.pbxproj @@ -8,10 +8,20 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* dining_philosophers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* dining_philosophers.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58955218B5FE200DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,7 +29,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -28,7 +37,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* dining_philosophers */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dining_philosophers; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* dining_philosophers.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dining_philosophers.cpp; path = ../dining_philosophers.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = dining_philosophers; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58955218B5FE200DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "dining_philosophers" */; compatibilityVersion = "Xcode 3.2"; @@ -134,83 +133,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = dining_philosophers; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = dining_philosophers; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", ); PRODUCT_NAME = dining_philosophers; ZERO_LINK = NO; @@ -220,14 +157,16 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", ); PRODUCT_NAME = dining_philosophers; ZERO_LINK = NO; @@ -238,19 +177,57 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +235,55 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +293,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "dining_philosophers" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "dining_philosophers" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/fgbzip2/Makefile b/examples/graph/fgbzip2/Makefile index bc602192d4..0b01b04829 100644 --- a/examples/graph/fgbzip2/Makefile +++ b/examples/graph/fgbzip2/Makefile @@ -45,6 +45,9 @@ release: debug: $(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS) $(CXX0XFLAGS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d *.bz2 diff --git a/examples/graph/fgbzip2/Makefile.windows b/examples/graph/fgbzip2/Makefile.windows index 8255a32a7a..e3a539d228 100644 --- a/examples/graph/fgbzip2/Makefile.windows +++ b/examples/graph/fgbzip2/Makefile.windows @@ -41,6 +41,9 @@ release: debug: $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest *.bz2 diff --git a/examples/graph/fgbzip2/readme.html b/examples/graph/fgbzip2/readme.html index 1ea4bdbb8f..0f3e9aff86 100644 --- a/examples/graph/fgbzip2/readme.html +++ b/examples/graph/fgbzip2/readme.html @@ -396,9 +396,9 @@

    Intel® Threading Building Blocks.
    fgbzip2 sample

    fgbzip2 -h
    Prints the help for command line options
    fgbzip2 [-b=value] [-v] [-l=value] [-a=value] [filename] -
    -b block size in 100 Kb chunks, [1 .. 9]
    +
    -b block size in 100 KB chunks, [1 .. 9]
    -v print diagnostic output to screen
    - -l used memory limit for compression algorithm with 1MB (minimum) granularity
    + -l used memory limit for compression algorithm with 1 MB (minimum) granularity
    -a name of the used graph async realization - can be async_node or async_msg
    filename name of the file to compress
    To run a short version of this example, e.g., for use with Intel® Parallel Inspector: diff --git a/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj index 399a4b8b11..dceabccdf1 100644 --- a/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj +++ b/examples/graph/fgbzip2/xcode/fgbzip2.xcodeproj/project.pbxproj @@ -8,8 +8,6 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* fgbzip2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* fgbzip2.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; EAA00DB11B443FB000A83D1A /* blocksort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D931B443FB000A83D1A /* blocksort.cpp */; }; EAA00DB31B443FB000A83D1A /* bzlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D961B443FB000A83D1A /* bzlib.cpp */; }; EAA00DB51B443FB000A83D1A /* compress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00D991B443FB000A83D1A /* compress.cpp */; }; @@ -19,6 +17,18 @@ EAA00DBE1B443FB000A83D1A /* randtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA00DAB1B443FB000A83D1A /* randtable.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58956218B620500DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -26,7 +36,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -35,7 +44,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* fgbzip2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fgbzip2; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* fgbzip2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fgbzip2.cpp; path = ../fgbzip2.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; EAA00D931B443FB000A83D1A /* blocksort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blocksort.cpp; path = ../blocksort.cpp; sourceTree = ""; }; EAA00D951B443FB000A83D1A /* bzlib_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bzlib_private.h; path = ../bzlib_private.h; sourceTree = ""; }; EAA00D961B443FB000A83D1A /* bzlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bzlib.cpp; path = ../bzlib.cpp; sourceTree = ""; }; @@ -52,7 +60,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -63,7 +70,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = fgbzip2; @@ -94,14 +100,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -114,6 +112,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58956218B620500DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -129,7 +128,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */; compatibilityVersion = "Xcode 3.2"; @@ -166,77 +165,150 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { + 1DEB923208733DC60010E9CD /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = fgbzip2; ZERO_LINK = NO; }; - name = Debug; + name = Debug64; }; - 1DEB923308733DC60010E9CD /* Release */ = { + 1DEB923308733DC60010E9CD /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = fgbzip2; ZERO_LINK = NO; }; - name = Release; + name = Release64; }; - 1DEB923608733DC60010E9CD /* Debug */ = { + 1DEB923608733DC60010E9CD /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; - name = Debug; + name = Debug64; }; - 1DEB923708733DC60010E9CD /* Release */ = { + 1DEB923708733DC60010E9CD /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; + GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = TBB_PREVIEW_FLOW_GRAPH_NODES; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; - name = Release; + name = Release64; }; /* End XCBuildConfiguration section */ @@ -244,20 +316,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "fgbzip2" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, - 1DEB923308733DC60010E9CD /* Release */, + 1DEB923208733DC60010E9CD /* Debug64 */, + 1DEB923308733DC60010E9CD /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fgbzip2" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, - 1DEB923708733DC60010E9CD /* Release */, + 1DEB923608733DC60010E9CD /* Debug64 */, + 1DEB923708733DC60010E9CD /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/logic_sim/Makefile b/examples/graph/logic_sim/Makefile index f42fad9d66..0a7d6f6cb0 100644 --- a/examples/graph/logic_sim/Makefile +++ b/examples/graph/logic_sim/Makefile @@ -45,6 +45,10 @@ release: *.cpp debug: *.cpp $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $(PROG).cpp -std=c++0x -ltbb_debug $(LIBS) + +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d diff --git a/examples/graph/logic_sim/Makefile.windows b/examples/graph/logic_sim/Makefile.windows index d0dcb43768..b7d25e137c 100644 --- a/examples/graph/logic_sim/Makefile.windows +++ b/examples/graph/logic_sim/Makefile.windows @@ -38,6 +38,9 @@ release: *.cpp debug: *.cpp $(CXX) $(PROG).cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: *.cpp + $(CXX) $(PROG).cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest diff --git a/examples/graph/matmult/Makefile b/examples/graph/matmult/Makefile index 163f0b46f4..413bab9f6c 100644 --- a/examples/graph/matmult/Makefile +++ b/examples/graph/matmult/Makefile @@ -44,6 +44,9 @@ release: debug: $(CXX) -O0 -g -DTBB_USE_DEBUG *.cpp $(CXXFLAGS) -o $(PROG) -ltbb_debug $(LIBS) $(CXX0XFLAGS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d diff --git a/examples/graph/matmult/Makefile.windows b/examples/graph/matmult/Makefile.windows index d6d5da28b8..e861145350 100644 --- a/examples/graph/matmult/Makefile.windows +++ b/examples/graph/matmult/Makefile.windows @@ -40,6 +40,9 @@ release: debug: $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe + clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest diff --git a/examples/graph/som/Makefile b/examples/graph/som/Makefile index 09135fc9c5..7312e071eb 100644 --- a/examples/graph/som/Makefile +++ b/examples/graph/som/Makefile @@ -50,6 +50,9 @@ endif debug: $(SRCFILES) $(CXX) -g -O0 -DTBB_USE_DEBUG -D_DEBUG $(CXXFLAGS) -o $(EXE) $(SRCFILES) -ltbb_debug -ltbbmalloc_debug $(LIBS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(EXE) *.o *.d diff --git a/examples/graph/som/Makefile.windows b/examples/graph/som/Makefile.windows index 70c65785c0..d0bfdc11b9 100644 --- a/examples/graph/som/Makefile.windows +++ b/examples/graph/som/Makefile.windows @@ -37,6 +37,8 @@ release: $(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe debug: $(CXX) ./som_graph.cpp ./som.cpp /MDd /Od /Zi /D _DEBUG $(MYCXXFLAGS) /link tbb_debug.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) ./som_graph.cpp ./som.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link tbb.lib $(LIBS) $(MYLDFLAGS) /OUT:$(PROG).exe clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest test: diff --git a/examples/graph/som/xcode/som.xcodeproj/project.pbxproj b/examples/graph/som/xcode/som.xcodeproj/project.pbxproj index aeb5256809..41fd598f01 100644 --- a/examples/graph/som/xcode/som.xcodeproj/project.pbxproj +++ b/examples/graph/som/xcode/som.xcodeproj/project.pbxproj @@ -9,10 +9,20 @@ /* Begin PBXBuildFile section */ 522FF8DD11F573FC00A587B2 /* som_graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DB11F573FC00A587B2 /* som_graph.cpp */; }; 522FF8DE11F573FC00A587B2 /* som.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 522FF8DC11F573FC00A587B2 /* som.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58957218B643900DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -20,7 +30,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -30,7 +39,6 @@ 522FF8DB11F573FC00A587B2 /* som_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som_graph.cpp; path = ../som_graph.cpp; sourceTree = SOURCE_ROOT; }; 522FF8DC11F573FC00A587B2 /* som.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = som.cpp; path = ../som.cpp; sourceTree = SOURCE_ROOT; }; 8DD76F6C0486A84900D96B5E /* som */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = som; sourceTree = BUILT_PRODUCTS_DIR; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -38,7 +46,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -49,7 +56,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = som; @@ -72,14 +78,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -92,6 +90,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58957218B643900DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -107,7 +106,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "som" */; compatibilityVersion = "Xcode 3.2"; @@ -138,87 +137,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = som; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = som; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = som; ZERO_LINK = NO; }; @@ -227,16 +157,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = som; ZERO_LINK = NO; }; @@ -246,19 +173,58 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -266,19 +232,56 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -288,24 +291,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "som" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "som" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/graph/stereo/Makefile b/examples/graph/stereo/Makefile index 67d90b967e..404dafa30e 100644 --- a/examples/graph/stereo/Makefile +++ b/examples/graph/stereo/Makefile @@ -59,6 +59,9 @@ release: *.cpp debug: *.cpp $(CXX) -O0 -g -DTBB_USE_DEBUG $(CXXFLAGS) -o $(PROG) $^ $(TBBLIB_DEBUG) $(OPENCL_LIB) $(LIBS) $(CXX0XFLAGS) +profile: override CXXFLAGS += -DTBB_USE_THREADING_TOOLS -g +profile: release + clean: $(RM) $(PROG) *.o *.d @@ -69,4 +72,3 @@ perf_build: release perf_run: $(run_cmd) ./$(PROG) $(PERF_RUN_ARGS) - diff --git a/examples/graph/stereo/Makefile.windows b/examples/graph/stereo/Makefile.windows index 0e6a02d067..032fa95dbe 100644 --- a/examples/graph/stereo/Makefile.windows +++ b/examples/graph/stereo/Makefile.windows @@ -44,6 +44,8 @@ release: $(CXX) *.cpp /MD /O2 /D NDEBUG $(MYCXXFLAGS) /link $(TBBLIB) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe debug: $(CXX) *.cpp /MDd /Od /Zi /D TBB_USE_DEBUG /D _DEBUG $(MYCXXFLAGS) /link $(TBBLIB_DEBUG) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe +profile: + $(CXX) *.cpp /MD /O2 /Zi /D NDEBUG $(MYCXXFLAGS) /D TBB_USE_THREADING_TOOLS /link $(TBBLIB) $(OPENCL_LIB) $(MYLDFLAGS) /OUT:$(PROG).exe clean: @cmd.exe /C del $(PROG).exe *.obj *.?db *.manifest test: diff --git a/examples/graph/stereo/imageEffects.cl b/examples/graph/stereo/imageEffects.cl index 841c922d00..7c77955e36 100644 --- a/examples/graph/stereo/imageEffects.cl +++ b/examples/graph/stereo/imageEffects.cl @@ -22,7 +22,7 @@ __constant int redChannelOffset = 0; __constant int greenChannelOffset = 1; __constant int blueChannelOffset = 2; __constant int channelsPerPixel = 4; -__constant int channelIncreaseValue = 10; +__constant uint channelIncreaseValue = 10; __kernel void mergeImages( __global uchar* bufferLeft, __global uchar* bufferRight, uint width) { const int indexWidth = get_global_id(0); @@ -42,7 +42,7 @@ __kernel void applyLeftImageEffect( __global uchar* bufferLeft, uint width) { const int pixelRedChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + redChannelOffset; - bufferLeft[pixelRedChannelIndex] += channelIncreaseValue; + bufferLeft[pixelRedChannelIndex] = convert_uchar_sat(bufferLeft[pixelRedChannelIndex] + channelIncreaseValue); } __kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) { @@ -51,6 +51,6 @@ __kernel void applyRightImageEffect( __global uchar* bufferRight, uint width) { const int pixelBlueChannelIndex = channelsPerPixel * width * indexHeight + channelsPerPixel * indexWidth + blueChannelOffset; - bufferRight[pixelBlueChannelIndex] += channelIncreaseValue; + bufferRight[pixelBlueChannelIndex] = convert_uchar_sat(bufferRight[pixelBlueChannelIndex] + channelIncreaseValue); } diff --git a/examples/graph/stereo/stereo.cpp b/examples/graph/stereo/stereo.cpp index a1c65915a8..44dfd53c26 100644 --- a/examples/graph/stereo/stereo.cpp +++ b/examples/graph/stereo/stereo.cpp @@ -43,7 +43,7 @@ static const int redChannelOffset = 0; static const int greenChannelOffset = 1; static const int blueChannelOffset = 2; static const int channelsPerPixel = 4; -static const int channelIncreaseValue = 10; +static const unsigned int channelIncreaseValue = 10; void applyLeftImageEffect(utils::image_buffer& image) { const int heighBase = channelsPerPixel * image.width; @@ -54,7 +54,8 @@ void applyLeftImageEffect(utils::image_buffer& image) { const int heightOffset = heighBase * y; for (unsigned int x = 0; x < image.width; x++) { int pixelOffset = heightOffset + channelsPerPixel * x + redChannelOffset; - buffer[pixelOffset] += channelIncreaseValue; + unsigned int pixelValue = buffer[pixelOffset] + channelIncreaseValue; + buffer[pixelOffset] = utils::convert_uchar_sat(pixelValue); } } } @@ -68,7 +69,8 @@ void applyRightImageEffect(utils::image_buffer& image) { const int heightOffset = heighBase * y; for (unsigned int x = 0; x < image.width; x++) { const int pixelOffset = heightOffset + channelsPerPixel * x + blueChannelOffset; - buffer[pixelOffset] += channelIncreaseValue; + unsigned int pixelValue = buffer[pixelOffset] + channelIncreaseValue; + buffer[pixelOffset] = utils::convert_uchar_sat(pixelValue); } } } diff --git a/examples/graph/stereo/utils.h b/examples/graph/stereo/utils.h index fad4ec8545..c99399fb7f 100644 --- a/examples/graph/stereo/utils.h +++ b/examples/graph/stereo/utils.h @@ -25,6 +25,10 @@ namespace utils { + inline unsigned char convert_uchar_sat(unsigned int v) { + return static_cast(v < UCHAR_MAX ? v : UCHAR_MAX); + } + struct image_buffer { unsigned int width, height; std::shared_ptr< std::vector > buffer; // smart pointer to the vector of raw pixels in RGBA format, 4 bytes per pixel diff --git a/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj index 865a22e3ab..820122d4c9 100644 --- a/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj +++ b/examples/graph/stereo/xcode/stereo.xcodeproj/project.pbxproj @@ -7,13 +7,23 @@ objects = { /* Begin PBXBuildFile section */ - 0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; }; - 0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */; }; 8415B6821CFC8B7F00A875B5 /* stereo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6801CFC8B7F00A875B5 /* stereo.cpp */; }; 8415B6881CFC8B9200A875B5 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8415B6851CFC8B9200A875B5 /* lodepng.cpp */; }; 8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8415B6891CFC96D900A875B5 /* OpenCL.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58958218B657900DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -21,18 +31,14 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - 0E8A7311136F4A4600453C80 /* ../../../../lib/libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; 8415B6801CFC8B7F00A875B5 /* stereo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stereo.cpp; path = ../stereo.cpp; sourceTree = ""; }; - 8415B6811CFC8B7F00A875B5 /* utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = utils.hpp; path = ../utils.hpp; sourceTree = ""; }; 8415B6831CFC8B9200A875B5 /* imageEffects.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = imageEffects.cl; path = ../imageEffects.cl; sourceTree = ""; }; - 8415B6841CFC8B9200A875B5 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = index.html; path = ../index.html; sourceTree = ""; }; 8415B6851CFC8B9200A875B5 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng.cpp; path = ../lodepng.cpp; sourceTree = ""; }; 8415B6861CFC8B9200A875B5 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lodepng.h; path = ../lodepng.h; sourceTree = ""; }; 8415B6891CFC96D900A875B5 /* OpenCL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenCL.framework; path = System/Library/Frameworks/OpenCL.framework; sourceTree = SDKROOT; }; @@ -45,7 +51,6 @@ buildActionMask = 2147483647; files = ( 8415B68A1CFC96D900A875B5 /* OpenCL.framework in Frameworks */, - 0E8A7325136F4D3600453C80 /* ../../../../lib/libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -57,7 +62,6 @@ children = ( 8415B6891CFC96D900A875B5 /* OpenCL.framework */, 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Stereo; @@ -67,11 +71,9 @@ isa = PBXGroup; children = ( 8415B6831CFC8B9200A875B5 /* imageEffects.cl */, - 8415B6841CFC8B9200A875B5 /* index.html */, 8415B6851CFC8B9200A875B5 /* lodepng.cpp */, 8415B6861CFC8B9200A875B5 /* lodepng.h */, 8415B6801CFC8B7F00A875B5 /* stereo.cpp */, - 8415B6811CFC8B7F00A875B5 /* utils.hpp */, ); name = Source; sourceTree = ""; @@ -84,14 +86,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 0E8A7310136F4A4600453C80 /* ../../../../lib/libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -104,6 +98,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58958218B657900DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -119,7 +114,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */; compatibilityVersion = "Xcode 3.2"; @@ -150,84 +145,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Stereo; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Stereo; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Stereo; ZERO_LINK = NO; }; @@ -236,15 +165,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Stereo; ZERO_LINK = NO; }; @@ -254,19 +181,60 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + "-framework", + OpenCL, + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -274,19 +242,58 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + "-framework", + OpenCL, + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -296,24 +303,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Stereo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "stereo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/index.html b/examples/index.html index d16455f73a..e9065fef33 100644 --- a/examples/index.html +++ b/examples/index.html @@ -500,6 +500,12 @@

    Intel® Threading Building Blocks Samples

    Compile and link against the release version of Intel TBB runtime library. The resulting executable is left in the directory for the example.
    make debug
    Compile and link against the debug version of Intel TBB runtime library. The resulting executable is left in the directory for the example. +
    make profile +
    Similar to 'make release' but also enables additional support for Intel® Parallel Studio XE analysis tools. +
    +
    + Note: Only flow graph examples are currently supported. +
    make test
    Run an executable previously produced by one of the above commands.
    make [(above options or targets)] CXX={icl, icc} diff --git a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj index 6773133b21..d3c8cb6aeb 100644 --- a/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj +++ b/examples/parallel_do/parallel_preorder/xcode/parallel_preorder.xcodeproj/project.pbxproj @@ -9,11 +9,21 @@ /* Begin PBXBuildFile section */ 05593AA80B8F55D500DE73AB /* Graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA40B8F55D500DE73AB /* Graph.cpp */; }; 05593AAB0B8F55D500DE73AB /* parallel_preorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; EAD808FA13051AB300FE8C7C /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAD808F913051AB300FE8C7C /* main.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58959218B66AC00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -21,7 +31,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -33,7 +42,6 @@ 05593AA60B8F55D500DE73AB /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = ../Matrix.h; sourceTree = SOURCE_ROOT; }; 05593AA70B8F55D500DE73AB /* parallel_preorder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = parallel_preorder.cpp; path = ../parallel_preorder.cpp; sourceTree = SOURCE_ROOT; }; 8DD76F6C0486A84900D96B5E /* parallel_preorder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = parallel_preorder; sourceTree = BUILT_PRODUCTS_DIR; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; EAD808F913051AB300FE8C7C /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -42,7 +50,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -53,7 +60,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = parallel_preorder; @@ -79,14 +85,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -99,6 +97,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58959218B66AC00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -114,7 +113,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */; compatibilityVersion = "Xcode 3.2"; @@ -146,84 +145,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = parallel_preorder; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = parallel_preorder; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = parallel_preorder; ZERO_LINK = NO; }; @@ -232,15 +165,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = parallel_preorder; ZERO_LINK = NO; }; @@ -250,19 +181,34 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -270,19 +216,32 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -292,24 +251,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "parallel_preorder" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "parallel_preorder" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj index 1c1cd6a822..cd8a515c5f 100644 --- a/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj +++ b/examples/parallel_for/game_of_life/xcode/game_of_life.xcodeproj/project.pbxproj @@ -10,10 +10,20 @@ 612CD8DD11F573FC00A587B2 /* Game_of_life.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DB11F573FC00A587B2 /* Game_of_life.cpp */; }; 612CD8DE11F573FC00A587B2 /* Update_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8DC11F573FC00A587B2 /* Update_state.cpp */; }; 612CD8E111F5742000A587B2 /* Evolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 612CD8E011F5742000A587B2 /* Evolution.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58967218C3E4A00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -21,7 +31,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -32,7 +41,6 @@ 612CD8DC11F573FC00A587B2 /* Update_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Update_state.cpp; path = ../src/Update_state.cpp; sourceTree = SOURCE_ROOT; }; 612CD8E011F5742000A587B2 /* Evolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Evolution.cpp; path = ../src/Evolution.cpp; sourceTree = SOURCE_ROOT; }; 8DD76F6C0486A84900D96B5E /* game_of_life */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = game_of_life; sourceTree = BUILT_PRODUCTS_DIR; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -40,7 +48,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -51,7 +58,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = game_of_life; @@ -75,14 +81,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -95,6 +93,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58967218C3E4A00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -110,7 +109,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */; compatibilityVersion = "Xcode 3.2"; @@ -142,87 +141,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = game_of_life; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = game_of_life; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = game_of_life; ZERO_LINK = NO; }; @@ -231,16 +161,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PREPROCESSOR_DEFINITIONS = _CONSOLE; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = game_of_life; ZERO_LINK = NO; }; @@ -250,19 +177,35 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -270,19 +213,33 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -292,24 +249,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "game_of_life" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "game_of_life" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj index 1b4eca95fb..b2b4b93e0b 100644 --- a/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj +++ b/examples/parallel_for/polygon_overlay/xcode/polygon_overlay.xcodeproj/project.pbxproj @@ -27,14 +27,20 @@ D31F32671C11DEF300A77D54 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; D31F32681C11DEF600A77D54 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32691C11DF1600A77D54 /* iOS.storyboard */; }; - D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326C1C11DF7C00A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; }; - D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; }; - D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32821C12DFDD00A77D54 /* libtbb.dylib */; }; - D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5897B2191EB8300DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXFileReference section */ 84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = ""; }; 84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = ""; }; @@ -61,10 +67,6 @@ 84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; D31F324B1C11DEC100A77D54 /* tbbExample.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tbbExample.ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; D31F32691C11DF1600A77D54 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = ""; }; - D31F326C1C11DF7C00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; - D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = ""; }; - D31F32821C12DFDD00A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = ""; }; - D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -73,9 +75,7 @@ buildActionMask = 2147483647; files = ( 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, - D31F32891C12E00100A77D54 /* libtbbmalloc.dylib in Frameworks */, 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, - D31F32881C12DFFA00A77D54 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -83,8 +83,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D31F328A1C12E07100A77D54 /* libtbb.dylib in Frameworks */, - D31F328B1C12E07100A77D54 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -154,10 +152,6 @@ 84D017541527431F0008A4E0 /* Frameworks */ = { isa = PBXGroup; children = ( - D31F326C1C11DF7C00A77D54 /* libtbb.dylib */, - D31F326D1C11DF7C00A77D54 /* libtbbmalloc.dylib */, - D31F32821C12DFDD00A77D54 /* libtbb.dylib */, - D31F32831C12DFDD00A77D54 /* libtbbmalloc.dylib */, 84D01775152744BD0008A4E0 /* OpenGL.framework */, 84D017551527431F0008A4E0 /* Cocoa.framework */, 84D017571527431F0008A4E0 /* Other Frameworks */, @@ -187,6 +181,7 @@ 84D0174F1527431F0008A4E0 /* Resources */, ); buildRules = ( + C3C5897B2191EB8300DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -219,7 +214,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = tbb; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 1000; TargetAttributes = { D31F324A1C11DEC100A77D54 = { CreatedOnToolsVersion = 7.1.1; @@ -261,8 +256,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D31F328D1C12E08900A77D54 /* libtbbmalloc.dylib in Resources */, - D31F328C1C12E08200A77D54 /* libtbb.dylib in Resources */, D31F326B1C11DF6000A77D54 /* iOS.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -320,22 +313,34 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 84D01770152743200008A4E0 /* Debug */ = { + 84D01770152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -345,95 +350,137 @@ "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + "-ltbbmalloc_debug", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Debug; + name = Debug64; }; - 84D01771152743200008A4E0 /* Release */ = { + 84D01771152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + "-ltbbmalloc", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Release; + name = Release64; }; - 84D01773152743200008A4E0 /* Debug */ = { + 84D01773152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.7; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84D01774152743200008A4E0 /* Release */ = { + 84D01774152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - D31F32601C11DEC100A77D54 /* Debug */ = { + D31F32601C11DEC100A77D54 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -459,13 +506,12 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; }; - name = Debug; + name = Debug64; }; - D31F32611C11DEC100A77D54 /* Release */ = { + D31F32611C11DEC100A77D54 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -489,7 +535,7 @@ TARGETED_DEVICE_FAMILY = 1; VALIDATE_PRODUCT = YES; }; - name = Release; + name = Release64; }; /* End XCBuildConfiguration section */ @@ -497,29 +543,29 @@ 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "polygon_overlay" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01770152743200008A4E0 /* Debug */, - 84D01771152743200008A4E0 /* Release */, + 84D01770152743200008A4E0 /* Debug64 */, + 84D01771152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Release64; }; 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01773152743200008A4E0 /* Debug */, - 84D01774152743200008A4E0 /* Release */, + 84D01773152743200008A4E0 /* Debug64 */, + 84D01774152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Release64; }; D31F325F1C11DEC100A77D54 /* Build configuration list for PBXNativeTarget "tbbExample.ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - D31F32601C11DEC100A77D54 /* Debug */, - D31F32611C11DEC100A77D54 /* Release */, + D31F32601C11DEC100A77D54 /* Debug64 */, + D31F32611C11DEC100A77D54 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Release64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj index c0ba5eb904..da6ed45194 100644 --- a/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj +++ b/examples/parallel_for/seismic/xcode/seismic.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; 84B8DA7A152CA90100D59B95 /* (null) in Resources */ = {isa = PBXBuildFile; }; @@ -18,11 +17,6 @@ 84B8DA89152CA99C00D59B95 /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; }; 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; }; 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; }; - D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32781C12DEE000A77D54 /* libtbb.dylib */; }; - D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */; }; D3BD96921C0DD55E00163D8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; }; D3BD96931C0DD56900163D8B /* seismic_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA83152CA99C00D59B95 /* seismic_video.cpp */; }; D3BD96941C0DD57600163D8B /* universe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA85152CA99C00D59B95 /* universe.cpp */; }; @@ -37,8 +31,28 @@ D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3BD96B61C0E11C600163D8B /* iOS.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5896E2191923E00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C5896F2191925E00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXFileReference section */ - 84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; 84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = ""; }; 84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = ""; }; 84B8DA72152CA90100D59B95 /* tbbAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbbAppDelegate.h; path = ../../../common/gui/xcode/tbbExample/tbbAppDelegate.h; sourceTree = ""; }; @@ -58,10 +72,7 @@ 84D017591527431F0008A4E0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - D31F32781C12DEE000A77D54 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = ""; }; - D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = ""; }; D3BD966D1C0DD00400163D8B /* tbbExample-Info.ios.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.ios.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; sourceTree = ""; }; - D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = ""; }; D3BD96A51C0DE3DE00163D8B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = ""; }; D3BD96B41C0E0B2200163D8B /* tbbExample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "tbbExample-Info.plist"; path = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; sourceTree = ""; }; D3BD96B61C0E11C600163D8B /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = ""; }; @@ -75,8 +86,6 @@ files = ( 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, - 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */, - D31F32771C12DEA300A77D54 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -84,8 +93,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D31F327E1C12DF3D00A77D54 /* libtbb.dylib in Frameworks */, - D31F327F1C12DF3D00A77D54 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -155,10 +162,6 @@ isa = PBXGroup; children = ( 84D017591527431F0008A4E0 /* CoreData.framework */, - 84B8DA13152C9AC600D59B95 /* libtbb.dylib */, - D3BD96991C0DDB8700163D8B /* libtbbmalloc.dylib */, - D31F32781C12DEE000A77D54 /* libtbb.dylib */, - D31F32791C12DEE000A77D54 /* libtbbmalloc.dylib */, 84D0175A1527431F0008A4E0 /* Foundation.framework */, 84D017581527431F0008A4E0 /* AppKit.framework */, 84D01775152744BD0008A4E0 /* OpenGL.framework */, @@ -179,6 +182,7 @@ 84D0174F1527431F0008A4E0 /* Resources */, ); buildRules = ( + C3C5896E2191923E00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -196,6 +200,7 @@ D3BD96581C0DD00400163D8B /* Resources */, ); buildRules = ( + C3C5896F2191925E00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -254,8 +259,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D31F32811C12DF5900A77D54 /* libtbbmalloc.dylib in Resources */, - D31F32801C12DF5200A77D54 /* libtbb.dylib in Resources */, D3BD96B81C0E11CE00163D8B /* iOS.storyboard in Resources */, D3BD96B31C0E0AFE00163D8B /* tbbExample-Info.ios.plist in Resources */, ); @@ -314,10 +317,12 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 84D01770152743200008A4E0 /* Debug */ = { + 84D01770152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -329,7 +334,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; @@ -340,24 +345,42 @@ "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Debug; + name = Debug64; }; - 84D01771152743200008A4E0 /* Release */ = { + 84D01771152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -369,69 +392,84 @@ COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Release; + name = Release64; }; - 84D01773152743200008A4E0 /* Debug */ = { + 84D01773152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + ARCHS = "$(ARCHS_STANDARD)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.9; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84D01774152743200008A4E0 /* Release */ = { + 84D01774152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + ARCHS = "$(ARCHS_STANDARD)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.9; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = "Intel.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - D3BD96851C0DD00500163D8B /* Debug */ = { + D3BD96851C0DD00500163D8B /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -471,9 +509,9 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = 1; }; - name = Debug; + name = Debug64; }; - D3BD96861C0DD00500163D8B /* Release */ = { + D3BD96861C0DD00500163D8B /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -510,7 +548,7 @@ TARGETED_DEVICE_FAMILY = 1; VALIDATE_PRODUCT = YES; }; - name = Release; + name = Release64; }; /* End XCBuildConfiguration section */ @@ -518,29 +556,29 @@ 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "seismic" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01770152743200008A4E0 /* Debug */, - 84D01771152743200008A4E0 /* Release */, + 84D01770152743200008A4E0 /* Debug64 */, + 84D01771152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01773152743200008A4E0 /* Debug */, - 84D01774152743200008A4E0 /* Release */, + 84D01773152743200008A4E0 /* Debug64 */, + 84D01774152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; D3BD96841C0DD00500163D8B /* Build configuration list for PBXNativeTarget "tbbExample_ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - D3BD96851C0DD00500163D8B /* Debug */, - D3BD96861C0DD00500163D8B /* Release */, + D3BD96851C0DD00500163D8B /* Debug64 */, + D3BD96861C0DD00500163D8B /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj index 048986f552..c8e03c61da 100644 --- a/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj +++ b/examples/parallel_for/tachyon/xcode/tachyon.xcodeproj/project.pbxproj @@ -86,7 +86,6 @@ 84011754152D6F6C00B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; }; 84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; }; 84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; }; - 84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; }; 8401175B152D6F6C00B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; }; 8401175C152D6F6C00B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; }; 8401175D152D6F6C00B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; }; @@ -132,13 +131,11 @@ 8401178D152D6F8400B07E4D /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; }; 84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D01775152744BD0008A4E0 /* OpenGL.framework */; }; 84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D017551527431F0008A4E0 /* Cocoa.framework */; }; - 84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; }; 84011794152D6F8400B07E4D /* (null) in Resources */ = {isa = PBXBuildFile; }; 84011795152D6F8400B07E4D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7C152CA97B00D59B95 /* InfoPlist.strings */; }; 84011796152D6F8400B07E4D /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 84B8DA7E152CA97B00D59B95 /* MainMenu.xib */; }; 840117A1152D6FF900B07E4D /* trace.serial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179F152D6FD100B07E4D /* trace.serial.cpp */; }; 840117A2152D701A00B07E4D /* trace.tbb1d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */; }; - 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B8DA13152C9AC600D59B95 /* libtbb.dylib */; }; 84B8DA77152CA90100D59B95 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA6F152CA90100D59B95 /* main.m */; }; 84B8DA78152CA90100D59B95 /* OpenGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA71152CA90100D59B95 /* OpenGLView.m */; }; 84B8DA79152CA90100D59B95 /* tbbAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA73152CA90100D59B95 /* tbbAppDelegate.m */; }; @@ -188,16 +185,51 @@ D3E786E91C0E375D006995F1 /* ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DD152CBBF600B07E4D /* ui.cpp */; }; D3E786EA1C0E375D006995F1 /* util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DE152CBBF600B07E4D /* util.cpp */; }; D3E786EB1C0E375D006995F1 /* vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116DF152CBBF600B07E4D /* vector.cpp */; }; - D3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; D3E786F21C0E394C006995F1 /* vol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840116E0152CBBF600B07E4D /* vol.cpp */; }; - D3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786EC1C0E38E2006995F1 /* libtbb.dylib */; }; - D3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */; }; D3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F51C0E3A27006995F1 /* iOS.storyboard */; }; D3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */ = {isa = PBXBuildFile; fileRef = D3E786F81C0E3DEC006995F1 /* balls.dat */; }; D3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C589702191B71600DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C589712191BF5700DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C589762191BFE300DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C589772191C02B00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXFileReference section */ 84011691152CBBC900B07E4D /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../src/api.h; sourceTree = ""; }; 84011692152CBBC900B07E4D /* apitrigeom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apitrigeom.h; path = ../src/apitrigeom.h; sourceTree = ""; }; @@ -276,7 +308,6 @@ 8401179A152D6F8400B07E4D /* tachyon.tbb1d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb1d.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8401179D152D6FC600B07E4D /* trace.tbb1d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.tbb1d.cpp; sourceTree = ""; }; 8401179F152D6FD100B07E4D /* trace.serial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.serial.cpp; sourceTree = ""; }; - 84B8DA13152C9AC600D59B95 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = ""; }; 84B8DA6F152CA90100D59B95 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../../../common/gui/xcode/tbbExample/main.m; sourceTree = ""; }; 84B8DA70152CA90100D59B95 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenGLView.h; path = ../../../common/gui/xcode/tbbExample/OpenGLView.h; sourceTree = ""; }; 84B8DA71152CA90100D59B95 /* OpenGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenGLView.m; path = ../../../common/gui/xcode/tbbExample/OpenGLView.m; sourceTree = ""; }; @@ -293,8 +324,6 @@ 84D0175A1527431F0008A4E0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 84D01775152744BD0008A4E0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; D3E786AD1C0E3588006995F1 /* tachyon.tbb.ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tachyon.tbb.ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D3E786EC1C0E38E2006995F1 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/ios/libtbb.dylib; sourceTree = ""; }; - D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/ios/libtbbmalloc.dylib; sourceTree = ""; }; D3E786F51C0E3A27006995F1 /* iOS.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iOS.storyboard; path = ../iOS.storyboard; sourceTree = ""; }; D3E786F81C0E3DEC006995F1 /* balls.dat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = balls.dat; path = ../../../../../parallel_for/tachyon/dat/balls.dat; sourceTree = ""; }; D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.1.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; @@ -307,7 +336,6 @@ files = ( 84011757152D6F6C00B07E4D /* OpenGL.framework in Frameworks */, 84011758152D6F6C00B07E4D /* Cocoa.framework in Frameworks */, - 84011759152D6F6C00B07E4D /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -317,7 +345,6 @@ files = ( 84011790152D6F8400B07E4D /* OpenGL.framework in Frameworks */, 84011791152D6F8400B07E4D /* Cocoa.framework in Frameworks */, - 84011792152D6F8400B07E4D /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -327,7 +354,6 @@ files = ( 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, - 84B8DA19152C9AC600D59B95 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -336,8 +362,6 @@ buildActionMask = 2147483647; files = ( D3E786FC1C0E44E3006995F1 /* CoreFoundation.framework in Frameworks */, - D3E786F01C0E38F0006995F1 /* libtbb.dylib in Frameworks */, - D3E786F11C0E38F4006995F1 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -495,9 +519,6 @@ isa = PBXGroup; children = ( D3E786FB1C0E44E3006995F1 /* CoreFoundation.framework */, - D3E786EC1C0E38E2006995F1 /* libtbb.dylib */, - D3E786ED1C0E38E2006995F1 /* libtbbmalloc.dylib */, - 84B8DA13152C9AC600D59B95 /* libtbb.dylib */, 84D017581527431F0008A4E0 /* AppKit.framework */, 84D017591527431F0008A4E0 /* CoreData.framework */, 84D0175A1527431F0008A4E0 /* Foundation.framework */, @@ -519,6 +540,7 @@ 8401175A152D6F6C00B07E4D /* Resources */, ); buildRules = ( + C3C589712191BF5700DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -536,6 +558,7 @@ 84011793152D6F8400B07E4D /* Resources */, ); buildRules = ( + C3C589772191C02B00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -553,6 +576,7 @@ 84D0174F1527431F0008A4E0 /* Resources */, ); buildRules = ( + C3C589702191B71600DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -570,6 +594,7 @@ D3E786AB1C0E3588006995F1 /* Resources */, ); buildRules = ( + C3C589762191BFE300DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -585,7 +610,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = tbb; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 1000; TargetAttributes = { D3E786AC1C0E3588006995F1 = { CreatedOnToolsVersion = 7.1.1; @@ -649,8 +674,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3E786F41C0E3A08006995F1 /* libtbbmalloc.dylib in Resources */, - D3E786F31C0E3A01006995F1 /* libtbb.dylib in Resources */, D3E786FA1C0E3DF7006995F1 /* balls.dat in Resources */, D3E786F71C0E3A33006995F1 /* iOS.storyboard in Resources */, ); @@ -873,108 +896,126 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 8401175F152D6F6C00B07E4D /* Debug */ = { + 8401175F152D6F6C00B07E4D /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = tachyon.serial; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84011760152D6F6C00B07E4D /* Release */ = { + 84011760152D6F6C00B07E4D /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = tachyon.serial; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - 84011798152D6F8400B07E4D /* Debug */ = { + 84011798152D6F8400B07E4D /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = tachyon.tbb1d; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84011799152D6F8400B07E4D /* Release */ = { + 84011799152D6F8400B07E4D /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = tachyon.tbb1d; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - 84D01770152743200008A4E0 /* Debug */ = { + 84D01770152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -984,95 +1025,142 @@ "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROO)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Debug; + name = Debug64; }; - 84D01771152743200008A4E0 /* Release */ = { + 84D01771152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = c11; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROO)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Release; + name = Release64; }; - 84D01773152743200008A4E0 /* Debug */ = { + 84D01773152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84D01774152743200008A4E0 /* Release */ = { + 84D01774152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - D3E786C11C0E3588006995F1 /* Debug */ = { + D3E786C11C0E3588006995F1 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -1098,24 +1186,25 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_TBB = YES; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + LIBRARY_SEARCH_PATHS = "$(inherited)"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; PRODUCT_NAME = tachyon.tbb.ios; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = Debug; + name = Debug64; }; - D3E786C21C0E3588006995F1 /* Release */ = { + D3E786C21C0E3588006995F1 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -1137,11 +1226,12 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_TBB = YES; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; + LIBRARY_SEARCH_PATHS = "$(inherited)"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; PRODUCT_NAME = tachyon.tbb.ios; @@ -1149,7 +1239,7 @@ TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; - name = Release; + name = Release64; }; /* End XCBuildConfiguration section */ @@ -1157,47 +1247,47 @@ 8401175E152D6F6C00B07E4D /* Build configuration list for PBXNativeTarget "tachyon.serial" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8401175F152D6F6C00B07E4D /* Debug */, - 84011760152D6F6C00B07E4D /* Release */, + 8401175F152D6F6C00B07E4D /* Debug64 */, + 84011760152D6F6C00B07E4D /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 84011797152D6F8400B07E4D /* Build configuration list for PBXNativeTarget "tachyon.tbb1d" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84011798152D6F8400B07E4D /* Debug */, - 84011799152D6F8400B07E4D /* Release */, + 84011798152D6F8400B07E4D /* Debug64 */, + 84011799152D6F8400B07E4D /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "tachyon" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01770152743200008A4E0 /* Debug */, - 84D01771152743200008A4E0 /* Release */, + 84D01770152743200008A4E0 /* Debug64 */, + 84D01771152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tachyon.tbb" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01773152743200008A4E0 /* Debug */, - 84D01774152743200008A4E0 /* Release */, + 84D01773152743200008A4E0 /* Debug64 */, + 84D01774152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; D3E786C31C0E3588006995F1 /* Build configuration list for PBXNativeTarget "tachyon.tbb.ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - D3E786C11C0E3588006995F1 /* Debug */, - D3E786C21C0E3588006995F1 /* Release */, + D3E786C11C0E3588006995F1 /* Debug64 */, + D3E786C21C0E3588006995F1 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj index 6b35ba1362..49925d55b7 100644 --- a/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj +++ b/examples/parallel_reduce/convex_hull/xcode/convex_hull.xcodeproj/project.pbxproj @@ -9,12 +9,20 @@ /* Begin PBXBuildFile section */ A146114A0B94631F000C6B18 /* convex_hull_bench.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14611490B94631F000C6B18 /* convex_hull_bench.cpp */; }; A1F593A60B8F042A00073279 /* convex_hull_sample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5895A218B677B00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -22,7 +30,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -32,7 +39,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F594FD0B8F4F1800073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -42,7 +48,6 @@ A14611490B94631F000C6B18 /* convex_hull_bench.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_bench.cpp; path = ../convex_hull_bench.cpp; sourceTree = SOURCE_ROOT; }; A146114C0B9463CB000C6B18 /* convex_hull.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = convex_hull.h; path = ../convex_hull.h; sourceTree = SOURCE_ROOT; }; A1F593A50B8F042A00073279 /* convex_hull_sample.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convex_hull_sample.cpp; path = ../convex_hull_sample.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; A1F594EB0B8F4B5600073279 /* convex_hull_bench */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_bench; sourceTree = BUILT_PRODUCTS_DIR; }; A1F594FA0B8F4EE000073279 /* convex_hull_sample */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = convex_hull_sample; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -52,7 +57,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -60,7 +64,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F594FC0B8F4F1000073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -71,7 +74,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = convex_hull; @@ -96,14 +98,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -116,6 +110,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5895A218B677B00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -148,7 +143,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */; compatibilityVersion = "Xcode 3.2"; @@ -187,84 +182,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = convex_hull_sample; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = convex_hull_sample; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = convex_hull_sample; ZERO_LINK = NO; }; @@ -273,15 +202,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = convex_hull_sample; ZERO_LINK = NO; }; @@ -291,19 +218,35 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -311,89 +254,61 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; - A1F594EF0B8F4B8200073279 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = convex_hull_bench; - ZERO_LINK = NO; - }; - name = Debug; - }; A1F594F00B8F4B8200073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = convex_hull_bench; ZERO_LINK = NO; }; name = Debug64; }; - A1F594F10B8F4B8200073279 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = convex_hull_bench; - ZERO_LINK = NO; - }; - name = Release; - }; A1F594F20B8F4B8200073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = convex_hull_bench; ZERO_LINK = NO; }; @@ -405,35 +320,29 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "convex_hull_sample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "convex_hull" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; A1F594EE0B8F4B8200073279 /* Build configuration list for PBXNativeTarget "convex_hull_bench" */ = { isa = XCConfigurationList; buildConfigurations = ( - A1F594EF0B8F4B8200073279 /* Debug */, A1F594F00B8F4B8200073279 /* Debug64 */, - A1F594F10B8F4B8200073279 /* Release */, A1F594F20B8F4B8200073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj index 2202d3115e..a3d8b619e8 100644 --- a/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj +++ b/examples/parallel_reduce/primes/xcode/primes.xcodeproj/project.pbxproj @@ -8,11 +8,21 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* primes.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; EA8D882D1301731B00385DE1 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA8D882C1301731B00385DE1 /* main.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5895B218B692000DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -20,7 +30,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -29,7 +38,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* primes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = primes; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = primes.cpp; path = ../primes.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; EA8D882B130172E400385DE1 /* primes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = primes.h; path = ../primes.h; sourceTree = SOURCE_ROOT; }; EA8D882C1301731B00385DE1 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../main.cpp; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -39,7 +47,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -50,7 +57,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = primes; @@ -74,14 +80,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -94,6 +92,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5895B218B692000DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -109,7 +108,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */; compatibilityVersion = "Xcode 3.2"; @@ -140,84 +139,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = primes; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = primes; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = primes; ZERO_LINK = NO; }; @@ -226,15 +159,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = primes; ZERO_LINK = NO; }; @@ -244,19 +175,35 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -264,19 +211,33 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -286,24 +247,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "primes" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "primes" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj index 3e18873f0a..57ea0930b2 100644 --- a/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj +++ b/examples/pipeline/square/xcode/square.xcodeproj/project.pbxproj @@ -8,11 +8,21 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* square.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* square.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; EA09E56116E4F19700CA4CF4 /* gen_input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5895C218B69F900DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -20,7 +30,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -30,7 +39,6 @@ 6D0FC7170DE5BA4D0026B02B /* gen_input.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = gen_input.cpp; path = ../gen_input.cpp; sourceTree = SOURCE_ROOT; }; 8DD76F6C0486A84900D96B5E /* square */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = square; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* square.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = square.cpp; path = ../square.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -38,7 +46,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -49,7 +56,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = square; @@ -72,14 +78,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -92,6 +90,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5895C218B69F900DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -107,7 +106,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */; compatibilityVersion = "Xcode 3.2"; @@ -138,85 +137,20 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = square; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = square; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = square; + REEXPORTED_LIBRARY_PATHS = ""; ZERO_LINK = NO; }; name = Debug64; @@ -224,16 +158,15 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = square; + REEXPORTED_LIBRARY_PATHS = ""; ZERO_LINK = NO; }; name = Release64; @@ -242,19 +175,34 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -262,19 +210,32 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -284,24 +245,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "square" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "square" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj index 02843a4c0a..c0ad972197 100644 --- a/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj +++ b/examples/task/tree_sum/xcode/tree_sum.xcodeproj/project.pbxproj @@ -11,12 +11,20 @@ 05593A120B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */; }; 05593A130B8F4F4500DE73AB /* SerialSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */; }; 05593A140B8F4F4500DE73AB /* SimpleParallelSumTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */; }; - 05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; }; - 05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C5895D218B6AA800DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -24,8 +32,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, - 05593A170B8F4F6E00DE73AB /* libtbbmalloc.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -37,9 +43,7 @@ 05593A0D0B8F4F4500DE73AB /* OptimizedParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizedParallelSumTree.cpp; path = ../OptimizedParallelSumTree.cpp; sourceTree = SOURCE_ROOT; }; 05593A0E0B8F4F4500DE73AB /* SerialSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SerialSumTree.cpp; path = ../SerialSumTree.cpp; sourceTree = SOURCE_ROOT; }; 05593A0F0B8F4F4500DE73AB /* SimpleParallelSumTree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleParallelSumTree.cpp; path = ../SimpleParallelSumTree.cpp; sourceTree = SOURCE_ROOT; }; - 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbbmalloc.dylib; path = ../../../../lib/libtbbmalloc.dylib; sourceTree = SOURCE_ROOT; }; 05593A4A0B8F51E000DE73AB /* tree_sum */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tree_sum; sourceTree = BUILT_PRODUCTS_DIR; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -47,8 +51,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, - 05593A160B8F4F5D00DE73AB /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,7 +61,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = tree_sum; @@ -85,15 +86,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - 05593A150B8F4F5D00DE73AB /* libtbbmalloc.dylib */, - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -106,6 +98,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C5895D218B6AA800DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -121,7 +114,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */; compatibilityVersion = "Xcode 3.2"; @@ -154,84 +147,18 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = tree_sum; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = tree_sum; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = tree_sum; ZERO_LINK = NO; }; @@ -240,15 +167,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + GCC_VERSION = ""; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = tree_sum; ZERO_LINK = NO; }; @@ -258,19 +183,36 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + "-ltbbmalloc_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -278,19 +220,34 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + "-ltbbmalloc", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -300,24 +257,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "tree_sum" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "tree_sum" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj b/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj index 09e43aa744..30fcb40497 100644 --- a/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj +++ b/examples/task_arena/fractal/xcode/fractal.xcodeproj/project.pbxproj @@ -25,14 +25,29 @@ D31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D31F32381C117A1700A77D54 /* iOS.storyboard */; }; D31F323B1C117BE300A77D54 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B8DA82152CA99C00D59B95 /* main.cpp */; }; D31F323C1C117BE700A77D54 /* fractal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84011720152D687A00B07E4D /* fractal.cpp */; }; - D31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F323F1C11B5C900A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32401C11B5C900A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; settings = {ATTRIBUTES = (Weak, ); }; }; - D31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32901C12E67300A77D54 /* libtbb.dylib */; }; - D31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */ = {isa = PBXBuildFile; fileRef = D31F32911C12E67300A77D54 /* libtbbmalloc.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C589782191C36D00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; + C3C5897A2191DC7A00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXFileReference section */ 8401171F152D687A00B07E4D /* fractal_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fractal_video.h; path = ../fractal_video.h; sourceTree = ""; }; 84011720152D687A00B07E4D /* fractal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractal.cpp; path = ../fractal.cpp; sourceTree = ""; }; @@ -67,10 +82,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D31F328E1C12E65800A77D54 /* libtbb.dylib in Frameworks */, 84D01776152744BD0008A4E0 /* OpenGL.framework in Frameworks */, 84D017561527431F0008A4E0 /* Cocoa.framework in Frameworks */, - D31F328F1C12E65F00A77D54 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -78,8 +91,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D31F32961C12E6B500A77D54 /* libtbb.dylib in Frameworks */, - D31F32971C12E6B500A77D54 /* libtbbmalloc.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -187,6 +198,7 @@ 84D0174F1527431F0008A4E0 /* Resources */, ); buildRules = ( + C3C589782191C36D00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -204,6 +216,7 @@ D31F321B1C11796D00A77D54 /* Resources */, ); buildRules = ( + C3C5897A2191DC7A00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -219,11 +232,10 @@ isa = PBXProject; attributes = { CLASSPREFIX = tbb; - LastUpgradeCheck = 0430; + LastUpgradeCheck = 1000; TargetAttributes = { D31F321C1C11796D00A77D54 = { CreatedOnToolsVersion = 7.1.1; - DevelopmentTeam = 7J8M3RM94C; }; }; }; @@ -261,8 +273,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D31F32991C12E6CA00A77D54 /* libtbbmalloc.dylib in Resources */, - D31F32981C12E6C500A77D54 /* libtbb.dylib in Resources */, D31F323A1C117A6200A77D54 /* iOS.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -318,100 +328,171 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 84D01770152743200008A4E0 /* Debug */ = { + 84D01770152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = c11; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Debug; + name = Debug64; }; - 84D01771152743200008A4E0 /* Release */ = { + 84D01771152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = c11; GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_NO_COMMON_BLOCKS = YES; + GCC_VERSION = ""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + ICC_CXX_LANG_DIALECT = "c++11"; + ICC_TBB = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); SDKROOT = macosx; + VALID_ARCHS = x86_64; }; - name = Release; + name = Release64; }; - 84D01773152743200008A4E0 /* Debug */ = { + 84D01773152743200008A4E0 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib\""; - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Debug; + name = Debug64; }; - 84D01774152743200008A4E0 /* Release */ = { + 84D01774152743200008A4E0 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_ENABLE_OBJC_ARC = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "../../../common/gui/xcode/tbbExample/tbbExample-Prefix.pch"; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "\"$(SRCROOT)/../../../../lib\"", - "\"$(SRCROOT)\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_NAME = "$(TARGET_NAME)"; RUN_CLANG_STATIC_ANALYZER = YES; - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + USER_HEADER_SEARCH_PATHS = ""; VERSION_INFO_BUILDER = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; - name = Release; + name = Release64; }; - D31F32311C11796D00A77D54 /* Debug */ = { + D31F32311C11796D00A77D54 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -425,6 +506,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -437,26 +519,25 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; - MACOSX_DEPLOYMENT_TARGET = 10.9; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = Debug; + name = Debug64; }; - D31F32321C11796D00A77D54 /* Release */ = { + D31F32321C11796D00A77D54 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -470,6 +551,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = ""; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -478,12 +560,12 @@ GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../include\""; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "../../../common/gui/xcode/tbbExample/tbbExample-Info.ios.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path"; - LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../../../../lib/ios\""; - MACOSX_DEPLOYMENT_TARGET = 10.9; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.tbb.example; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -491,7 +573,7 @@ TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; - name = Release; + name = Release64; }; /* End XCBuildConfiguration section */ @@ -499,29 +581,29 @@ 84D0174B1527431F0008A4E0 /* Build configuration list for PBXProject "fractal" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01770152743200008A4E0 /* Debug */, - 84D01771152743200008A4E0 /* Release */, + 84D01770152743200008A4E0 /* Debug64 */, + 84D01771152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 84D01772152743200008A4E0 /* Build configuration list for PBXNativeTarget "tbbExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 84D01773152743200008A4E0 /* Debug */, - 84D01774152743200008A4E0 /* Release */, + 84D01773152743200008A4E0 /* Debug64 */, + 84D01774152743200008A4E0 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; D31F32331C11796D00A77D54 /* Build configuration list for PBXNativeTarget "tbbExample_ios" */ = { isa = XCConfigurationList; buildConfigurations = ( - D31F32311C11796D00A77D54 /* Debug */, - D31F32321C11796D00A77D54 /* Release */, + D31F32311C11796D00A77D54 /* Debug64 */, + D31F32321C11796D00A77D54 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj b/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj index 1139c62c48..835c82ceb7 100644 --- a/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj +++ b/examples/task_group/sudoku/xcode/sudoku.xcodeproj/project.pbxproj @@ -8,10 +8,20 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* sudoku.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* sudoku.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58961218C251E00DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,7 +29,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -28,7 +37,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* Sudoku */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Sudoku; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* sudoku.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sudoku.cpp; path = ../sudoku.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Sudoku; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58961218C251E00DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sudoku" */; compatibilityVersion = "Xcode 3.2"; @@ -134,84 +133,17 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Sudoku; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Sudoku; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Sudoku; ZERO_LINK = NO; }; @@ -220,15 +152,12 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Sudoku; ZERO_LINK = NO; }; @@ -238,19 +167,34 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +202,32 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +237,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Sudoku" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "sudoku" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj index 0a08617257..e8c14e5713 100644 --- a/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj +++ b/examples/test_all/fibonacci/xcode/fibonacci.xcodeproj/project.pbxproj @@ -8,10 +8,20 @@ /* Begin PBXBuildFile section */ A1F593A60B8F042A00073279 /* Fibonacci.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F593A50B8F042A00073279 /* Fibonacci.cpp */; }; - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F593B30B8F06F900073279 /* libtbb.dylib */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + C3C58962218C273700DAC94C /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.intel.compilers.icc.latest; + fileType = sourcecode.cpp; + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXCopyFilesBuildPhase section */ 8DD76F690486A84900D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -19,7 +29,6 @@ dstPath = ""; dstSubfolderSpec = 16; files = ( - A1F593BB0B8F072500073279 /* libtbb.dylib in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -28,7 +37,6 @@ /* Begin PBXFileReference section */ 8DD76F6C0486A84900D96B5E /* Fibonacci */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Fibonacci; sourceTree = BUILT_PRODUCTS_DIR; }; A1F593A50B8F042A00073279 /* Fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Fibonacci.cpp; path = ../Fibonacci.cpp; sourceTree = SOURCE_ROOT; }; - A1F593B30B8F06F900073279 /* libtbb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libtbb.dylib; path = ../../../../lib/libtbb.dylib; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -36,7 +44,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1F593B70B8F06F900073279 /* libtbb.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -47,7 +54,6 @@ isa = PBXGroup; children = ( 08FB7795FE84155DC02AAC07 /* Source */, - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = Fibonacci; @@ -69,14 +75,6 @@ name = Products; sourceTree = ""; }; - A1F593B20B8F06F900073279 /* External Frameworks and Libraries */ = { - isa = PBXGroup; - children = ( - A1F593B30B8F06F900073279 /* libtbb.dylib */, - ); - name = "External Frameworks and Libraries"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -89,6 +87,7 @@ 8DD76F690486A84900D96B5E /* CopyFiles */, ); buildRules = ( + C3C58962218C273700DAC94C /* PBXBuildRule */, ); dependencies = ( ); @@ -104,7 +103,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0410; + LastUpgradeCheck = 1000; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fibonacci" */; compatibilityVersion = "Xcode 3.2"; @@ -134,83 +133,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Fibonacci; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); - PRODUCT_NAME = Fibonacci; - ZERO_LINK = NO; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; - GCC_ENABLE_CPP_RTTI = YES; - GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - SYMROOT = "/tmp/tbb-$(USER)"; - }; - name = Release; - }; A1F593C60B8F0E6E00073279 /* Debug64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb_debug", ); PRODUCT_NAME = Fibonacci; ZERO_LINK = NO; @@ -220,15 +157,13 @@ A1F593C70B8F0E6E00073279 /* Release64 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_VERSION = ""; - HEADER_SEARCH_PATHS = ../../../../include; + HEADER_SEARCH_PATHS = "$(inherited)"; + ICC_CXX_LANG_DIALECT = "c++11"; INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - ../../../../lib, - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited)"; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = Fibonacci; ZERO_LINK = NO; }; @@ -238,19 +173,34 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; + ENABLE_TESTABILITY = YES; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Debug64; }; @@ -258,19 +208,32 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = i386; GCC_ENABLE_CPP_RTTI = YES; GCC_MODEL_TUNING = ""; - GCC_VERSION = 4.0; + GCC_VERSION = ""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(TBBROOT)/include", + /opt/intel/tbb/include, + ); + LD_RUNPATH_SEARCH_PATHS = "$(TBBROOT)/lib /opt/intel/tbb/lib"; + LIBRARY_SEARCH_PATHS = ( + "$(TBBROOT)/lib", + /opt/intel/tbb/lib, + ); + MACOSX_DEPLOYMENT_TARGET = 10.11; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-m64", ); - OTHER_LDFLAGS = "-m64"; + OTHER_LDFLAGS = ( + "-m64", + "-ltbb", + ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; SYMROOT = "/tmp/tbb-$(USER)"; + VALID_ARCHS = x86_64; }; name = Release64; }; @@ -280,24 +243,20 @@ 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "Fibonacci" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, A1F593C60B8F0E6E00073279 /* Debug64 */, - 1DEB923308733DC60010E9CD /* Release */, A1F593C70B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "fibonacci" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, A1F593C80B8F0E6E00073279 /* Debug64 */, - 1DEB923708733DC60010E9CD /* Release */, A1F593C90B8F0E6E00073279 /* Release64 */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug64; }; /* End XCConfigurationList section */ }; diff --git a/include/tbb/flow_graph.h b/include/tbb/flow_graph.h index 222eac2fa8..ee8c39ddcd 100644 --- a/include/tbb/flow_graph.h +++ b/include/tbb/flow_graph.h @@ -580,15 +580,18 @@ class continue_receiver : public receiver< continue_msg > { typedef receiver::predecessor_type predecessor_type; //! Constructor - explicit continue_receiver( int number_of_predecessors = 0 ) { + explicit continue_receiver( + __TBB_FLOW_GRAPH_PRIORITY_ARG1(int number_of_predecessors, node_priority_t priority)) { my_predecessor_count = my_initial_predecessor_count = number_of_predecessors; my_current_count = 0; + __TBB_FLOW_GRAPH_PRIORITY_EXPR( my_priority = priority; ) } //! Copy constructor continue_receiver( const continue_receiver& src ) : receiver() { my_predecessor_count = my_initial_predecessor_count = src.my_initial_predecessor_count; my_current_count = 0; + __TBB_FLOW_GRAPH_PRIORITY_EXPR( my_priority = src.my_priority; ) } //! Increments the trigger threshold @@ -661,6 +664,7 @@ class continue_receiver : public receiver< continue_msg > { int my_predecessor_count; int my_current_count; int my_initial_predecessor_count; + __TBB_FLOW_GRAPH_PRIORITY_EXPR( node_priority_t my_priority; ) // the friend declaration in the base class did not eliminate the "protected class" // error in gcc 4.1.2 template friend class limiter_node; @@ -823,7 +827,7 @@ inline void graph::reset( reset_flags f ) { internal::activate_graph(*this); // now spawn the tasks necessary to start the graph for(task_list_type::iterator rti = my_reset_task_list.begin(); rti != my_reset_task_list.end(); ++rti) { - my_task_arena->execute(graph::spawn_functor(*(*rti))); + internal::spawn_in_graph_arena(*this, *(*rti)); } my_reset_task_list.clear(); } @@ -1135,8 +1139,10 @@ class function_node : public graph_node, public internal::function_input - function_node( graph &g, size_t concurrency, Body body ) : - graph_node(g), input_impl_type(g, concurrency, body) { + function_node( + graph &g, size_t concurrency, + __TBB_FLOW_GRAPH_PRIORITY_ARG1( Body body, node_priority_t priority = tbb::flow::internal::no_priority ) + ) : graph_node(g), input_impl_type(g, concurrency, __TBB_FLOW_GRAPH_PRIORITY_ARG1(body, priority)) { tbb::internal::fgt_node_with_body( tbb::internal::FLOW_FUNCTION_NODE, &this->my_graph, static_cast *>(this), static_cast *>(this), this->my_body ); } @@ -1213,11 +1219,15 @@ class multifunction_node : using input_impl_type::my_predecessors; public: template - multifunction_node( graph &g, size_t concurrency, Body body ) : - graph_node(g), base_type(g,concurrency, body) { - tbb::internal::fgt_multioutput_node_with_body( tbb::internal::FLOW_MULTIFUNCTION_NODE, - &this->my_graph, static_cast *>(this), - this->output_ports(), this->my_body ); + multifunction_node( + graph &g, size_t concurrency, + __TBB_FLOW_GRAPH_PRIORITY_ARG1( Body body, node_priority_t priority = tbb::flow::internal::no_priority ) + ) : graph_node(g), base_type(g, concurrency, __TBB_FLOW_GRAPH_PRIORITY_ARG1(body, priority)) { + tbb::internal::fgt_multioutput_node_with_body( + tbb::internal::FLOW_MULTIFUNCTION_NODE, + &this->my_graph, static_cast *>(this), + this->output_ports(), this->my_body + ); } multifunction_node( const multifunction_node &other) : @@ -1339,18 +1349,22 @@ class continue_node : public graph_node, public internal::continue_input Output template - continue_node( graph &g, Body body ) : - graph_node(g), input_impl_type( g, body ) { + continue_node( + graph &g, + __TBB_FLOW_GRAPH_PRIORITY_ARG1( Body body, node_priority_t priority = tbb::flow::internal::no_priority ) + ) : graph_node(g), input_impl_type( g, __TBB_FLOW_GRAPH_PRIORITY_ARG1(body, priority) ) { tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph, static_cast *>(this), static_cast *>(this), this->my_body ); } - //! Constructor for executable node with continue_msg -> Output template - continue_node( graph &g, int number_of_predecessors, Body body ) : - graph_node(g), input_impl_type( g, number_of_predecessors, body ) { + continue_node( + graph &g, int number_of_predecessors, + __TBB_FLOW_GRAPH_PRIORITY_ARG1( Body body, node_priority_t priority = tbb::flow::internal::no_priority ) + ) : graph_node(g) + , input_impl_type(g, number_of_predecessors, __TBB_FLOW_GRAPH_PRIORITY_ARG1(body, priority)) { tbb::internal::fgt_node_with_body( tbb::internal::FLOW_CONTINUE_NODE, &this->my_graph, static_cast *>(this), static_cast *>(this), this->my_body ); @@ -3494,6 +3508,7 @@ class async_node : public multifunction_node< Input, tuple< Output >, Policy, Al struct try_put_functor { typedef internal::multifunction_output output_port_type; output_port_type *port; + // TODO: pass value by copy since we do not want to block asynchronous thread. const Output *value; bool result; try_put_functor(output_port_type &p, const Output &v) : port(&p), value(&v), result(false) { } @@ -3539,11 +3554,18 @@ class async_node : public multifunction_node< Input, tuple< Output >, Policy, Al public: template - async_node( graph &g, size_t concurrency, Body body ) : - base_type( g, concurrency, internal::async_body(body, &my_gateway) ), my_gateway(self()) { - tbb::internal::fgt_multioutput_node_with_body<1>( tbb::internal::FLOW_ASYNC_NODE, - &this->my_graph, static_cast *>(this), - this->output_ports(), this->my_body ); + async_node( + graph &g, size_t concurrency, + __TBB_FLOW_GRAPH_PRIORITY_ARG1( Body body, node_priority_t priority = tbb::flow::internal::no_priority ) + ) : base_type( + g, concurrency, + internal::async_body + (body, &my_gateway) __TBB_FLOW_GRAPH_PRIORITY_ARG0(priority) ), my_gateway(self()) { + tbb::internal::fgt_multioutput_node_with_body<1>( + tbb::internal::FLOW_ASYNC_NODE, + &this->my_graph, static_cast *>(this), + this->output_ports(), this->my_body + ); } async_node( const async_node &other ) : base_type(other), sender(), my_gateway(self()) { @@ -3802,7 +3824,8 @@ class overwrite_node : public graph_node, public receiver, public sender { } //! Breaks an infinite loop between the node reservation and register_successor call - struct register_predecessor_task : public task { + struct register_predecessor_task : public graph_task { + register_predecessor_task(predecessor_type& owner, successor_type& succ) : o(owner), s(succ) {}; @@ -3919,6 +3942,11 @@ class write_once_node : public overwrite_node { using interface10::port_ref; using interface10::streaming_node; #endif // __TBB_PREVIEW_STREAMING_NODE +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + using internal::node_priority_t; + using internal::no_priority; +#endif + } // flow } // tbb diff --git a/include/tbb/internal/_flow_graph_body_impl.h b/include/tbb/internal/_flow_graph_body_impl.h index 07668773f4..25380a9ffb 100644 --- a/include/tbb/internal/_flow_graph_body_impl.h +++ b/include/tbb/internal/_flow_graph_body_impl.h @@ -271,13 +271,20 @@ class type_to_key_function_body_leaf : public type_to_key_funct //! A task that calls a node's forward_task function template< typename NodeType > -class forward_task_bypass : public task { +class forward_task_bypass : public graph_task { NodeType &my_node; public: - forward_task_bypass( NodeType &n ) : my_node(n) {} + forward_task_bypass( NodeType &n +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + , node_priority_t node_priority = no_priority + ) : graph_task(node_priority), +#else + ) : +#endif + my_node(n) {} task *execute() __TBB_override { task * new_task = my_node.forward_task(); @@ -289,14 +296,21 @@ class forward_task_bypass : public task { //! A task that calls a node's apply_body_bypass function, passing in an input of type Input // return the task* unless it is SUCCESSFULLY_ENQUEUED, in which case return NULL template< typename NodeType, typename Input > -class apply_body_task_bypass : public task { +class apply_body_task_bypass : public graph_task { NodeType &my_node; Input my_input; public: - apply_body_task_bypass( NodeType &n, const Input &i ) : my_node(n), my_input(i) {} + apply_body_task_bypass( NodeType &n, const Input &i +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + , node_priority_t node_priority = no_priority + ) : graph_task(node_priority), +#else + ) : +#endif + my_node(n), my_input(i) {} task *execute() __TBB_override { task * next_task = my_node.apply_body_bypass( my_input ); @@ -307,7 +321,7 @@ class apply_body_task_bypass : public task { //! A task that calls a node's apply_body_bypass function with no input template< typename NodeType > -class source_task_bypass : public task { +class source_task_bypass : public graph_task { NodeType &my_node; @@ -349,7 +363,12 @@ class decrementer : public continue_receiver, tbb::internal::no_copy { typedef continue_msg input_type; typedef continue_msg output_type; - decrementer( int number_of_predecessors = 0 ) : continue_receiver( number_of_predecessors ) { } + decrementer( int number_of_predecessors = 0 ) + : continue_receiver( + __TBB_FLOW_GRAPH_PRIORITY_ARG1(number_of_predecessors, tbb::flow::internal::no_priority) + ) + , my_node(NULL) + {} void set_owner( T *node ) { my_node = node; } }; diff --git a/include/tbb/internal/_flow_graph_impl.h b/include/tbb/internal/_flow_graph_impl.h index 773ec1780f..0aadf44a03 100644 --- a/include/tbb/internal/_flow_graph_impl.h +++ b/include/tbb/internal/_flow_graph_impl.h @@ -26,6 +26,10 @@ #include "../task_arena.h" #include "../flow_graph_abstractions.h" +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +#include "../concurrent_priority_queue.h" +#endif + #include #if TBB_DEPRECATED_FLOW_ENQUEUE @@ -34,17 +38,44 @@ #define FLOW_SPAWN(a) tbb::task::spawn((a)) #endif +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +#define __TBB_FLOW_GRAPH_PRIORITY_EXPR( expr ) expr +#define __TBB_FLOW_GRAPH_PRIORITY_ARG0( priority ) , priority +#define __TBB_FLOW_GRAPH_PRIORITY_ARG1( arg1, priority ) arg1, priority +#else +#define __TBB_FLOW_GRAPH_PRIORITY_EXPR( expr ) +#define __TBB_FLOW_GRAPH_PRIORITY_ARG0( priority ) +#define __TBB_FLOW_GRAPH_PRIORITY_ARG1( arg1, priority ) arg1 +#endif // __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + namespace tbb { namespace flow { namespace internal { static tbb::task * const SUCCESSFULLY_ENQUEUED = (task *)-1; +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +typedef unsigned int node_priority_t; +static const node_priority_t no_priority = node_priority_t(0); +#endif } namespace interface10 { using tbb::flow::internal::SUCCESSFULLY_ENQUEUED; +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +using tbb::flow::internal::node_priority_t; +using tbb::flow::internal::no_priority; +//! Base class for tasks generated by graph nodes. +struct graph_task : public task { + graph_task( node_priority_t node_priority = no_priority ) : priority( node_priority ) {} + node_priority_t priority; +}; +#else +typedef task graph_task; +#endif /* __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES */ + + class graph; class graph_node; @@ -131,6 +162,37 @@ void spawn_in_graph_arena(graph& g, tbb::task& arena_task); void add_task_to_graph_reset_list(graph& g, tbb::task *tp); template void execute_in_graph_arena(graph& g, F& f); +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +struct graph_task_comparator { + bool operator()(const graph_task* left, const graph_task* right) { + return left->priority < right->priority; + } +}; + +typedef tbb::concurrent_priority_queue graph_task_priority_queue_t; + +class priority_task_selector : public task { +public: + priority_task_selector(graph_task_priority_queue_t& priority_queue) + : my_priority_queue(priority_queue) {} + task* execute() __TBB_override { + graph_task* t = NULL; + bool result = my_priority_queue.try_pop(t); + __TBB_ASSERT_EX( result, "Number of critical tasks for scheduler and tasks" + " in graph's priority queue mismatched" ); + __TBB_ASSERT( t && t != SUCCESSFULLY_ENQUEUED, + "Incorrect task submitted to graph priority queue" ); + __TBB_ASSERT( t->priority != tbb::flow::internal::no_priority, + "Tasks from graph's priority queue must have priority" ); + task* t_next = t->execute(); + task::destroy(*t); + return t_next; + } +private: + graph_task_priority_queue_t& my_priority_queue; +}; +#endif /* __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES */ + } //! The graph class @@ -139,9 +201,16 @@ class graph : tbb::internal::no_copy, public tbb::flow::graph_proxy { friend class graph_node; template< typename Body > - class run_task : public task { + class run_task : public graph_task { public: - run_task(Body& body) : my_body(body) {} + run_task(Body& body +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + , node_priority_t node_priority = no_priority + ) : graph_task(node_priority), +#else + ) : +#endif + my_body(body) { } tbb::task *execute() __TBB_override { my_body(); return NULL; @@ -151,7 +220,7 @@ class graph : tbb::internal::no_copy, public tbb::flow::graph_proxy { }; template< typename Receiver, typename Body > - class run_and_put_task : public task { + class run_and_put_task : public graph_task { public: run_and_put_task(Receiver &r, Body& body) : my_receiver(r), my_body(body) {} tbb::task *execute() __TBB_override { @@ -335,12 +404,20 @@ class graph : tbb::internal::no_copy, public tbb::flow::graph_proxy { tbb::task_arena* my_task_arena; +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + internal::graph_task_priority_queue_t my_priority_queue; +#endif + friend void internal::activate_graph(graph& g); friend void internal::deactivate_graph(graph& g); friend bool internal::is_graph_active(graph& g); friend void internal::spawn_in_graph_arena(graph& g, tbb::task& arena_task); friend void internal::add_task_to_graph_reset_list(graph& g, tbb::task *tp); template friend void internal::execute_in_graph_arena(graph& g, F& f); +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + template + friend class async_node; +#endif friend class tbb::interface7::internal::task_arena_base; @@ -397,7 +474,21 @@ inline void execute_in_graph_arena(graph& g, F& f) { //! Spawns a task inside graph arena inline void spawn_in_graph_arena(graph& g, tbb::task& arena_task) { - graph::spawn_functor s_fn(arena_task); + task* task_to_spawn = &arena_task; +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + // TODO: change flow graph's interfaces to work with graph_task type instead of tbb::task. + graph_task* t = static_cast(&arena_task); + if( t->priority != no_priority ) { + //! Non-preemptive priority pattern. The original task is submitted as a work item to the + //! priority queue, and a new critical task is created to take and execute a work item with + //! the highest known priority. The reference counting responsibility is transferred (via + //! allocate_continuation) to the new task. + task_to_spawn = new( t->allocate_continuation() ) priority_task_selector(g.my_priority_queue); + tbb::internal::make_critical( *task_to_spawn ); + g.my_priority_queue.push(t); + } +#endif /* __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES */ + graph::spawn_functor s_fn(*task_to_spawn); execute_in_graph_arena(g, s_fn); } diff --git a/include/tbb/internal/_flow_graph_node_impl.h b/include/tbb/internal/_flow_graph_node_impl.h index a4bb5c14d9..7ed776afd2 100644 --- a/include/tbb/internal/_flow_graph_node_impl.h +++ b/include/tbb/internal/_flow_graph_node_impl.h @@ -88,21 +88,23 @@ namespace internal { #endif //! Constructor for function_input_base - function_input_base( graph &g, size_t max_concurrency) - : my_graph_ref(g), my_max_concurrency(max_concurrency), my_concurrency(0), - my_queue(!internal::has_policy::value ? new input_queue_type() : NULL), - forwarder_busy(false) + function_input_base( + graph &g, __TBB_FLOW_GRAPH_PRIORITY_ARG1(size_t max_concurrency, node_priority_t priority) + ) : my_graph_ref(g), my_max_concurrency(max_concurrency) + , __TBB_FLOW_GRAPH_PRIORITY_ARG1(my_concurrency(0), my_priority(priority)) + , my_queue(!internal::has_policy::value ? new input_queue_type() : NULL) + , forwarder_busy(false) { my_predecessors.set_owner(this); my_aggregator.initialize_handler(handler_type(this)); } //! Copy constructor - function_input_base( const function_input_base& src) : - receiver(), tbb::internal::no_assign(), - my_graph_ref(src.my_graph_ref), my_max_concurrency(src.my_max_concurrency), - my_concurrency(0), my_queue(src.my_queue ? new input_queue_type() : NULL), - forwarder_busy(false) + function_input_base( const function_input_base& src) + : receiver(), tbb::internal::no_assign() + , my_graph_ref(src.my_graph_ref), my_max_concurrency(src.my_max_concurrency) + , __TBB_FLOW_GRAPH_PRIORITY_ARG1(my_concurrency(0), my_priority(src.my_priority)) + , my_queue(src.my_queue ? new input_queue_type() : NULL), forwarder_busy(false) { my_predecessors.set_owner(this); my_aggregator.initialize_handler(handler_type(this)); @@ -182,6 +184,7 @@ namespace internal { graph& my_graph_ref; const size_t my_max_concurrency; size_t my_concurrency; + __TBB_FLOW_GRAPH_PRIORITY_EXPR( node_priority_t my_priority; ) input_queue_type *my_queue; predecessor_cache my_predecessors; @@ -326,7 +329,7 @@ namespace internal { } } - //! Tries to spawn bodies if available and if concurrency allows + //! Creates tasks for postponed messages if available and if concurrency allows void internal_forward(operation_type *op) { op->bypass_t = NULL; if (my_concurrency < my_max_concurrency || !my_max_concurrency) @@ -377,23 +380,23 @@ namespace internal { //! allocates a task to apply a body inline task * create_body_task( const input_type &input ) { - return (internal::is_graph_active(my_graph_ref)) ? - new(task::allocate_additional_child_of(*(my_graph_ref.root_task()))) - apply_body_task_bypass < class_type, input_type >(*this, input) : - NULL; + new( task::allocate_additional_child_of(*(my_graph_ref.root_task())) ) + apply_body_task_bypass < class_type, input_type >( + *this, __TBB_FLOW_GRAPH_PRIORITY_ARG1(input, my_priority)) + : NULL; } //! This is executed by an enqueued task, the "forwarder" - task *forward_task() { + task* forward_task() { operation_type op_data(try_fwd); - task *rval = NULL; + task* rval = NULL; do { op_data.status = WAIT; my_aggregator.execute(&op_data); if(op_data.status == SUCCEEDED) { - // workaround for icc bug - tbb::task *ttask = op_data.bypass_t; + task* ttask = op_data.bypass_t; + __TBB_ASSERT( ttask && ttask != SUCCESSFULLY_ENQUEUED, NULL ); rval = combine_tasks(my_graph_ref, rval, ttask); } } while (op_data.status == SUCCEEDED); @@ -402,8 +405,9 @@ namespace internal { inline task *create_forward_task() { return (internal::is_graph_active(my_graph_ref)) ? - new(task::allocate_additional_child_of(*(my_graph_ref.root_task()))) forward_task_bypass< class_type >(*this) : - NULL; + new( task::allocate_additional_child_of(*(my_graph_ref.root_task())) ) + forward_task_bypass< class_type >( __TBB_FLOW_GRAPH_PRIORITY_ARG1(*this, my_priority) ) + : NULL; } //! Spawns a task that calls forward() @@ -429,10 +433,12 @@ namespace internal { // constructor template - function_input( graph &g, size_t max_concurrency, Body& body ) : - base_type(g, max_concurrency), - my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ), - my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { + function_input( + graph &g, size_t max_concurrency, + __TBB_FLOW_GRAPH_PRIORITY_ARG1(Body& body, node_priority_t priority) + ) : base_type(g, __TBB_FLOW_GRAPH_PRIORITY_ARG1(max_concurrency, priority)) + , my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) + , my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { } //! Copy constructor @@ -465,21 +471,21 @@ namespace internal { //TODO: consider moving into the base class task * apply_body_impl_bypass( const input_type &i) { output_type v = apply_body_impl(i); - task* postponed_task = NULL; #if TBB_DEPRECATED_MESSAGE_FLOW_ORDER task* successor_task = successors().try_put_task(v); #endif - if(base_type::my_max_concurrency != 0) { + task* postponed_task = NULL; + if( base_type::my_max_concurrency != 0 ) { postponed_task = base_type::try_get_postponed_task(i); + __TBB_ASSERT( !postponed_task || postponed_task != SUCCESSFULLY_ENQUEUED, NULL ); } #if TBB_DEPRECATED_MESSAGE_FLOW_ORDER graph& g = base_type::my_graph_ref; return combine_tasks(g, successor_task, postponed_task); #else - // postponed_task is either NULL or the pointer to TBB task - if(postponed_task) { - // spawn task to make it available for other workers - // since we do not know successors' execution policy + if( postponed_task ) { + // make the task available for other workers since we do not know successors' + // execution policy internal::spawn_in_graph_arena(base_type::graph_reference(), *postponed_task); } task* successor_task = successors().try_put_task(v); @@ -572,13 +578,11 @@ namespace internal { // constructor template - multifunction_input( - graph &g, - size_t max_concurrency, - Body& body) : - base_type(g, max_concurrency), - my_body( new internal::multifunction_body_leaf(body) ), - my_init_body( new internal::multifunction_body_leaf(body) ) { + multifunction_input(graph &g, size_t max_concurrency, + __TBB_FLOW_GRAPH_PRIORITY_ARG1(Body& body, node_priority_t priority) + ) : base_type(g, __TBB_FLOW_GRAPH_PRIORITY_ARG1(max_concurrency, priority)) + , my_body( new internal::multifunction_body_leaf(body) ) + , my_init_body( new internal::multifunction_body_leaf(body) ) { } //! Copy constructor @@ -687,16 +691,20 @@ namespace internal { typedef continue_input class_type; template< typename Body > - continue_input( graph &g, Body& body ) - : my_graph_ref(g), - my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ), - my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { } + continue_input( graph &g, __TBB_FLOW_GRAPH_PRIORITY_ARG1(Body& body, node_priority_t priority) ) + : continue_receiver(__TBB_FLOW_GRAPH_PRIORITY_ARG1(/*number_of_predecessors=*/0, priority)) + , my_graph_ref(g) + , my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) + , my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) + { } template< typename Body > - continue_input( graph &g, int number_of_predecessors, Body& body ) - : continue_receiver( number_of_predecessors ), my_graph_ref(g), - my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ), - my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) + continue_input( graph &g, int number_of_predecessors, + __TBB_FLOW_GRAPH_PRIORITY_ARG1(Body& body, node_priority_t priority) + ) : continue_receiver( __TBB_FLOW_GRAPH_PRIORITY_ARG1(number_of_predecessors, priority) ) + , my_graph_ref(g) + , my_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) + , my_init_body( new internal::function_body_leaf< input_type, output_type, Body>(body) ) { } continue_input( const continue_input& src ) : continue_receiver(src), @@ -760,7 +768,8 @@ namespace internal { } else { return new ( task::allocate_additional_child_of( *(my_graph_ref.root_task()) ) ) - apply_body_task_bypass< class_type, continue_msg >( *this, continue_msg() ); + apply_body_task_bypass< class_type, continue_msg >( + *this, __TBB_FLOW_GRAPH_PRIORITY_ARG1(continue_msg(), my_priority) ); } } diff --git a/include/tbb/iterators.h b/include/tbb/iterators.h index 429a467b0c..85b3032dcf 100644 --- a/include/tbb/iterators.h +++ b/include/tbb/iterators.h @@ -22,18 +22,21 @@ #define __TBB_iterators_H #include +#include #include "tbb_config.h" #include "tbb_stddef.h" -#if __TBB_CPP11_DECLTYPE_PRESENT +#if __TBB_CPP11_PRESENT + +#include namespace tbb { template class counting_iterator { public: - typedef decltype(IntType()-IntType()) difference_type; + typedef typename std::make_signed::type difference_type; typedef IntType value_type; typedef const IntType* pointer; typedef const IntType& reference; @@ -78,11 +81,7 @@ class counting_iterator { }; } //namespace tbb -#endif //__TBB_CPP11_DECLTYPE_PRESENT - -#if __TBB_CPP11_PRESENT -#include #include #include "internal/_template_helpers.h" // index_sequence, make_index_sequence @@ -136,14 +135,14 @@ class zip_iterator { explicit zip_iterator(Types... args): my_it(std::make_tuple(args...)) {} - reference operator*() { + reference operator*() const { return tbb::internal::make_references()(my_it, tbb::internal::make_index_sequence()); } reference operator[](difference_type i) const { return *(*this + i); } difference_type operator-(const zip_iterator& it) const { __TBB_ASSERT(internal::tuple_util::check_sync(my_it, it.my_it, std::get<0>(my_it) - std::get<0>(it.my_it)), - "Components of zip_iterator are not synchronous"); + "Components of zip_iterator are not synchronous"); return std::get<0>(my_it) - std::get<0>(it.my_it); } @@ -192,6 +191,90 @@ class zip_iterator { template zip_iterator make_zip_iterator(T... args) { return zip_iterator(args...); } +template +class transform_iterator { +public: + typedef typename std::iterator_traits::value_type value_type; + typedef typename std::iterator_traits::difference_type difference_type; +#if __TBB_CPP17_INVOKE_RESULT_PRESENT + typedef typename std::invoke_result::reference>::type reference; +#else + typedef typename std::result_of::reference)>::type reference; +#endif + typedef typename std::iterator_traits::pointer pointer; + typedef typename std::random_access_iterator_tag iterator_category; + + transform_iterator(Iter it, UnaryFunc unary_func): my_it(it), my_unary_func(unary_func) { + __TBB_STATIC_ASSERT((std::is_same::iterator_category, + std::random_access_iterator_tag>::value), "Random access iterator required."); + } + transform_iterator(const transform_iterator& input) : my_it(input.my_it), my_unary_func(input.my_unary_func) { } + transform_iterator& operator=(const transform_iterator& input) { + my_it = input.my_it; + return *this; + } + reference operator*() const { + return my_unary_func(*my_it); + } + reference operator[](difference_type i) const { + return *(*this + i); + } + transform_iterator& operator++() { + ++my_it; + return *this; + } + transform_iterator& operator--() { + --my_it; + return *this; + } + transform_iterator operator++(int) { + transform_iterator it(*this); + ++(*this); + return it; + } + transform_iterator operator--(int) { + transform_iterator it(*this); + --(*this); + return it; + } + transform_iterator operator+(difference_type forward) const { + return { my_it + forward, my_unary_func }; + } + transform_iterator operator-(difference_type backward) const { + return { my_it - backward, my_unary_func }; + } + transform_iterator& operator+=(difference_type forward) { + my_it += forward; + return *this; + } + transform_iterator& operator-=(difference_type backward) { + my_it -= backward; + return *this; + } + friend transform_iterator operator+(difference_type forward, const transform_iterator& it) { + return it + forward; + } + difference_type operator-(const transform_iterator& it) const { + return my_it - it.my_it; + } + bool operator==(const transform_iterator& it) const { return *this - it == 0; } + bool operator!=(const transform_iterator& it) const { return !(*this == it); } + bool operator<(const transform_iterator& it) const { return *this - it < 0; } + bool operator>(const transform_iterator& it) const { return it < *this; } + bool operator<=(const transform_iterator& it) const { return !(*this > it); } + bool operator>=(const transform_iterator& it) const { return !(*this < it); } + + Iter base() const { return my_it; } +private: + Iter my_it; + const UnaryFunc my_unary_func; +}; + +template +transform_iterator make_transform_iterator(Iter it, UnaryFunc unary_func) { + return transform_iterator(it, unary_func); +} + } //namespace tbb #endif //__TBB_CPP11_PRESENT diff --git a/include/tbb/machine/linux_common.h b/include/tbb/machine/linux_common.h index 364bad26ae..7c5e034463 100644 --- a/include/tbb/machine/linux_common.h +++ b/include/tbb/machine/linux_common.h @@ -30,19 +30,44 @@ #include #if defined(SYS_futex) +/* This header file is included for Linux and some other systems that may support futexes.*/ #define __TBB_USE_FUTEX 1 + +#if defined(__has_include) +#define __TBB_has_include __has_include +#else +#define __TBB_has_include(x) 0 +#endif + +/* +If available, use typical headers where futex API is defined. While Linux and OpenBSD +are known to provide such headers, other systems might have them as well. +*/ +#if defined(__linux__) || __TBB_has_include() +#include +#elif defined(__OpenBSD__) || __TBB_has_include() +#include +#endif + #include #include -// Unfortunately, some versions of Linux do not have a header that defines FUTEX_WAIT and FUTEX_WAKE. -#ifdef FUTEX_WAIT +/* +Some systems might not define the macros or use different names. In such case we expect +the actual parameter values to match Linux: 0 for wait, 1 for wake. +*/ +#if defined(FUTEX_WAIT_PRIVATE) +#define __TBB_FUTEX_WAIT FUTEX_WAIT_PRIVATE +#elif defined(FUTEX_WAIT) #define __TBB_FUTEX_WAIT FUTEX_WAIT #else #define __TBB_FUTEX_WAIT 0 #endif -#ifdef FUTEX_WAKE +#if defined(FUTEX_WAKE_PRIVATE) +#define __TBB_FUTEX_WAKE FUTEX_WAKE_PRIVATE +#elif defined(FUTEX_WAKE) #define __TBB_FUTEX_WAKE FUTEX_WAKE #else #define __TBB_FUTEX_WAKE 1 diff --git a/include/tbb/task.h b/include/tbb/task.h index 1c22d5105a..1e7d84f229 100644 --- a/include/tbb/task.h +++ b/include/tbb/task.h @@ -162,6 +162,12 @@ namespace internal { void __TBB_EXPORTED_METHOD free( task& ) const; }; +#if __TBB_PREVIEW_CRITICAL_TASKS + // TODO: move to class methods when critical task API becomes public + void make_critical( task& t ); + bool is_critical( task& t ); +#endif + //! Memory prefix to a task object. /** This class is internal to the library. Do not reference it directly, except within the library itself. @@ -187,6 +193,10 @@ namespace internal { friend class internal::allocate_child_proxy; friend class internal::allocate_continuation_proxy; friend class internal::allocate_additional_child_of_proxy; +#if __TBB_PREVIEW_CRITICAL_TASKS + friend void make_critical( task& ); + friend bool is_critical( task& ); +#endif #if __TBB_TASK_ISOLATION //! The tag used for task isolation. @@ -274,6 +284,10 @@ namespace internal { #if __TBB_TASK_PRIORITY namespace internal { static const int priority_stride_v4 = INT_MAX / 4; +#if __TBB_PREVIEW_CRITICAL_TASKS + // TODO: move into priority_t enum when critical tasks become public feature + static const int priority_critical = priority_stride_v4 * 3 + priority_stride_v4 / 3 * 2; +#endif } enum priority_t { @@ -797,7 +811,12 @@ class task: __TBB_TASK_BASE_ACCESS interface5::internal::task_base { #if __TBB_TASK_PRIORITY //! Enqueue task for starvation-resistant execution on the specified priority level. static void enqueue( task& t, priority_t p ) { - __TBB_ASSERT( p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value" ); +#if __TBB_PREVIEW_CRITICAL_TASKS + __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high + || p == internal::priority_critical, "Invalid priority level value"); +#else + __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value"); +#endif t.prefix().owner->enqueue( t, (void*)p ); } #endif /* __TBB_TASK_PRIORITY */ @@ -920,8 +939,19 @@ class task: __TBB_TASK_BASE_ACCESS interface5::internal::task_base { internal::task_prefix& prefix( internal::version_tag* = NULL ) const { return reinterpret_cast(const_cast(this))[-1]; } +#if __TBB_PREVIEW_CRITICAL_TASKS + friend void internal::make_critical( task& ); + friend bool internal::is_critical( task& ); +#endif }; // class task +#if __TBB_PREVIEW_CRITICAL_TASKS +namespace internal { +inline void make_critical( task& t ) { t.prefix().extra_state |= 0x8; } +inline bool is_critical( task& t ) { return bool((t.prefix().extra_state & 0x8) != 0); } +} // namespace internal +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ + //! task that does nothing. Useful for synchronization. /** @ingroup task_scheduling */ class empty_task: public task { diff --git a/include/tbb/task_arena.h b/include/tbb/task_arena.h index 8cf115033e..fcdf6cdaed 100644 --- a/include/tbb/task_arena.h +++ b/include/tbb/task_arena.h @@ -313,12 +313,22 @@ class task_arena : public internal::task_arena_base { template #if __TBB_CPP11_RVALUE_REF_PRESENT void enqueue( F&& f, priority_t p ) { +#if __TBB_PREVIEW_CRITICAL_TASKS + __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high + || p == internal::priority_critical, "Invalid priority level value"); +#else __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value"); +#endif enqueue_impl(std::forward(f), p); } #else void enqueue( const F& f, priority_t p ) { +#if __TBB_PREVIEW_CRITICAL_TASKS + __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high + || p == internal::priority_critical, "Invalid priority level value"); +#else __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value"); +#endif enqueue_impl(f,p); } #endif diff --git a/include/tbb/tbb_config.h b/include/tbb/tbb_config.h index dd585c7048..07affd70d3 100644 --- a/include/tbb/tbb_config.h +++ b/include/tbb/tbb_config.h @@ -197,14 +197,7 @@ #endif #define __TBB_STATIC_ASSERT_PRESENT (__INTEL_CXX11_MODE__ || _MSC_VER >= 1600) #define __TBB_CPP11_TUPLE_PRESENT (_MSC_VER >= 1600 || __GXX_EXPERIMENTAL_CXX0X__ && (__TBB_GLIBCXX_VERSION >= 40300 || _LIBCPP_VERSION)) - #if (__clang__ && __INTEL_COMPILER > 1400) - /* Older versions of Intel C++ Compiler do not have __has_include */ - #if (__has_feature(__cxx_generalized_initializers__) && __has_include()) - #define __TBB_INITIALIZER_LISTS_PRESENT 1 - #endif - #else - #define __TBB_INITIALIZER_LISTS_PRESENT (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION)) - #endif + #define __TBB_INITIALIZER_LISTS_PRESENT (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400 && (_MSC_VER >= 1800 || __TBB_GLIBCXX_VERSION >= 40400 || _LIBCPP_VERSION)) #define __TBB_CONSTEXPR_PRESENT (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1400) #define __TBB_DEFAULTED_AND_DELETED_FUNC_PRESENT (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1200) /** ICC seems to disable support of noexcept event in c++11 when compiling in compatibility mode for gcc <4.6 **/ @@ -219,6 +212,7 @@ #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT (__INTEL_CXX11_MODE__ && __INTEL_COMPILER >= 1210) #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT (__cplusplus >= 201402L) #define __TBB_CPP17_DEDUCTION_GUIDES_PRESENT __INTEL_COMPILER > 1900 + #define __TBB_CPP17_INVOKE_RESULT_PRESENT (__cplusplus >= 201703L) #elif __clang__ /** TODO: these options need to be rechecked **/ #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __has_feature(__cxx_variadic_templates__) @@ -249,6 +243,7 @@ #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT __has_feature(cxx_alias_templates) #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT (__cplusplus >= 201402L) #define __TBB_CPP17_DEDUCTION_GUIDES_PRESENT (__has_feature(__cpp_deduction_guides)) + #define __TBB_CPP17_INVOKE_RESULT_PRESENT (__has_feature(__cpp_lib_is_invocable)) #elif __GNUC__ #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT __GXX_EXPERIMENTAL_CXX0X__ #define __TBB_CPP11_VARIADIC_FIXED_LENGTH_EXP_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700) @@ -275,6 +270,7 @@ #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT (__GXX_EXPERIMENTAL_CXX0X__ && __TBB_GCC_VERSION >= 40700) #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT (__cplusplus >= 201402L && __TBB_GCC_VERSION >= 50000) #define __TBB_CPP17_DEDUCTION_GUIDES_PRESENT (__cpp_deduction_guides >= 201606) + #define __TBB_CPP17_INVOKE_RESULT_PRESENT (__cplusplus >= 201703L && __TBB_GCC_VERSION >= 70000) #elif _MSC_VER // These definitions are also used with Intel C++ Compiler in "default" mode (__INTEL_CXX11_MODE__ == 0); // see a comment in "__INTEL_COMPILER" section above. @@ -300,6 +296,7 @@ #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT (_MSC_VER >= 1800) #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT (_MSC_VER >= 1900) #define __TBB_CPP17_DEDUCTION_GUIDES_PRESENT (_MSVC_LANG >= 201703L) + #define __TBB_CPP17_INVOKE_RESULT_PRESENT (__TBB_MSVC_CPP_VER >= 201703L && _MSC_VER >= 1914) #else #define __TBB_CPP11_VARIADIC_TEMPLATES_PRESENT 0 #define __TBB_CPP11_RVALUE_REF_PRESENT 0 @@ -321,6 +318,7 @@ #define __TBB_CPP11_TEMPLATE_ALIASES_PRESENT 0 #define __TBB_CPP14_INTEGER_SEQUENCE_PRESENT (__cplusplus >= 201402L) #define __TBB_CPP17_DEDUCTION_GUIDES_PRESENT 0 + #define __TBB_CPP17_INVOKE_RESULT_PRESENT 0 #endif // C++11 standard library features @@ -808,4 +806,13 @@ There are four cases that are supported: && __TBB_FLOW_GRAPH_CPP11_FEATURES && __TBB_CPP11_TEMPLATE_ALIASES_PRESENT \ && __TBB_CPP11_FUTURE_PRESENT) + +#ifndef __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES +#define __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES TBB_PREVIEW_FLOW_GRAPH_FEATURES +#endif + +#ifndef __TBB_PREVIEW_CRITICAL_TASKS +#define __TBB_PREVIEW_CRITICAL_TASKS (__TBB_CPF_BUILD || __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES) +#endif + #endif /* __TBB_tbb_config_H */ diff --git a/include/tbb/tbb_stddef.h b/include/tbb/tbb_stddef.h index a177421b10..83803ce042 100644 --- a/include/tbb/tbb_stddef.h +++ b/include/tbb/tbb_stddef.h @@ -26,7 +26,7 @@ #define TBB_VERSION_MINOR 0 // Engineering-focused interface version -#define TBB_INTERFACE_VERSION 11002 +#define TBB_INTERFACE_VERSION 11003 #define TBB_INTERFACE_VERSION_MAJOR TBB_INTERFACE_VERSION/1000 // The oldest major interface version still supported diff --git a/src/perf/time_async_return.cpp b/src/perf/time_async_return.cpp new file mode 100644 index 0000000000..a4c9b94614 --- /dev/null +++ b/src/perf/time_async_return.cpp @@ -0,0 +1,224 @@ +/* + Copyright (c) 2005-2018 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +/* + This microbenchmark measures prioritization of the tasks that were spawned to execute async_node + successor's body. The idea of the prioritization is to have TBB worker threads react eagerly on + the work, which was returned back to the graph through async_node's gateway interface while + being occupied by CPU work generated by function_node with nested parallelism. Worker threads + should prefer async_node task instead of next parallel_for task. The result of correct work + prioritization is the interleaving of CPU and ASYNC work: + + ASYNC task=1 started, thread_idx=0 + CPU task=1 started, thread_idx=0 + CPU task=1, nested pfor task=0, thread_idx=0 + CPU task=1, nested pfor task=4, thread_idx=1 + ASYNC task=1 finished, thread_idx=0 + ASYNC task=2 started, thread_idx=0 + CPU task=1, nested pfor task=1, thread_idx=0 + CPU task=1, nested pfor task=5, thread_idx=1 + ASYNC task=2 finished, thread_idx=0 + ASYNC task=3 started, thread_idx=0 + CPU task=1, nested pfor task=2, thread_idx=0 + CPU task=1, nested pfor task=6, thread_idx=1 + ASYNC task=3 finished, thread_idx=0 + ASYNC task=4 started, thread_idx=0 + CPU task=1, nested pfor task=3, thread_idx=0 + CPU task=1, nested pfor task=7, thread_idx=1 + ASYNC task=4 finished, thread_idx=0 + ASYNC task=5 started, thread_idx=0 + CPU task=1 finished, thread_idx=0 + CPU task=2 started, thread_idx=0 + CPU task=2, nested pfor task=0, thread_idx=0 + CPU task=2, nested pfor task=4, thread_idx=1 + CPU task=2, nested pfor task=5, thread_idx=1 + ASYNC task=5 finished, thread_idx=0 + ASYNC task=6 started, thread_idx=0 + CPU task=2, nested pfor task=1, thread_idx=0 + ASYNC task=6 finished, thread_idx=1 + CPU task=2, nested pfor task=2, thread_idx=0 + ASYNC task=7 started, thread_idx=1 + CPU task=2, nested pfor task=6, thread_idx=1 + ASYNC task=7 finished, thread_idx=0 + ASYNC task=8 started, thread_idx=0 + CPU task=2, nested pfor task=7, thread_idx=1 + CPU task=2, nested pfor task=3, thread_idx=0 + CPU task=2 finished, thread_idx=0 + ASYNC task=8 finished, thread_idx=1 + Elapsed time: 8.002 + + The parameters are chosen so that CPU and ASYNC work take approximately the same time. +*/ + +#include "tbb/task_scheduler_init.h" +#include "tbb/parallel_for.h" +#include "tbb/concurrent_queue.h" +#include "tbb/tick_count.h" +#include "tbb/tbb_thread.h" +#include "tbb/flow_graph.h" +#include "tbb/task_arena.h" +#include +#include + +const int NUM_THREADS = 2; // number of threads TBB is initialized with +const int CPU_LIMIT = 2; // number of repetitions of sub-graph with function_node +const double CPU_SPIN = 1.; // execution time of every parallel_for task +const int NESTED_CPU_TASKS_COUNT = 4 * NUM_THREADS; // number of parallel_for tasks +const int ASYNC_LIMIT = 8; // number of repetitions of sub-graph with async_node +const double ASYNC_SPIN = 0.5; // execution time of every async_node work + +void spin(double s) { + tbb::tick_count start = tbb::tick_count::now(); + while ((tbb::tick_count::now() - start).seconds() < s); +} + +typedef int data_type; +typedef tbb::flow::async_node async_node_type; +typedef tbb::flow::multifunction_node > decider_node_type; + +struct AsyncActivity { + typedef async_node_type::gateway_type gateway_type; + + struct work_type { + data_type input; + gateway_type* gateway; + }; + bool done; + bool end_of_work() { return done; } + tbb::concurrent_queue my_queue; + tbb::tbb_thread my_service_thread; + + struct ServiceThreadFunc { + void operator()(AsyncActivity* activity) { + while (!activity->end_of_work()) { + work_type work; + while (activity->my_queue.try_pop(work)) { + spin(ASYNC_SPIN); // do work + work.gateway->try_put(work.input); + work.gateway->release_wait(); + } + } + } + }; + + void stop_and_wait() { + done = true; + my_service_thread.join(); + } + + void submit(data_type input, gateway_type* gateway) { + work_type work = { input, gateway }; + gateway->reserve_wait(); + my_queue.push(work); + } + + AsyncActivity() : done(false), my_service_thread(ServiceThreadFunc(), this) {} +}; + +struct StartBody { + bool has_run; + bool operator()(data_type& input) { + if (has_run) return false; + else { + input = 1; + has_run = true; + return true; + } + } + StartBody() : has_run(false) {} +}; + +struct ParallelForBody { + const data_type& my_input; + ParallelForBody(const data_type& input) : my_input(input) {} + void operator()(const data_type& p) const { + std::printf(" CPU task=%d, nested pfor task=%d, thread_idx=%d\n", my_input, p, + tbb::this_task_arena::current_thread_index()); + spin(CPU_SPIN); + } +}; + +struct CpuWorkBody { + const int parallel_for_tasks_count; + data_type operator()(const data_type& input) { + std::printf("CPU task=%d started, thread_idx=%d\n", input, + tbb::this_task_arena::current_thread_index()); + tbb::parallel_for(0, parallel_for_tasks_count, ParallelForBody(input)); + return input; + } + CpuWorkBody() : parallel_for_tasks_count(NESTED_CPU_TASKS_COUNT) {} +}; + +struct DeciderBody { + const int& my_limit; + DeciderBody( const int& limit ) : my_limit( limit ) {} + void operator()(data_type input, decider_node_type::output_ports_type& ports) { + const char* work_type = my_limit == ASYNC_LIMIT ? "ASYNC" : "CPU"; + std::printf("%s task=%d finished, thread_idx=%d\n", work_type, input, + tbb::this_task_arena::current_thread_index()); + if (input < my_limit) + tbb::flow::get<0>(ports).try_put(input + 1); + else + tbb::flow::get<1>(ports).try_put(input + 1); + } +}; + +struct AsyncSubmissionBody { + AsyncActivity* my_activity; + void operator()(data_type input, async_node_type::gateway_type& gateway) { + my_activity->submit(input, &gateway); + std::printf("ASYNC task=%d started, thread_idx=%d\n", input, + tbb::this_task_arena::current_thread_index()); + } + AsyncSubmissionBody(AsyncActivity* activity) : my_activity(activity) {} +}; + +int main() { + tbb::task_scheduler_init init(NUM_THREADS); + AsyncActivity activity; + tbb::flow::graph g; + + tbb::flow::source_node starter_node(g, StartBody(), false); + tbb::flow::function_node cpu_work_node(g, tbb::flow::unlimited, CpuWorkBody()); + decider_node_type cpu_restarter_node(g, tbb::flow::unlimited, DeciderBody(CPU_LIMIT)); + async_node_type async_node(g, tbb::flow::unlimited, AsyncSubmissionBody(&activity)); + decider_node_type async_restarter_node(g, tbb::flow::unlimited, DeciderBody(ASYNC_LIMIT) +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + , /*priority=*/1 +#endif + ); + + tbb::flow::make_edge(starter_node, cpu_work_node); + tbb::flow::make_edge(cpu_work_node, cpu_restarter_node); + tbb::flow::make_edge(tbb::flow::output_port<0>(cpu_restarter_node), cpu_work_node); + + tbb::flow::make_edge(starter_node, async_node); + tbb::flow::make_edge(async_node, async_restarter_node); + tbb::flow::make_edge(tbb::flow::output_port<0>(async_restarter_node), async_node); + + tbb::tick_count start_time = tbb::tick_count::now(); + starter_node.activate(); + g.wait_for_all(); + activity.stop_and_wait(); + std::printf("Elapsed time: %lf seconds\n", (tbb::tick_count::now() - start_time).seconds()); + + return 0; +} diff --git a/src/perf/time_hash_map_fill.html b/src/perf/time_hash_map_fill.html index f9f04373ae..379df27e56 100644 --- a/src/perf/time_hash_map_fill.html +++ b/src/perf/time_hash_map_fill.html @@ -8,7 +8,7 @@

    time_hash_map_fill

    Diagram

    Prepare results

    -

    This benchmark outputs results in Excel* and html file formats by default. To generate text (CSV) file instead, specify STAT_FORMAT=pivot-csv evironment variable. To change the default table size, set TABLE_SIZE. +

    This benchmark outputs results in Excel* and html file formats by default. To generate text (CSV) file instead, specify STAT_FORMAT=pivot-csv environment variable. To change the default table size, set TABLE_SIZE.

    src$    make time_hash_map_fill args=-v STAT_FORMAT=pivot-csv TABLE_SIZE=250000
    Or to get statistics from different runs:
    src$    make time_hash_map_fill TABLE_SIZE=50000 run_cmd="bash ../../src/perf/run_statistics.sh"

    diff --git a/src/tbb/arena.cpp b/src/tbb/arena.cpp index f9625c2486..7761802869 100644 --- a/src/tbb/arena.cpp +++ b/src/tbb/arena.cpp @@ -218,12 +218,19 @@ arena::arena ( market& m, unsigned num_slots, unsigned num_reserved_slots ) { mailbox(i+1).construct(); ITT_SYNC_CREATE(&mailbox(i+1), SyncType_Scheduler, SyncObj_Mailbox); my_slots[i].hint_for_pop = i; +#if __TBB_PREVIEW_CRITICAL_TASKS + my_slots[i].hint_for_critical = i; +#endif #if __TBB_STATISTICS my_slots[i].my_counters = new ( NFS_Allocate(1, sizeof(statistics_counters), NULL) ) statistics_counters; #endif /* __TBB_STATISTICS */ } my_task_stream.initialize(my_num_slots); ITT_SYNC_CREATE(&my_task_stream, SyncType_Scheduler, SyncObj_TaskStream); +#if __TBB_PREVIEW_CRITICAL_TASKS + my_critical_task_stream.initialize(my_num_slots); + ITT_SYNC_CREATE(&my_critical_task_stream, SyncType_Scheduler, SyncObj_CriticalTaskStream); +#endif #if __TBB_ENQUEUE_ENFORCED_CONCURRENCY my_concurrency_mode = cm_normal; #endif @@ -268,6 +275,9 @@ void arena::free_arena () { drained += mailbox(i+1).drain(); } __TBB_ASSERT( my_task_stream.drain()==0, "Not all enqueued tasks were executed"); +#if __TBB_PREVIEW_CRITICAL_TASKS + __TBB_ASSERT( my_critical_task_stream.drain()==0, "Not all critical tasks were executed"); +#endif #if __TBB_COUNT_TASK_NODES my_market->update_task_node_count( -drained ); #endif /* __TBB_COUNT_TASK_NODES */ @@ -431,6 +441,10 @@ bool arena::is_out_of_work() { } __TBB_ASSERT( k <= n, NULL ); bool work_absent = k == n; +#if __TBB_PREVIEW_CRITICAL_TASKS + bool no_critical_tasks = my_critical_task_stream.empty(0); + work_absent &= no_critical_tasks; +#endif #if __TBB_TASK_PRIORITY // Variable tasks_present indicates presence of tasks at any priority // level, while work_absent refers only to the current priority. @@ -560,17 +574,48 @@ void arena::enqueue_task( task& t, intptr_t prio, FastRandom &random ) } __TBB_ASSERT(t.prefix().affinity==affinity_id(0), "affinity is ignored for enqueued tasks"); #endif /* TBB_USE_ASSERT */ +#if __TBB_PREVIEW_CRITICAL_TASKS + if( prio == internal::priority_critical || internal::is_critical( t ) ) { + // TODO: consider using of 'scheduler::handled_as_critical' + internal::make_critical( t ); +#if __TBB_TASK_ISOLATION + generic_scheduler* s = governor::local_scheduler_if_initialized(); + __TBB_ASSERT( s, "Scheduler must be initialized at this moment" ); + // propagate isolation level to critical task + t.prefix().isolation = s->my_innermost_running_task->prefix().isolation; +#endif + ITT_NOTIFY(sync_releasing, &my_critical_task_stream); + if( !s || !s->my_arena_slot ) { + // Either scheduler is not initialized or it is not attached to the arena, use random + // lane for the task. + my_critical_task_stream.push( &t, 0, internal::random_lane_selector(random) ); + } else { + unsigned& lane = s->my_arena_slot->hint_for_critical; + my_critical_task_stream.push( &t, 0, tbb::internal::subsequent_lane_selector(lane) ); + } + advertise_new_work(); + return; + } +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ ITT_NOTIFY(sync_releasing, &my_task_stream); #if __TBB_TASK_PRIORITY intptr_t p = prio ? normalize_priority(priority_t(prio)) : normalized_normal_priority; assert_priority_valid(p); +#if __TBB_PREVIEW_CRITICAL_TASKS && __TBB_CPF_BUILD + my_task_stream.push( &t, p, internal::random_lane_selector(random) ); +#else my_task_stream.push( &t, p, random ); +#endif if ( p != my_top_priority ) my_market->update_arena_priority( *this, p ); #else /* !__TBB_TASK_PRIORITY */ __TBB_ASSERT_EX(prio == 0, "the library is not configured to respect the task priority"); +#if __TBB_PREVIEW_CRITICAL_TASKS && __TBB_CPF_BUILD + my_task_stream.push( &t, 0, internal::random_lane_selector(random) ); +#else my_task_stream.push( &t, 0, random ); +#endif #endif /* !__TBB_TASK_PRIORITY */ advertise_new_work(); #if __TBB_TASK_PRIORITY @@ -620,6 +665,9 @@ class nested_arena_context : no_copy { my_scheduler.my_properties.outermost = true; my_scheduler.my_properties.type = type; my_scheduler.my_innermost_running_task = my_scheduler.my_dummy_task; +#if __TBB_PREVIEW_CRITICAL_TASKS + my_scheduler.my_properties.has_taken_critical_task = false; +#endif #if __TBB_TASK_GROUP_CONTEXT // Save dummy's context and replace it by arena's context my_orig_ctx = my_scheduler.my_dummy_task->prefix().context; diff --git a/src/tbb/arena.h b/src/tbb/arena.h index 73da4c0349..7e902056d9 100644 --- a/src/tbb/arena.h +++ b/src/tbb/arena.h @@ -28,7 +28,11 @@ #include "scheduler_common.h" #include "intrusive_list.h" +#if __TBB_PREVIEW_CRITICAL_TASKS && __TBB_CPF_BUILD +#include "task_stream_extended.h" +#else #include "task_stream.h" +#endif #include "../rml/include/rml_tbb.h" #include "mailbox.h" #include "observer_proxy.h" @@ -70,7 +74,20 @@ struct arena_base : padded { relaxed FIFO order); - the enqueuing thread does not call any of wait_for_all methods. Depending on __TBB_TASK_PRIORITY, num_priority_levels can be 1 or more. **/ +#if __TBB_PREVIEW_CRITICAL_TASKS && __TBB_CPF_BUILD + task_stream my_task_stream; // heavy use in stealing loop +#else task_stream my_task_stream; // heavy use in stealing loop +#endif + +#if __TBB_PREVIEW_CRITICAL_TASKS + //! Task pool for the tasks with critical property set. + /** Critical tasks are scheduled for execution ahead of other sources (including local task pool + and even bypassed tasks) unless the thread already executes a critical task in an outer + dispatch loop **/ + // used on the hot path of the task dispatch loop + task_stream<1, back_nonnull_accessor> my_critical_task_stream; +#endif //! The number of workers requested by the master thread owning the arena. unsigned my_max_num_workers; @@ -448,6 +465,7 @@ template void arena::advertise_new_work() { } } #endif /* __TBB_ENQUEUE_ENFORCED_CONCURRENCY */ + // TODO: investigate adjusting of arena's demand by a single worker. my_market->adjust_demand( *this, my_max_num_workers ); } } diff --git a/src/tbb/custom_scheduler.h b/src/tbb/custom_scheduler.h index 2e6f874c61..3c7ab7e63e 100644 --- a/src/tbb/custom_scheduler.h +++ b/src/tbb/custom_scheduler.h @@ -109,6 +109,12 @@ class custom_scheduler: private generic_scheduler { #endif /*__TBB_RECYCLE_TO_ENQUEUE*/ if( bypass_slot==NULL ) bypass_slot = &s; +#if __TBB_PREVIEW_CRITICAL_TASKS + else if( internal::is_critical( s ) ) { + local_spawn( bypass_slot, bypass_slot->prefix().next ); + bypass_slot = &s; + } +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ else local_spawn( &s, s.prefix().next ); } @@ -218,7 +224,13 @@ task* custom_scheduler::receive_or_steal_task( __TBB_ISOLATION_ // Check if there are tasks in starvation-resistant stream. // Only allowed at the outermost dispatch level without isolation. else if (__TBB_ISOLATION_EXPR(isolation == no_isolation &&) outermost_dispatch_level && - !my_arena->my_task_stream.empty(p) && (t = my_arena->my_task_stream.pop( p, my_arena_slot->hint_for_pop)) ) { + !my_arena->my_task_stream.empty(p) && ( +#if __TBB_PREVIEW_CRITICAL_TASKS && __TBB_CPF_BUILD + t = my_arena->my_task_stream.pop( p, subsequent_lane_selector(my_arena_slot->hint_for_pop) ) +#else + t = my_arena->my_task_stream.pop( p, my_arena_slot->hint_for_pop ) +#endif + ) ) { ITT_NOTIFY(sync_acquired, &my_arena->my_task_stream); // just proceed with the obtained task } @@ -229,38 +241,16 @@ task* custom_scheduler::receive_or_steal_task( __TBB_ISOLATION_ // just proceed with the obtained task } #endif /* __TBB_TASK_PRIORITY */ - else if ( can_steal_here && n ) { - // Try to steal a task from a random victim. - size_t k = my_random.get() % n; - arena_slot* victim = &my_arena->my_slots[k]; - // The following condition excludes the master that might have - // already taken our previous place in the arena from the list . - // of potential victims. But since such a situation can take - // place only in case of significant oversubscription, keeping - // the checks simple seems to be preferable to complicating the code. - if( k >= my_arena_index ) - ++victim; // Adjusts random distribution to exclude self - task **pool = victim->task_pool; - if( pool == EmptyTaskPool || !(t = steal_task( __TBB_ISOLATION_ARG(*victim, isolation) )) ) - goto fail; - if( is_proxy(*t) ) { - task_proxy &tp = *(task_proxy*)t; - t = tp.extract_task(); - if ( !t ) { - // Proxy was empty, so it's our responsibility to free it - free_task(tp); - goto fail; - } - GATHER_STATISTIC( ++my_counters.proxies_stolen ); - } - t->prefix().extra_state |= es_task_is_stolen; - if( is_version_3_task(*t) ) { - my_innermost_running_task = t; - t->prefix().owner = this; - t->note_affinity( my_affinity_id ); - } - GATHER_STATISTIC( ++my_counters.steals_committed ); - } // end of stealing branch + else if ( can_steal_here && n && (t = steal_task( __TBB_ISOLATION_EXPR(isolation) )) ) { + // just proceed with the obtained task + } +#if __TBB_PREVIEW_CRITICAL_TASKS + else if( (t = get_critical_task( __TBB_ISOLATION_EXPR(isolation) )) ) { + __TBB_ASSERT( internal::is_critical(*t), "Received task must be critical one" ); + ITT_NOTIFY(sync_acquired, &my_arena->my_critical_task_stream); + // just proceed with the obtained task + } +#endif // __TBB_PREVIEW_CRITICAL_TASKS else goto fail; // A task was successfully obtained somewhere @@ -433,7 +423,6 @@ void custom_scheduler::local_wait_for_all( task& parent, task* } #endif /* __TBB_TASK_ISOLATION */ } - #if TBB_USE_EXCEPTIONS // Infinite safeguard EH loop for (;;) { @@ -463,33 +452,53 @@ void custom_scheduler::local_wait_for_all( task& parent, task* // TODO: make the assert stronger by prohibiting allocated state. __TBB_ASSERT( 1L<state() & (1L<my_critical_task_stream); + t->prefix().state = task::allocated; + my_innermost_running_task = t; // required during spawn to propagate isolation + local_spawn(t, t->prefix().next); + t = critical_task; + } else { +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ #if __TBB_TASK_PRIORITY - intptr_t p = priority(*t); - if ( p != *my_ref_top_priority && (t->prefix().extra_state & es_task_enqueued) == 0) { - assert_priority_valid(p); - if ( p != my_arena->my_top_priority ) { - my_market->update_arena_priority( *my_arena, p ); - } - if ( p < effective_reference_priority() ) { - if ( !my_offloaded_tasks ) { - my_offloaded_task_list_tail_link = &t->prefix().next_offloaded; - // Erase possible reference to the owner scheduler (next_offloaded is a union member) - *my_offloaded_task_list_tail_link = NULL; - } - offload_task( *t, p ); - if ( is_task_pool_published() ) { - t = winnow_task_pool( __TBB_ISOLATION_EXPR( isolation ) ); - if ( t ) - continue; - } else { - // Mark arena as full to unlock arena priority level adjustment - // by arena::is_out_of_work(), and ensure worker's presence. - my_arena->advertise_new_work(); + intptr_t p = priority(*t); + if ( p != *my_ref_top_priority + && (t->prefix().extra_state & es_task_enqueued) == 0 ) { + assert_priority_valid(p); + if ( p != my_arena->my_top_priority ) { + my_market->update_arena_priority( *my_arena, p ); + } + if ( p < effective_reference_priority() ) { + if ( !my_offloaded_tasks ) { + my_offloaded_task_list_tail_link = &t->prefix().next_offloaded; + // Erase possible reference to the owner scheduler + // (next_offloaded is a union member) + *my_offloaded_task_list_tail_link = NULL; + } + offload_task( *t, p ); + if ( is_task_pool_published() ) { + t = winnow_task_pool( __TBB_ISOLATION_EXPR( isolation ) ); + if ( t ) + continue; + } else { + // Mark arena as full to unlock arena priority level adjustment + // by arena::is_out_of_work(), and ensure worker's presence. + my_arena->advertise_new_work(); + } + goto stealing_ground; + } } - goto stealing_ground; - } - } #endif /* __TBB_TASK_PRIORITY */ +#if __TBB_PREVIEW_CRITICAL_TASKS + } + } // if is not critical +#endif task* t_next = NULL; my_innermost_running_task = t; t->prefix().owner = this; @@ -506,11 +515,14 @@ void custom_scheduler::local_wait_for_all( task& parent, task* GATHER_STATISTIC( my_counters.avg_market_prio += my_market->my_global_top_priority ); #endif /* __TBB_TASK_PRIORITY */ ITT_STACK(SchedulerTraits::itt_possible, callee_enter, t->prefix().context->itt_caller); +#if __TBB_PREVIEW_CRITICAL_TASKS + internal::critical_task_count_guard tc_guard(my_properties, *t); +#endif t_next = t->execute(); ITT_STACK(SchedulerTraits::itt_possible, callee_leave, t->prefix().context->itt_caller); if (t_next) { __TBB_ASSERT( t_next->state()==task::allocated, - "if task::execute() returns task, it must be marked as allocated" ); + "if task::execute() returns task, it must be marked as allocated" ); reset_extra_state(t_next); __TBB_ISOLATION_EXPR( t_next->prefix().isolation = t->prefix().isolation ); #if TBB_USE_ASSERT @@ -518,7 +530,7 @@ void custom_scheduler::local_wait_for_all( task& parent, task* if (next_affinity != 0 && next_affinity != my_affinity_id) GATHER_STATISTIC( ++my_counters.affinity_ignored ); #endif - } + } // if there is bypassed task } assert_task_pool_valid(); switch( t->state() ) { @@ -621,7 +633,6 @@ void custom_scheduler::local_wait_for_all( task& parent, task* t = receive_or_steal_task( __TBB_ISOLATION_ARG( parent.prefix().ref_count, isolation ) ); if ( !t ) goto done; - // The user can capture another the FPU settings to the context so the // cached data in the helper can be out-of-date and we cannot do fast // check. diff --git a/src/tbb/itt_notify.cpp b/src/tbb/itt_notify.cpp index 4d9d986b8e..31c5559e9c 100644 --- a/src/tbb/itt_notify.cpp +++ b/src/tbb/itt_notify.cpp @@ -88,6 +88,9 @@ namespace tbb { *SyncObj_Mailbox = _T("TBB Scheduler"), *SyncObj_TaskReturnList = _T("TBB Scheduler"), *SyncObj_TaskStream = _T("TBB Scheduler"), +#if __TBB_PREVIEW_CRITICAL_TASKS + *SyncObj_CriticalTaskStream = _T("TBB Scheduler"), +#endif *SyncObj_ContextsList = _T("TBB Scheduler") ; #endif /* DO_ITT_NOTIFY */ diff --git a/src/tbb/itt_notify.h b/src/tbb/itt_notify.h index b6d119a95f..32d5d9d619 100644 --- a/src/tbb/itt_notify.h +++ b/src/tbb/itt_notify.h @@ -85,6 +85,9 @@ namespace tbb { *SyncObj_Mailbox, *SyncObj_TaskReturnList, *SyncObj_TaskStream, +#if __TBB_PREVIEW_CRITICAL_TASKS + *SyncObj_CriticalTaskStream, +#endif *SyncObj_ContextsList ; diff --git a/src/tbb/scheduler.cpp b/src/tbb/scheduler.cpp index 7398058726..288bd1ad0a 100644 --- a/src/tbb/scheduler.cpp +++ b/src/tbb/scheduler.cpp @@ -98,6 +98,9 @@ generic_scheduler::generic_scheduler( market& m ) __TBB_ASSERT( governor::is_set(NULL), "scheduler is already initialized for this thread" ); my_innermost_running_task = my_dummy_task = &allocate_task( sizeof(task), __TBB_CONTEXT_ARG(NULL, &the_dummy_context) ); +#if __TBB_PREVIEW_CRITICAL_TASKS + my_properties.has_taken_critical_task = false; +#endif my_properties.outermost = true; #if __TBB_TASK_PRIORITY my_ref_top_priority = &m.my_global_top_priority; @@ -260,6 +263,9 @@ void generic_scheduler::cleanup_local_context_list () { void generic_scheduler::free_scheduler() { __TBB_ASSERT( !my_arena_slot, NULL ); +#if __TBB_PREVIEW_CRITICAL_TASKS + __TBB_ASSERT( !my_properties.has_taken_critical_task, "Critical tasks miscount." ); +#endif #if __TBB_TASK_GROUP_CONTEXT cleanup_local_context_list(); #endif /* __TBB_TASK_GROUP_CONTEXT */ @@ -591,6 +597,22 @@ inline task* generic_scheduler::prepare_for_spawning( task* t ) { return t; } +#if __TBB_PREVIEW_CRITICAL_TASKS +bool generic_scheduler::handled_as_critical( task& t ) { + if( !internal::is_critical( t ) ) + return false; +#if __TBB_TASK_ISOLATION + t.prefix().isolation = my_innermost_running_task->prefix().isolation; +#endif + ITT_NOTIFY(sync_releasing, &my_arena->my_critical_task_stream); + __TBB_ASSERT( my_arena, "Must be attached to the arena." ); + __TBB_ASSERT( my_arena_slot, "Must occupy a slot in the attached arena" ); + my_arena->my_critical_task_stream.push( + &t, 0, tbb::internal::subsequent_lane_selector(my_arena_slot->hint_for_critical) ); + return true; +} +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ + /** Conceptually, this method should be a member of class scheduler. But doing so would force us to publish class scheduler in the headers. */ void generic_scheduler::local_spawn( task* first, task*& next ) { @@ -609,9 +631,16 @@ void generic_scheduler::local_spawn( task* first, task*& next ) { // change the implementation of the task_list class). But since such changes // may affect the binary compatibility, we postpone them for a while. #endif - size_t T = prepare_task_pool( 1 ); - my_arena_slot->task_pool_ptr[T] = prepare_for_spawning( first ); - commit_spawned_tasks( T + 1 ); +#if __TBB_PREVIEW_CRITICAL_TASKS + if( !handled_as_critical( *first ) ) +#endif + { + size_t T = prepare_task_pool( 1 ); + my_arena_slot->task_pool_ptr[T] = prepare_for_spawning( first ); + commit_spawned_tasks( T + 1 ); + if ( !is_task_pool_published() ) + publish_task_pool(); + } } else { // Task list is being spawned @@ -634,17 +663,21 @@ void generic_scheduler::local_spawn( task* first, task*& next ) { // So milk it while it is alive. bool end = &t->prefix().next == &next; t_next = t->prefix().next; - tasks.push_back( prepare_for_spawning(t) ); +#if __TBB_PREVIEW_CRITICAL_TASKS + if( !handled_as_critical( *t ) ) +#endif + tasks.push_back( prepare_for_spawning(t) ); if( end ) break; } - size_t num_tasks = tasks.size(); - size_t T = prepare_task_pool( num_tasks ); - tasks.copy_memory( my_arena_slot->task_pool_ptr + T ); - commit_spawned_tasks( T + num_tasks ); + if( size_t num_tasks = tasks.size() ) { + size_t T = prepare_task_pool( num_tasks ); + tasks.copy_memory( my_arena_slot->task_pool_ptr + T ); + commit_spawned_tasks( T + num_tasks ); + if ( !is_task_pool_published() ) + publish_task_pool(); + } } - if ( !is_task_pool_published() ) - publish_task_pool(); my_arena->advertise_new_work(); assert_task_pool_valid(); } @@ -1039,7 +1072,42 @@ inline task* generic_scheduler::get_task( __TBB_ISOLATION_EXPR( isolation_tag is return result; } // generic_scheduler::get_task -task* generic_scheduler::steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_slot, isolation_tag isolation ) ) { +task* generic_scheduler::steal_task( __TBB_ISOLATION_EXPR(isolation_tag isolation) ) { + // Try to steal a task from a random victim. + size_t k = my_random.get() % (my_arena->my_limit-1); + arena_slot* victim = &my_arena->my_slots[k]; + // The following condition excludes the master that might have + // already taken our previous place in the arena from the list . + // of potential victims. But since such a situation can take + // place only in case of significant oversubscription, keeping + // the checks simple seems to be preferable to complicating the code. + if( k >= my_arena_index ) + ++victim; // Adjusts random distribution to exclude self + task **pool = victim->task_pool; + task *t = NULL; + if( pool == EmptyTaskPool || !(t = steal_task_from( __TBB_ISOLATION_ARG(*victim, isolation) )) ) + return NULL; + if( is_proxy(*t) ) { + task_proxy &tp = *(task_proxy*)t; + t = tp.extract_task(); + if ( !t ) { + // Proxy was empty, so it's our responsibility to free it + free_task(tp); + return NULL; + } + GATHER_STATISTIC( ++my_counters.proxies_stolen ); + } + t->prefix().extra_state |= es_task_is_stolen; + if( is_version_3_task(*t) ) { + my_innermost_running_task = t; + t->prefix().owner = this; + t->note_affinity( my_affinity_id ); + } + GATHER_STATISTIC( ++my_counters.steals_committed ); + return t; +} + +task* generic_scheduler::steal_task_from( __TBB_ISOLATION_ARG( arena_slot& victim_slot, isolation_tag isolation ) ) { task** victim_pool = lock_task_pool( &victim_slot ); if ( !victim_pool ) return NULL; @@ -1104,6 +1172,31 @@ task* generic_scheduler::steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_slo return result; } +#if __TBB_PREVIEW_CRITICAL_TASKS +// Retrieves critical task respecting isolation level, if provided. The rule is: +// 1) If no outer critical task and no isolation => take any critical task +// 2) If working on an outer critical task and no isolation => cannot take any critical task +// 3) If no outer critical task but isolated => respect isolation +// 4) If working on an outer critical task and isolated => respect isolation +task* generic_scheduler::get_critical_task( __TBB_ISOLATION_EXPR(isolation_tag isolation) ) { + __TBB_ASSERT( my_arena && my_arena_slot, "Must be attached to arena" ); + if( my_arena->my_critical_task_stream.empty(0) ) + return NULL; + task* critical_task = NULL; + // To keep some LIFO-ness, start search with the lane that was used during push operation. + unsigned& start_lane = my_arena_slot->hint_for_critical; +#if __TBB_TASK_ISOLATION + if( isolation != no_isolation ) { + critical_task = my_arena->my_critical_task_stream.pop_specific( 0, start_lane, isolation ); + } else +#endif + if( !my_properties.has_taken_critical_task ) { + critical_task = my_arena->my_critical_task_stream.pop( 0, preceding_lane_selector(start_lane) ); + } + return critical_task; +} +#endif + task* generic_scheduler::get_mailbox_task( __TBB_ISOLATION_EXPR( isolation_tag isolation ) ) { __TBB_ASSERT( my_affinity_id>0, "not in arena" ); while ( task_proxy* const tp = my_inbox.pop( __TBB_ISOLATION_EXPR( isolation ) ) ) { diff --git a/src/tbb/scheduler.h b/src/tbb/scheduler.h index 16b0fc1762..3f5a35c1e6 100644 --- a/src/tbb/scheduler.h +++ b/src/tbb/scheduler.h @@ -55,8 +55,16 @@ struct scheduler_properties { //! Indicates that a scheduler is on outermost level. /** Note that the explicit execute method will set this property. **/ bool outermost : 1; +#if __TBB_PREVIEW_CRITICAL_TASKS + //! Indicates that a scheduler is in the process of executing critical task(s). + bool has_taken_critical_task : 1; + + //! Reserved bits + unsigned char : 5; +#else //! Reserved bits unsigned char : 6; +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ }; struct scheduler_state { @@ -72,6 +80,7 @@ struct scheduler_state { //! Innermost task whose task::execute() is running. A dummy task on the outermost level. task* my_innermost_running_task; + mail_inbox my_inbox; //! The mailbox id assigned to this scheduler. @@ -122,7 +131,11 @@ class generic_scheduler: public scheduler static const size_t quick_task_size = 256-task_prefix_reservation_size; static bool is_version_3_task( task& t ) { +#if __TBB_PREVIEW_CRITICAL_TASKS + return (t.prefix().extra_state & 0x7)>=0x1; +#else return (t.prefix().extra_state & 0x0F)>=0x1; +#endif } //! Position in the call stack specifying its maximal filling when stealing is still allowed @@ -261,8 +274,20 @@ class generic_scheduler: public scheduler return t.prefix().extra_state==es_task_proxy; } + //! Attempts to steal a task from a randomly chosen thread/scheduler + task* steal_task( __TBB_ISOLATION_EXPR(isolation_tag isolation) ); + //! Steal task from another scheduler's ready pool. - task* steal_task( __TBB_ISOLATION_ARG( arena_slot& victim_arena_slot, isolation_tag isolation ) ); + task* steal_task_from( __TBB_ISOLATION_ARG( arena_slot& victim_arena_slot, isolation_tag isolation ) ); + +#if __TBB_PREVIEW_CRITICAL_TASKS + //! Tries to find critical task in critical task stream + task* get_critical_task( __TBB_ISOLATION_EXPR(isolation_tag isolation) ); + + //! Pushes task to critical task stream if it appears to be such task and returns + //! true. Otherwise does nothing and returns false. + bool handled_as_critical( task& t ); +#endif /** Initial size of the task deque sufficient to serve without reallocation 4 nested parallel_for calls with iteration space of 65535 grains each. **/ @@ -691,6 +716,23 @@ inline void generic_scheduler::offload_task ( task& t, intptr_t /*priority*/ ) { } #endif /* __TBB_TASK_PRIORITY */ +#if __TBB_PREVIEW_CRITICAL_TASKS +class critical_task_count_guard : internal::no_copy { +public: + critical_task_count_guard(scheduler_properties& properties, task& t) + : my_properties(properties), + my_original_critical_task_state(properties.has_taken_critical_task) { + my_properties.has_taken_critical_task |= internal::is_critical(t); + } + ~critical_task_count_guard() { + my_properties.has_taken_critical_task = my_original_critical_task_state; + } +private: + scheduler_properties& my_properties; + bool my_original_critical_task_state; +}; +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ + #if __TBB_FP_CONTEXT || __TBB_TASK_GROUP_CONTEXT //! Helper class for tracking floating point context and task group context switches /** Assuming presence of an itt collector, in addition to keeping track of floating diff --git a/src/tbb/scheduler_common.h b/src/tbb/scheduler_common.h index 9f47c17256..2afd1a1894 100644 --- a/src/tbb/scheduler_common.h +++ b/src/tbb/scheduler_common.h @@ -168,6 +168,10 @@ enum task_extra_state { es_version_1_task = 0, //! Tag for v3 tasks (i.e. tasks in TBB 2.1-2.2) es_version_3_task = 1, +#if __TBB_PREVIEW_CRITICAL_TASKS + //! Tag for critical tasks + es_task_critical = 0x8, +#endif //! Tag for enqueued tasks es_task_enqueued = 0x10, //! Tag for v3 task_proxy. @@ -347,6 +351,11 @@ struct arena_slot_line2 { /** Modified by the owner thread (during these operations). **/ unsigned hint_for_pop; +#if __TBB_PREVIEW_CRITICAL_TASKS + //! Similar to 'hint_for_pop' but for critical tasks. + unsigned hint_for_critical; +#endif + //! Index of the element following the last ready task in the deque. /** Modified by the owner thread. **/ __TBB_atomic size_t tail; diff --git a/src/tbb/semaphore.h b/src/tbb/semaphore.h index ffcf680da0..d02bf00faf 100644 --- a/src/tbb/semaphore.h +++ b/src/tbb/semaphore.h @@ -21,6 +21,7 @@ #ifndef __TBB_tbb_semaphore_H #define __TBB_tbb_semaphore_H +#include #include "tbb/tbb_stddef.h" #if _WIN32||_WIN64 diff --git a/src/tbb/task_group_context.cpp b/src/tbb/task_group_context.cpp index 9a06b828d0..f20ae30a50 100644 --- a/src/tbb/task_group_context.cpp +++ b/src/tbb/task_group_context.cpp @@ -200,14 +200,12 @@ task_group_context::~task_group_context () { } void task_group_context::init () { - internal::string_index name = internal::CUSTOM_CTX; +#if DO_ITT_NOTIFY // Check version of task group context to avoid reporting misleading identifier. - if( ( my_version_and_traits & version_mask ) >= 3 ) { - __TBB_ASSERT ( my_name >= 0 && my_name < NUM_STRINGS, "Context description out of valid range" ); - name = my_name; - } - ITT_TASK_GROUP(this, name, NULL); - suppress_unused_warning(name); // in case if ITT_TASK_GROUP is no-op. + if( ( my_version_and_traits & version_mask ) < 3 ) + my_name = internal::CUSTOM_CTX; +#endif + ITT_TASK_GROUP(this, my_name, NULL); __TBB_STATIC_ASSERT ( sizeof(my_version_and_traits) >= 4, "Layout of my_version_and_traits must be reconsidered on this platform" ); __TBB_STATIC_ASSERT ( sizeof(task_group_context) == 2 * NFS_MaxLineSize, "Context class has wrong size - check padding and members alignment" ); __TBB_ASSERT ( (uintptr_t(this) & (sizeof(my_cancellation_requested) - 1)) == 0, "Context is improperly aligned" ); diff --git a/src/tbb/task_stream_extended.h b/src/tbb/task_stream_extended.h new file mode 100644 index 0000000000..4ff34aa421 --- /dev/null +++ b/src/tbb/task_stream_extended.h @@ -0,0 +1,323 @@ +/* + Copyright (c) 2005-2018 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#ifndef _TBB_task_stream_extended_H +#define _TBB_task_stream_extended_H + +//! This file is a possible future replacement for the task_stream class implemented in +//! task_stream.h. It refactors the code and extends task_stream capabilities by moving lane +//! management during operations on caller side. Despite the fact that new implementation should not +//! affect performance of the original task stream, analysis on this subject was not made at the +//! time it was developed. In addition, it is not clearly seen at the moment that this container +//! would be suitable for critical tasks due to linear time complexity on its operations. + + +#if _TBB_task_stream_H +#error Either task_stream.h or this file can be included at the same time. +#endif + +#if !__TBB_CPF_BUILD +#error This code bears a preview status until it proves its usefulness/peformance suitability. +#endif + +#include "tbb/tbb_stddef.h" +#include +#include +#include "tbb/atomic.h" // for __TBB_Atomic* +#include "tbb/spin_mutex.h" +#include "tbb/tbb_allocator.h" +#include "scheduler_common.h" +#include "tbb_misc.h" // for FastRandom + +namespace tbb { +namespace internal { + +//! Essentially, this is just a pair of a queue and a mutex to protect the queue. +/** The reason std::pair is not used is that the code would look less clean + if field names were replaced with 'first' and 'second'. **/ +template< typename T, typename mutex_t > +struct queue_and_mutex { + typedef std::deque< T, tbb_allocator > queue_base_t; + + queue_base_t my_queue; + mutex_t my_mutex; + + queue_and_mutex () : my_queue(), my_mutex() {} + ~queue_and_mutex () {} +}; + +typedef uintptr_t population_t; +const population_t one = 1; + +inline void set_one_bit( population_t& dest, int pos ) { + __TBB_ASSERT( pos>=0, NULL ); + __TBB_ASSERT( pos=0, NULL ); + __TBB_ASSERT( pos=0, NULL ); + __TBB_ASSERT( pos lane_t; +}; + +enum task_stream_accessor_type { front_accessor = 0, back_nonnull_accessor }; + +//! Specializes from which side of the underlying container elements are retrieved. Method must be +//! called under corresponding mutex locked. +template +class task_stream_accessor : public task_stream_base { +protected: + using task_stream_base::lane_t; + task* get_item( lane_t::queue_base_t& queue ) { + task* result = queue.front(); + queue.pop_front(); + return result; + } +}; + +template<> +class task_stream_accessor< back_nonnull_accessor > : public task_stream_base { +protected: + task* get_item( lane_t::queue_base_t& queue ) { + task* result = NULL; + do { + result = queue.back(); + queue.pop_back(); + } while( !result && !queue.empty() ); + return result; + } +}; + +//! The container for "fairness-oriented" aka "enqueued" tasks. +template +class task_stream : public task_stream_accessor< accessor > { + typedef typename task_stream_accessor::lane_t lane_t; + population_t population[Levels]; + padded* lanes[Levels]; + unsigned N; + +public: + task_stream() : N() { + for(int level = 0; level < Levels; level++) { + population[level] = 0; + lanes[level] = NULL; + } + } + + void initialize( unsigned n_lanes ) { + const unsigned max_lanes = sizeof(population_t) * CHAR_BIT; + + N = n_lanes>=max_lanes ? max_lanes : n_lanes>2 ? 1<<(__TBB_Log2(n_lanes-1)+1) : 2; + __TBB_ASSERT( N==max_lanes || N>=n_lanes && ((N-1)&N)==0, "number of lanes miscalculated"); + __TBB_ASSERT( N <= sizeof(population_t) * CHAR_BIT, NULL ); + for(int level = 0; level < Levels; level++) { + lanes[level] = new padded[N]; + __TBB_ASSERT( !population[level], NULL ); + } + } + + ~task_stream() { + for(int level = 0; level < Levels; level++) + if (lanes[level]) delete[] lanes[level]; + } + + //! Returns true on successful push, otherwise - false. + bool try_push( task* source, int level, unsigned lane_idx ) { + __TBB_ASSERT( 0 <= level && level < Levels, "Incorrect lane level specified." ); + spin_mutex::scoped_lock lock; + if( lock.try_acquire( lanes[level][lane_idx].my_mutex ) ) { + lanes[level][lane_idx].my_queue.push_back( source ); + set_one_bit( population[level], lane_idx ); // TODO: avoid atomic op if the bit is already set + return true; + } + return false; + } + + //! Push a task into a lane. Lane selection is performed by passed functor. + template + void push( task* source, int level, const lane_selector_t& next_lane ) { + bool succeed = false; + unsigned lane = 0; + do { + lane = next_lane( /*out_of=*/N ); + __TBB_ASSERT( lane < N, "Incorrect lane index." ); + } while( ! (succeed = try_push( source, level, lane )) ); + } + + //! Returns pointer to task on successful pop, otherwise - NULL. + task* try_pop( int level, unsigned lane_idx ) { + __TBB_ASSERT( 0 <= level && level < Levels, "Incorrect lane level specified." ); + if( !is_bit_set( population[level], lane_idx ) ) + return NULL; + task* result = NULL; + lane_t& lane = lanes[level][lane_idx]; + spin_mutex::scoped_lock lock; + if( lock.try_acquire( lane.my_mutex ) && !lane.my_queue.empty() ) { + result = this->get_item( lane.my_queue ); + if( lane.my_queue.empty() ) + clear_one_bit( population[level], lane_idx ); + } + return result; + } + + //! Try finding and popping a task using passed functor for lane selection. Last used lane is + //! updated inside lane selector. + template + task* pop( int level, const lane_selector_t& next_lane ) { + task* popped = NULL; + unsigned lane = 0; + do { + lane = next_lane( /*out_of=*/N ); + __TBB_ASSERT( lane < N, "Incorrect lane index." ); + } while( !empty( level ) && !(popped = try_pop( level, lane )) ); + return popped; + } + + // TODO: unify '*_specific' logic with 'pop' methods above + task* look_specific( __TBB_ISOLATION_ARG(task_stream_base::lane_t::queue_base_t& queue, isolation_tag isolation) ) { + __TBB_ASSERT( !queue.empty(), NULL ); + // TODO: add a worst-case performance test and consider an alternative container with better + // performance for isolation search. + typename lane_t::queue_base_t::iterator curr = queue.end(); + do { + // TODO: consider logic from get_task to simplify the code. + task* result = *--curr; + if( result __TBB_ISOLATION_EXPR( && result->prefix().isolation == isolation ) ) { + if( queue.end() - curr == 1 ) + queue.pop_back(); // a little of housekeeping along the way + else + *curr = 0; // grabbing task with the same isolation + // TODO: move one of the container's ends instead if the task has been found there + return result; + } + } while( curr != queue.begin() ); + return NULL; + } + + //! Try finding and popping a related task. + task* pop_specific( int level, __TBB_ISOLATION_ARG(unsigned& last_used_lane, isolation_tag isolation) ) { + task* result = NULL; + // Lane selection is round-robin in backward direction. + unsigned idx = last_used_lane & (N-1); + do { + if( is_bit_set( population[level], idx ) ) { + lane_t& lane = lanes[level][idx]; + spin_mutex::scoped_lock lock; + if( lock.try_acquire(lane.my_mutex) && !lane.my_queue.empty() ) { + result = look_specific( __TBB_ISOLATION_ARG(lane.my_queue, isolation) ); + if( lane.my_queue.empty() ) + clear_one_bit( population[level], idx ); + if( result ) + break; + } + } + idx=(idx-1)&(N-1); + } while( !empty(level) && idx != last_used_lane ); + last_used_lane = idx; + return result; + } + + //! Checks existence of a task. + bool empty(int level) { + return !population[level]; + } + + //! Destroys all remaining tasks in every lane. Returns the number of destroyed tasks. + /** Tasks are not executed, because it would potentially create more tasks at a late stage. + The scheduler is really expected to execute all tasks before task_stream destruction. */ + intptr_t drain() { + intptr_t result = 0; + for(int level = 0; level < Levels; level++) + for(unsigned i=0; i +#include + +namespace tbb { + +namespace internal { + +#if __TBB_WIN8UI_SUPPORT +static inline bool GetBoolEnvironmentVariable( const char * ) { + return false; +} +#else /* __TBB_WIN8UI_SUPPORT */ +static inline bool GetBoolEnvironmentVariable( const char * name ) { + if( const char* s = std::getenv(name) ) + { + // The result is defined as true only if the environment variable contains + // no characters except one '1' character and an arbitrary number of spaces + // (including the absence of spaces). + size_t index = std::strspn(s, " "); + if (s[index] != '1') return false; + index++; + // Memory access after incrementing is safe, since the getenv() returns a + // NULL terminated string, and even if the character getting by index is '1', + // and this character is the end of string, after incrementing we will get + // an index of character, that contains '\0' + index += std::strspn(&s[index], " "); + return !s[index]; + } + return false; +} +#endif /* __TBB_WIN8UI_SUPPORT */ + +} // namespace internal +} // namespace tbb + +#endif // __TBB_tbb_environment_H diff --git a/src/tbb/tbb_main.cpp b/src/tbb/tbb_main.cpp index 6c62c3e924..060fdb7400 100644 --- a/src/tbb/tbb_main.cpp +++ b/src/tbb/tbb_main.cpp @@ -161,8 +161,8 @@ static resource_string strings_for_itt[] = { #undef TBB_STRING_RESOURCE static __itt_string_handle *ITT_get_string_handle(int idx) { - __TBB_ASSERT(idx >= 0, NULL); - return idx < NUM_STRINGS ? strings_for_itt[idx].itt_str_handle : NULL; + __TBB_ASSERT( idx >= 0 && idx < NUM_STRINGS, "string handle out of valid range"); + return (idx >= 0 && idx < NUM_STRINGS) ? strings_for_itt[idx].itt_str_handle : NULL; } static void ITT_init_domains() { diff --git a/src/tbb/tbb_main.h b/src/tbb/tbb_main.h index fa609795f7..b84357b66f 100644 --- a/src/tbb/tbb_main.h +++ b/src/tbb/tbb_main.h @@ -23,6 +23,7 @@ #include "tbb/atomic.h" #include "governor.h" +#include "tbb_environment.h" namespace tbb { diff --git a/src/tbb/tbb_misc.cpp b/src/tbb/tbb_misc.cpp index 3a1468fd5b..23bc1ffe91 100644 --- a/src/tbb/tbb_misc.cpp +++ b/src/tbb/tbb_misc.cpp @@ -189,16 +189,6 @@ void fix_broken_rethrow() {} bool gcc_rethrow_exception_broken() { return false; } #endif /* __TBB_STD_RETHROW_EXCEPTION_POSSIBLY_BROKEN */ -#if __TBB_WIN8UI_SUPPORT -bool GetBoolEnvironmentVariable( const char * ) { return false;} -#else /* __TBB_WIN8UI_SUPPORT */ -bool GetBoolEnvironmentVariable( const char * name ) { - if( const char* s = std::getenv(name) ) - return strcmp(s,"0") != 0; - return false; -} -#endif /* __TBB_WIN8UI_SUPPORT */ - /** The leading "\0" is here so that applying "strings" to the binary delivers a clean result. */ static const char VersionString[] = "\0" TBB_VERSION_STRINGS; diff --git a/src/tbb/tbb_misc.h b/src/tbb/tbb_misc.h index 6d1adb3538..c1584e32ba 100644 --- a/src/tbb/tbb_misc.h +++ b/src/tbb/tbb_misc.h @@ -83,9 +83,6 @@ void MoveThreadIntoProcessorGroup( void* hThread, int groupIndex ); //! Throws std::runtime_error with what() returning error_code description prefixed with aux_info void handle_win_error( int error_code ); -//! True if environment variable with given name is set and not 0; otherwise false. -bool GetBoolEnvironmentVariable( const char * name ); - //! Prints TBB version information on stderr void PrintVersion(); diff --git a/src/tbbmalloc/frontend.cpp b/src/tbbmalloc/frontend.cpp index 25930d287a..d4c489ec79 100644 --- a/src/tbbmalloc/frontend.cpp +++ b/src/tbbmalloc/frontend.cpp @@ -25,6 +25,7 @@ #include /* for memset */ #include "../tbb/tbb_version.h" +#include "../tbb/tbb_environment.h" #include "../tbb/itt_notify.h" // for __TBB_load_ittnotify() #if USE_PTHREAD @@ -1877,17 +1878,6 @@ static MallocMutex initMutex; delivers a clean result. */ static char VersionString[] = "\0" TBBMALLOC_VERSION_STRINGS; -#if __TBB_WIN8UI_SUPPORT -bool GetBoolEnvironmentVariable(const char *) { return false; } -#else -bool GetBoolEnvironmentVariable(const char *name) -{ - if (const char* s = getenv(name)) - return strcmp(s,"0") != 0; - return false; -} -#endif - void AllocControlledMode::initReadEnv(const char *envName, intptr_t defaultVal) { if (!setDone) { @@ -2006,6 +1996,10 @@ static bool initMemoryManager() return true; } +static bool GetBoolEnvironmentVariable(const char* name) { + return tbb::internal::GetBoolEnvironmentVariable(name); +} + //! Ensures that initMemoryManager() is called once and only once. /** Does not return until initMemoryManager() has been completed by a thread. There is no need to call this routine if mallocInitialized==2 . */ diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp index 73b041dda7..2cc0548903 100644 --- a/src/tbbmalloc/proxy.cpp +++ b/src/tbbmalloc/proxy.cpp @@ -41,6 +41,7 @@ #include "proxy.h" #include "tbb/tbb_config.h" +#include "tbb/tbb_environment.h" #if !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) && !defined(__SUNPRO_CC) #if TBB_USE_EXCEPTIONS @@ -773,15 +774,10 @@ extern "C" BOOL WINAPI DllMain( HINSTANCE hInst, DWORD callReason, LPVOID reserv if ( callReason==DLL_PROCESS_ATTACH && reserved && hInst ) { #if !__TBB_WIN8UI_SUPPORT -#if TBBMALLOC_USE_TBB_FOR_ALLOCATOR_ENV_CONTROLLED - char pinEnvVariable[50]; - if( GetEnvironmentVariable("TBBMALLOC_USE_TBB_FOR_ALLOCATOR", pinEnvVariable, 50)) + if (!tbb::internal::GetBoolEnvironmentVariable("TBB_MALLOC_DISABLE_REPLACEMENT")) { doMallocReplacement(); } -#else - doMallocReplacement(); -#endif #endif // !__TBB_WIN8UI_SUPPORT } diff --git a/src/tbbproxy/tbbproxy.cpp b/src/tbbproxy/tbbproxy.cpp index e9d76bbc31..5b40b862f1 100644 --- a/src/tbbproxy/tbbproxy.cpp +++ b/src/tbbproxy/tbbproxy.cpp @@ -23,6 +23,7 @@ #define TBB_PREVIEW_RUNTIME_LOADER 1 #include "tbb/runtime_loader.h" #include "tbb/tbb_stddef.h" +#include "tbb_environment.h" // C standard headers. #include // isspace @@ -109,8 +110,7 @@ static void _say( char const * format, va_list args ) { // To enable printing, the variable must be set and not empty. // Do not call it directly, use tell() instead. static void _tell( char const * format, va_list args ) { - char const * var = getenv( "TBB_VERSION" ); - if ( var != NULL && var[ 0 ] != 0 ) { + if ( tbb::internal::GetBoolEnvironmentVariable("TBB_VERSION") ) { _say( format, args ); } // if } // _tell diff --git a/src/test/test_concurrent_hash_map.cpp b/src/test/test_concurrent_hash_map.cpp index 1c83fd0a64..167c826585 100644 --- a/src/test/test_concurrent_hash_map.cpp +++ b/src/test/test_concurrent_hash_map.cpp @@ -629,10 +629,9 @@ class AddToTable: NoAssign { class RemoveFromTable: NoAssign { MyTable& my_table; - const int my_nthread; const int my_m; public: - RemoveFromTable( MyTable& table, int nthread, int m ) : my_table(table), my_nthread(nthread), my_m(m) {} + RemoveFromTable( MyTable& table, int m ) : my_table(table), my_m(m) {} void operator()(int) const { for( int i=0; i +#include +#include + +// For WIN8UI applications reading and writing the environment variables +// is prohibited due to the platform limitations +#if !__TBB_WIN8UI_SUPPORT + +void set_and_get_tbb_version(const char* value, bool expected_result){ + // TODO: consider to replace TBB_VERSION with test specific or arbitrary variable + const char* name = "TBB_VERSION"; + Harness::SetEnv(name, value); + bool result = tbb::internal::GetBoolEnvironmentVariable(name); + ASSERT(result == expected_result, "Wrong GetBoolEnvironmentVariable return value"); + Harness::SetEnv(name, ""); +} + +Harness::FastRandom rnd(12345); + +struct random_character_generator { + char operator()() { + return rnd.get() % 128; // 127 - the last ASCII symbol + } +}; + +void test_random_environment_variable(size_t length) { + ASSERT(length != 0, "Requested random string cannot be empty"); + std::string rand_string(length, ' '); + std::generate(rand_string.begin(), rand_string.end(), random_character_generator()); + bool expected_result = false; + for (unsigned i = 0; rand_string[i]; i++) + if (rand_string[i] == '1') { + // if we found more the one '1' character -> return false + expected_result = !expected_result; + if (!expected_result) break; + } + else if (rand_string[i] != ' ') { + // if we found some character other than ' ' and '1' -> return false + expected_result = false; + break; + } + + set_and_get_tbb_version(rand_string.c_str(), expected_result); +} + +void test_get_bool_environment_variable() { + // Test undefined variable + ASSERT(!tbb::internal::GetBoolEnvironmentVariable("TBB_VERSION"), + "TBB_VERSION should not be defined in the beginning of the test"); + + set_and_get_tbb_version("", false); + set_and_get_tbb_version(" ", false); + set_and_get_tbb_version("1", true); + set_and_get_tbb_version(" 1 ", true); + set_and_get_tbb_version("1 ", true); + set_and_get_tbb_version(" 1 ", true); + set_and_get_tbb_version(" 1", true); + set_and_get_tbb_version(" 11", false); + set_and_get_tbb_version("111111", false); + set_and_get_tbb_version("1 1", false); + set_and_get_tbb_version(" 1 abc?", false); + set_and_get_tbb_version("1;", false); + set_and_get_tbb_version(" d ", false); + set_and_get_tbb_version("0", false); + set_and_get_tbb_version("0 ", false); + set_and_get_tbb_version("000000", false); + set_and_get_tbb_version("01", false); + set_and_get_tbb_version("00000001", false); + set_and_get_tbb_version("ABCDEFG", false); + set_and_get_tbb_version("2018", false); + set_and_get_tbb_version("ABC_123", false); + set_and_get_tbb_version("true", false); + + size_t length = 10000; + + for(size_t i =0; i < 10; ++i) { + test_random_environment_variable((rnd.get() % length) + 1); + } + +#if _WIN32 || _WIN64 + // Environment variable length is limited by 32K on Windows systems + size_t large_length = 32000; +#else + size_t large_length = 1000000; +#endif + set_and_get_tbb_version(std::string(large_length, 'A').c_str(), false); + set_and_get_tbb_version((std::string(large_length, ' ')+'1').c_str(), true); + test_random_environment_variable(large_length); +} + +#else // __TBB_WIN8UI_SUPPORT + +void test_get_bool_environment_variable() { + for(size_t i = 0; i < 100; ++i) { + ASSERT(!tbb::internal::GetBoolEnvironmentVariable("TBB_VERSION"), + "GetBoolEnvironmentVariable should always return false for UWP applications"); + } +} +#endif // __TBB_WIN8UI_SUPPORT + +int TestMain() { + test_get_bool_environment_variable(); + return Harness::Done; +} diff --git a/src/test/test_flow_graph_priorities.cpp b/src/test/test_flow_graph_priorities.cpp new file mode 100644 index 0000000000..5a14d4502a --- /dev/null +++ b/src/test/test_flow_graph_priorities.cpp @@ -0,0 +1,595 @@ +/* + Copyright (c) 2018 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "harness_defs.h" + +#if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES + +#include "harness_graph.h" +#include "harness_barrier.h" + +#include "tbb/flow_graph.h" +#include "tbb/tbb_thread.h" +#include "tbb/parallel_for.h" +#include "tbb/concurrent_queue.h" + +#include +#include + +using namespace tbb::flow; + +tbb::atomic g_task_num; + +void spin_for( double delta ) { + tbb::tick_count start = tbb::tick_count::now(); + while( (tbb::tick_count::now() - start).seconds() < delta ) ; +} + +namespace PriorityNodesTakePrecedence { + +struct TaskInfo { + TaskInfo() : my_priority(-1), my_task_index(-1) {} + TaskInfo( int priority, int task_index ) + : my_priority(priority), my_task_index(task_index) {} + int my_priority; + int my_task_index; +}; +std::vector g_task_info; +bool g_work_submitted = false; + +const unsigned node_num = 100; +const unsigned start_index = node_num / 3; +const unsigned end_index = node_num * 2 / 3; +tbb::atomic g_priority_task_index; + +void body_func( int priority ) { + while( !g_work_submitted ) __TBB_Yield(); + int current_task_index = g_task_num++; + if( priority ) + g_task_info[g_priority_task_index++] = TaskInfo( priority, current_task_index ); +} + +struct FunctionBody { + FunctionBody( int priority ) : my_priority( priority ) {} + int operator()( int msg ) const { + body_func( my_priority ); + return msg; + } +private: + int my_priority; +}; + +typedef multifunction_node< int,tuple > multi_node; + +struct MultifunctionBody { + MultifunctionBody( int priority ) : my_priority( priority ) {} + void operator()( int msg, multi_node::output_ports_type& op ) const { + body_func( my_priority ); + get<0>(op).try_put( msg ); + } +private: + int my_priority; +}; + +template +NodeType* node_creator( graph& g, unsigned index ) { + if( start_index <= index && index < end_index ) + return new NodeType( g, unlimited, BodyType(index), node_priority_t(index) ); + else + return new NodeType( g, unlimited, BodyType(0) ); +} + +struct passthru_body { + continue_msg operator()( int ) const { + return continue_msg(); + } +}; + +template sender& get_sender( NodeType& node ) { return node; } +template<> sender& get_sender( multi_node& node ) { return output_port<0>(node); } + +template +void test_node( NodeTypeCreator node_creator_func, NodePortRetriever get_sender ) { + graph g; + broadcast_node bn(g); + function_node tn(g, unlimited, passthru_body()); + // Using pointers to nodes to avoid errors on compilers, which try to generate assigment + // operator for the nodes + std::vector nodes; + for( unsigned i = 0; i < node_num; ++i ) { + nodes.push_back( node_creator_func(g, i) ); + make_edge( bn, *nodes.back() ); + make_edge( get_sender(*nodes.back()), tn ); + } + + const size_t repeats = 50; + const size_t priority_nodes_num = end_index - start_index; + size_t internal_order_failures = 0; + size_t global_order_failures = 0; + for( size_t repeat = 0; repeat < repeats; ++repeat ) { + g_work_submitted = false; + g_task_num = g_priority_task_index = 0; + g_task_info.clear(); g_task_info.resize( priority_nodes_num ); + + bn.try_put( 0 ); + // Setting of the flag is based on the knowledge that the calling thread broadcasts the message + // to successor nodes, that is spawns tasks. Thus, this makes this test to be a whitebox test to + // some extent. + g_work_submitted = true; + + g.wait_for_all(); + + ASSERT( g_priority_task_index == g_task_info.size(), "Incorrect number of tasks with priority" ); + bool found_max = false; + bool found_min = false; + for( unsigned i = 0; i < g_priority_task_index/2; ++i ) { + if( g_task_info[i].my_priority == int(end_index-1) ) + found_max = true; + if( g_task_info[g_priority_task_index-1-i].my_priority == int(start_index) ) + found_min = true; + } + if( !found_min || !found_max ) + ++internal_order_failures; + for( unsigned i = 0; i < g_priority_task_index; ++i ) { + if( g_task_info[i].my_task_index > int(priority_nodes_num) + MaxThread ) + ++global_order_failures; + } + } + float failure_ratio = float(internal_order_failures) / float(repeats); + ASSERT( + failure_ratio <= 0.3f, + "Nodes with priorities executed in wrong order among each other too frequently." + ); + failure_ratio = float(global_order_failures) / float(repeats*priority_nodes_num); + ASSERT( + failure_ratio <= 0.1f, + "Nodes with priorities executed in wrong order too frequently over non-prioritized nodes." + ); + for( size_t i = 0; i < nodes.size(); ++i ) + delete nodes[i]; +} + +void test( int num_threads ) { + REMARK( "Testing execution of nodes with priority takes precedence (num_threads=%d) - ", num_threads ); + tbb::task_scheduler_init init(num_threads); + test_node< function_node >( &node_creator, FunctionBody>, + &get_sender< function_node > ); + test_node( &node_creator, &get_sender< multi_node > ); + REMARK( "done\n" ); +} +} /* namespace PriorityNodesTakePrecedence */ + +namespace ThreadsEagerReaction { + +using Harness::SpinBarrier; + +enum task_type_t { no_task, regular_task, async_task }; + +struct profile_t { + task_type_t task_type; + unsigned global_task_id; + double elapsed; +}; + +std::vector g_async_task_ids; + +typedef unsigned data_type; +typedef async_node async_node_type; +typedef multifunction_node< + data_type, tuple > decider_node_type; +struct AsyncActivity { + typedef async_node_type::gateway_type gateway_type; + + struct work_type { data_type input; gateway_type* gateway; }; + bool done; + tbb::concurrent_queue my_queue; + tbb::tbb_thread my_service_thread; + + struct ServiceThreadFunc { + SpinBarrier& my_barrier; + ServiceThreadFunc(SpinBarrier& barrier) : my_barrier(barrier) {} + void operator()(AsyncActivity* activity) { + while (!activity->done) { + work_type work; + while (activity->my_queue.try_pop(work)) { + g_async_task_ids.push_back( ++g_task_num ); + work.gateway->try_put(work.input); + work.gateway->release_wait(); + my_barrier.wait(); + } + } + } + }; + void stop_and_wait() { done = true; my_service_thread.join(); } + + void submit(data_type input, gateway_type* gateway) { + work_type work = { input, gateway }; + gateway->reserve_wait(); + my_queue.push(work); + } + AsyncActivity(SpinBarrier& barrier) + : done(false), my_service_thread(ServiceThreadFunc(barrier), this) {} +}; + +struct StartBody { + bool has_run; + bool operator()(data_type& input) { + if (has_run) return false; + else { + input = 1; + has_run = true; + return true; + } + } + StartBody() : has_run(false) {} +}; + +struct ParallelForBody { + SpinBarrier& my_barrier; + const data_type& my_input; + ParallelForBody(SpinBarrier& barrier, const data_type& input) + : my_barrier(barrier), my_input(input) {} + void operator()(const data_type&) const { + my_barrier.wait(); + ++g_task_num; + } +}; + +struct CpuWorkBody { + SpinBarrier& my_barrier; + const int my_tasks_count; + data_type operator()(const data_type& input) { + tbb::parallel_for(0, my_tasks_count, ParallelForBody(my_barrier, input), tbb::simple_partitioner()); + return input; + } + CpuWorkBody(SpinBarrier& barrier, int tasks_count) + : my_barrier(barrier), my_tasks_count(tasks_count) {} +}; + +struct DeciderBody { + const data_type& my_limit; + DeciderBody( const data_type& limit ) : my_limit( limit ) {} + void operator()(data_type input, decider_node_type::output_ports_type& ports) { + if (input < my_limit) + get<0>(ports).try_put(input + 1); + } +}; + +struct AsyncSubmissionBody { + AsyncActivity* my_activity; + void operator()(data_type input, async_node_type::gateway_type& gateway) { + my_activity->submit(input, &gateway); + } + AsyncSubmissionBody(AsyncActivity* activity) : my_activity(activity) {} +}; + +void test( int num_threads ) { + REMARK( "Testing threads react eagerly on asynchronous tasks (num_threads=%d) - ", num_threads ); + if( num_threads == tbb::task_scheduler_init::default_num_threads() ) { + // one thread is required for asynchronous compute resource + REMARK("skipping test since it is designed to work on less number of threads than " + "hardware concurrency allows\n"); + return; + } + const unsigned cpu_threads = unsigned(num_threads); + const unsigned cpu_tasks_per_thread = 4; + const unsigned nested_cpu_tasks = cpu_tasks_per_thread * cpu_threads; + const unsigned async_subgraph_reruns = 8; + const unsigned cpu_subgraph_reruns = 2; + + SpinBarrier barrier(cpu_threads + /*async thread=*/1); + g_task_num = 0; + g_async_task_ids.clear(); + g_async_task_ids.reserve( async_subgraph_reruns ); + + tbb::task_scheduler_init init( cpu_threads ); + AsyncActivity activity(barrier); + graph g; + + source_node starter_node(g, StartBody(), false); + function_node cpu_work_node( + g, unlimited, CpuWorkBody(barrier, nested_cpu_tasks)); + decider_node_type cpu_restarter_node(g, unlimited, DeciderBody(cpu_subgraph_reruns)); + async_node_type async_node(g, unlimited, AsyncSubmissionBody(&activity)); + decider_node_type async_restarter_node( + g, unlimited, DeciderBody(async_subgraph_reruns), node_priority_t(1) + ); + + make_edge(starter_node, cpu_work_node); + make_edge(cpu_work_node, cpu_restarter_node); + make_edge(output_port<0>(cpu_restarter_node), cpu_work_node); + + make_edge(starter_node, async_node); + make_edge(async_node, async_restarter_node); + make_edge(output_port<0>(async_restarter_node), async_node); + + starter_node.activate(); + g.wait_for_all(); + activity.stop_and_wait(); + + const size_t async_task_num = size_t(async_subgraph_reruns); + ASSERT( g_async_task_ids.size() == async_task_num, "Incorrect number of async tasks." ); + unsigned max_span = unsigned(2 * cpu_threads + 1); + for( size_t idx = 1; idx < async_task_num; ++idx ) { + ASSERT( g_async_task_ids[idx] - g_async_task_ids[idx-1] <= max_span, + "Async tasks were not able to interfere with CPU tasks." ); + } + REMARK("done\n"); +} +} /* ThreadsEagerReaction */ + +namespace LimitingExecutionToPriorityTask { + +enum work_type_t { NONPRIORITIZED_WORK, PRIORITIZED_WORK }; + +struct execution_tracker_t { + execution_tracker_t() { reset(); } + void reset() { + prioritized_work_submitter = tbb::tbb_thread::id(); + prioritized_work_started = false; + prioritized_work_finished = false; + prioritized_work_interrupted = false; + } + tbb::tbb_thread::id prioritized_work_submitter; + bool prioritized_work_started; + bool prioritized_work_finished; + bool prioritized_work_interrupted; +} exec_tracker; + +template +void do_node_work( int work_size ); + +template +void do_nested_work( const tbb::tbb_thread::id& tid, const tbb::blocked_range& subrange ); + +template +struct CommonBody { + CommonBody() : my_body_size( 0 ) { } + CommonBody( int body_size ) : my_body_size( body_size ) { } + continue_msg operator()( const continue_msg& msg ) const { + do_node_work(my_body_size); + return msg; + } + void operator()( const tbb::blocked_range& subrange ) const { + do_nested_work( /*tid=*/tbb::this_tbb_thread::get_id(), subrange ); + } + int my_body_size; +}; + +template +void do_node_work(int work_size) { + tbb::parallel_for( tbb::blocked_range(0, work_size), CommonBody(), + tbb::simple_partitioner() ); +} + +template +void do_nested_work( const tbb::tbb_thread::id& tid, const tbb::blocked_range& /*subrange*/ ) { + // This is non-prioritized work... + if( exec_tracker.prioritized_work_submitter != tid ) + return; + // ...being executed by the thread that initially started prioritized one... + ASSERT( exec_tracker.prioritized_work_started, + "Prioritized work should have been started by that time." ); + // ...prioritized work has been started already... + if( exec_tracker.prioritized_work_finished ) + return; + // ...but has not been finished yet + exec_tracker.prioritized_work_interrupted = true; +} + +struct IsolationFunctor { + int work_size; + IsolationFunctor(int ws) : work_size(ws) {} + void operator()() const { + tbb::parallel_for( tbb::blocked_range(0, work_size), CommonBody(), + tbb::simple_partitioner() ); + } +}; + +template<> +void do_node_work(int work_size) { + exec_tracker.prioritized_work_submitter = tbb::this_tbb_thread::get_id(); + exec_tracker.prioritized_work_started = true; + tbb::this_task_arena::isolate( IsolationFunctor(work_size) ); + exec_tracker.prioritized_work_finished = true; +} + +template<> +void do_nested_work( const tbb::tbb_thread::id& tid, + const tbb::blocked_range& /*subrange*/ ) { + if( exec_tracker.prioritized_work_submitter == tid ) { + ASSERT( !exec_tracker.prioritized_work_interrupted, + "Thread was not fully devoted to processing of prioritized task." ); + } else { + // prolong processing of prioritized work so that the thread that started + // prioritized work has higher probability to help with non-prioritized one. + spin_for(0.1); + } +} + +// Using pointers to nodes to avoid errors on compilers, which try to generate assigment operator +// for the nodes +typedef std::vector< continue_node* > nodes_container_t; + +void create_nodes( nodes_container_t& nodes, graph& g, int num, int body_size ) { + for( int i = 0; i < num; ++i ) + nodes.push_back( + new continue_node( g, CommonBody( body_size ) ) + ); +} + +void test( int num_threads ) { + REMARK( "Testing limit execution to priority tasks (num_threads=%d) - ", num_threads ); + + tbb::task_scheduler_init init( num_threads ); + + const int nodes_num = 100; + const int priority_node_position_part = 10; + const int pivot = nodes_num / priority_node_position_part; + const int nodes_in_lane = 3 * num_threads; + const int small_problem_size = 100; + const int large_problem_size = 1000; + + graph g; + nodes_container_t nodes; + create_nodes( nodes, g, pivot, large_problem_size ); + nodes.push_back( + new continue_node( + g, CommonBody(small_problem_size), node_priority_t(1) + ) + ); + create_nodes( nodes, g, nodes_num - pivot - 1, large_problem_size ); + + broadcast_node bn(g); + for( int i = 0; i < nodes_num; ++i ) + if( i % nodes_in_lane == 0 ) + make_edge( bn, *nodes[i] ); + else + make_edge( *nodes[i-1], *nodes[i] ); + exec_tracker.reset(); + bn.try_put( continue_msg() ); + g.wait_for_all(); + + for( size_t i = 0; i < nodes.size(); ++i ) + delete nodes[i]; + REMARK( "done\n" ); +} + +} /* namespace LimitingExecutionToPriorityTask */ + +#include "tbb/task_arena.h" +namespace NestedCase { + +using tbb::task_arena; + +struct ResetGraphFunctor { + graph& my_graph; + ResetGraphFunctor(graph& g) : my_graph(g) {} + // copy construtor to please some old compilers + ResetGraphFunctor(const ResetGraphFunctor& rgf) : my_graph(rgf.my_graph) {} + void operator()() const { my_graph.reset(); } +}; + +struct InnerBody { + continue_msg operator()( const continue_msg& ) const { + return continue_msg(); + } +}; + +struct OuterBody { + int my_max_threads; + task_arena& my_inner_arena; + OuterBody( int max_threads, task_arena& inner_arena ) + : my_max_threads(max_threads), my_inner_arena(inner_arena) {} + // copy construtor to please some old compilers + OuterBody( const OuterBody& rhs ) + : my_max_threads(rhs.my_max_threads), my_inner_arena(rhs.my_inner_arena) {} + int operator()( const int& ) { + graph inner_graph; + continue_node start_node(inner_graph, InnerBody()); + continue_node mid_node1(inner_graph, InnerBody(), node_priority_t(5)); + continue_node mid_node2(inner_graph, InnerBody()); + continue_node end_node(inner_graph, InnerBody(), node_priority_t(15)); + make_edge( start_node, mid_node1 ); + make_edge( mid_node1, end_node ); + make_edge( start_node, mid_node2 ); + make_edge( mid_node2, end_node ); + my_inner_arena.execute( ResetGraphFunctor(inner_graph) ); + start_node.try_put( continue_msg() ); + inner_graph.wait_for_all(); + return 13; + } +}; + +void execute_outer_graph( bool same_arena, task_arena& inner_arena, int max_threads, + graph& outer_graph, function_node& start_node ) { + if( same_arena ) { + start_node.try_put( 42 ); + outer_graph.wait_for_all(); + return; + } + for( int num_threads = 1; num_threads <= max_threads; ++num_threads ) { + inner_arena.initialize( num_threads ); + start_node.try_put( 42 ); + outer_graph.wait_for_all(); + inner_arena.terminate(); + } +} + +void test_in_arena( int max_threads, task_arena& outer_arena, task_arena& inner_arena ) { + graph outer_graph; + const unsigned num_outer_nodes = 10; + const size_t concurrency = unlimited; + std::vector< function_node* > outer_nodes; + for( unsigned node_index = 0; node_index < num_outer_nodes; ++node_index ) { + internal::node_priority_t priority = internal::no_priority; + if( node_index == num_outer_nodes / 2 ) + priority = 10; + + outer_nodes.push_back( + new function_node( + outer_graph, concurrency, OuterBody(max_threads, inner_arena), priority + ) + ); + } + + for( unsigned node_index1 = 0; node_index1 < num_outer_nodes; ++node_index1 ) + for( unsigned node_index2 = node_index1+1; node_index2 < num_outer_nodes; ++node_index2 ) + make_edge( *outer_nodes[node_index1], *outer_nodes[node_index2] ); + + bool same_arena = &outer_arena == &inner_arena; + for( int num_threads = 1; num_threads <= max_threads; ++num_threads ) { + REMARK( "Testing nested nodes with specified priority in %s arenas, num_threads=%d) - ", + same_arena? "same" : "different", num_threads ); + outer_arena.initialize( num_threads ); + outer_arena.execute( ResetGraphFunctor(outer_graph) ); + execute_outer_graph( same_arena, inner_arena, max_threads, outer_graph, *outer_nodes[0] ); + outer_arena.terminate(); + REMARK( "done\n" ); + } + + for( size_t i = 0; i < outer_nodes.size(); ++i ) + delete outer_nodes[i]; +} + +void test( int max_threads ) { + tbb::task_scheduler_init init( max_threads ); + task_arena outer_arena; task_arena inner_arena; + test_in_arena( max_threads, outer_arena, outer_arena ); + test_in_arena( max_threads, outer_arena, inner_arena ); +} +} + +int TestMain() { + if( MinThread < 1 ) { + REPORT( "Number of threads must be positive\n" ); + return Harness::Skipped; + } + for( int p = MinThread; p <= MaxThread; ++p ) { + PriorityNodesTakePrecedence::test( p ); + LimitingExecutionToPriorityTask::test( p ); + } + NestedCase::test( MaxThread ); + return Harness::Done; +} +#else /* __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES */ +#define HARNESS_SKIP_TEST 1 +#include "harness.h" +#endif /* __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES */ diff --git a/src/test/test_iterators.cpp b/src/test/test_iterators.cpp new file mode 100644 index 0000000000..235d998af3 --- /dev/null +++ b/src/test/test_iterators.cpp @@ -0,0 +1,215 @@ +/* + Copyright (c) 2017-2018 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "tbb/tbb_config.h" + +#if __TBB_CPP11_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT + +#include "tbb/iterators.h" + +#include +#include +#include +#include + +#include "harness.h" + +//common checks of a random access iterator functionality +template +void test_random_iterator(const RandomIt& it) { + ASSERT( it == it, "== returned false negative"); + ASSERT(!(it == it + 1), "== returned false positive"); + ASSERT( it != it + 1, "!= returned false negative"); + ASSERT(!(it != it), "!= returned false positive"); + + ASSERT(*it == *it, "wrong result with operator*"); + + RandomIt it1 = it; + ASSERT(it1 == it, "iterator is not copy constructible"); + RandomIt it2 = RandomIt(it); + ASSERT(it2 == it, "iterator is not move constructible"); + + ++it1; + ASSERT(it1 == it + 1, "wrong result with prefix operator++"); + + using std::swap; + swap(it1, it2); + ASSERT((it1 == it) && (it2 == it + 1), "iterator is not swappable"); + + it2 = it; + ASSERT(it2 == it, "iterator is not copy assignable"); + + ++it2; + it2 = RandomIt(it); + ASSERT(it2 == it, "iterator is not move assignable"); + + it1 = it; + ASSERT((it1++ == it) && (it1 == it + 1), "wrong result with postfix operator++"); + + it1 = it + 1; + ASSERT(--it1 == it, "wrong result with prefix operator--"); + + it1 = it + 1; + ASSERT((it1-- == it + 1) && (it1 == it), "wrong result with postfix operator--"); + + it1 += 1; + ASSERT(it1 == it + 1, "wrong result with operator+="); + + it1 -= 1; + ASSERT(it1 == it, "wrong result with operator-="); + + ASSERT(1 + it == it + 1, "n + iterator != iterator + n"); + + ASSERT((it + 1) - 1 == it, "wrong result with operator-(difference_type)"); + + ASSERT((it + 1) - it == 1, "wrong result with iterator subtraction"); + + ASSERT(it[1] == *(it + 1), "wrong result with operator[]"); + + ASSERT(it < it + 1, "operator< returned false negative"); + ASSERT(!(it < it), "operator< returned false positive"); + + ASSERT(it + 1 > it, "operator> returned false negative"); + ASSERT(!(it > it), "operator> returned false positive"); + + ASSERT(it <= it + 1, "operator<= returned false negative"); + ASSERT(it <= it, "operator<= returned false negative"); + ASSERT(!(it + 1 <= it), "operator<= returned false positive"); + + ASSERT(1 + it >= it, "operator>= returned false negative"); + ASSERT( it >= it, "operator>= returned false negative"); + ASSERT(!(it >= it + 1), "operator>= returned false positive"); +} + +struct test_counting_iterator { + template + void operator()( std::vector& in, IntType begin, IntType end, const T& value) { + ASSERT((0 <= begin) && (begin <= end) && (end <= IntType(in.size())), + "incorrect test_counting_iterator 'begin' and/or 'end' argument values"); + + auto b = tbb::counting_iterator(begin); + auto e = tbb::counting_iterator(end); + + //checks in using + std::for_each(b, e, [&in, &value](IntType i) { in[i] = value; }); + + auto res = std::all_of(in.begin(), in.begin() + begin, [&value](const T& a) {return a!=value;}); + ASSERT(res, "wrong result with counting_iterator in vector's begin portion"); + + res = std::all_of(in.begin() + begin, in.begin() + end, [&value](const T& a) {return a==value;}); + ASSERT(res, "wrong result with counting_iterator in vector's main portion"); + + res = std::all_of(in.begin() + end, in.end(), [&value](const T& a) {return a!=value;}); + ASSERT(res, "wrong result with counting_iterator in vector's end portion"); + + //explicit checks of the counting iterator specific + ASSERT(b[0]==begin, "wrong result with operator[] for an iterator"); + ASSERT(*(b + 1) == begin+1, "wrong result with operator+ for an iterator"); + ASSERT(*(b+=1) == begin+1, "wrong result with operator+= for an iterator"); + } +}; + +struct test_zip_iterator { + template + void operator()(std::vector& in1, std::vector& in2) { + auto b = tbb::make_zip_iterator(in1.begin(), in2.begin()); + auto e = tbb::make_zip_iterator(in1.end(), in2.end()); + + //checks in using + std::for_each(b, e, [](const std::tuple& a) { std::get<0>(a) = 1, std::get<1>(a) = 1;}); + auto res = std::all_of(b, e, [](const std::tuple& a) {return std::get<0>(a) == 1 && std::get<1>(a) == 1;}); + ASSERT(res, "wrong result with zip_iterator iterator"); + + test_random_iterator(b); + } +}; + +template +void test_transform_effect(VecIt1 first1, VecIt1 last1, VecIt2 first2) { + auto triple = [](typename std::iterator_traits::value_type const& val) { + return typename std::iterator_traits::value_type (3 * val); + }; + + std::copy( + tbb::make_transform_iterator(first1, triple), + tbb::make_transform_iterator(last1, triple), + first2 + ); + + for (typename std::iterator_traits::difference_type i = 0; i < last1 - first1; ++i) + if ( first2[i] != (typename std::iterator_traits::value_type) triple(first1[i]) ) { + std::cout << "wrong effect with transform iterator" << std::endl; + exit(1); + } +} + +struct test_transform_iterator { + template + void operator()(std::vector& in1, std::vector& in2) { + std::iota(in1.begin(), in1.end(), T1(0)); + + test_transform_effect(in1.begin(), in1.end(), in2.begin()); + test_transform_effect(in1.cbegin(), in1.cend(), in2.begin()); + + auto new_transform_iterator = tbb::make_transform_iterator(in2.begin(), [](T2& x) { return x + 1; }); + test_random_iterator(new_transform_iterator); + } +}; + +template +void test_iterator_by_type(IntType n) { + + const IntType beg = 0; + const IntType end = n; + + std::vector in(n, T(0)); + std::vector in2(n, IntType(0)); + + test_counting_iterator()(in, beg, end, /*value*/ T(-1)); + test_counting_iterator()(in, beg+123, end-321, /*value*/ T(42)); + test_random_iterator(tbb::counting_iterator(beg)); + + test_zip_iterator()(in, in2); + test_transform_iterator()(in, in2); +} + +int TestMain() { + + const auto n1 = 1000; + const auto n2 = 100000; + + test_iterator_by_type(n1); + test_iterator_by_type(n2); + + test_iterator_by_type(n1); + test_iterator_by_type(n2); + + return Harness::Done; +} + +#else + +#include "harness.h" + +int TestMain () { + return Harness::Skipped; +} + +#endif /* __TBB_CPP11_PRESENT && __TBB_CPP11_DECLTYPE_PRESENT */ diff --git a/src/test/test_malloc_overload_disable.cpp b/src/test/test_malloc_overload_disable.cpp new file mode 100644 index 0000000000..18836989c4 --- /dev/null +++ b/src/test/test_malloc_overload_disable.cpp @@ -0,0 +1,73 @@ +/* + Copyright (c) 2018 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + +*/ + +#include "harness_allocator_overload.h" +#include "harness.h" + +// Disabling malloc proxy via env variable is available only on Windows for now +#if MALLOC_WINDOWS_OVERLOAD_ENABLED + +#define TEST_SYSTEM_COMMAND "test_malloc_overload_disable.exe" + +#include "tbb/tbbmalloc_proxy.h" +#include "../tbb/tbb_environment.h" + +const size_t SmallObjectSize = 16; +const size_t LargeObjectSize = 2*8*1024; +const size_t HugeObjectSize = 2*1024*1024; + +void CheckWindowsProxyDisablingViaMemSize( size_t ObjectSize ) { + void* ptr = malloc(ObjectSize); + /* + * If msize returns 0 - tbbmalloc doesn't contain this object in it`s memory + * Also msize check that proxy lib is linked + */ + ASSERT(!__TBB_malloc_safer_msize(ptr,NULL), "Malloc replacement is not deactivated"); + free(ptr); + +} + +int TestMain() { + if (!tbb::internal::GetBoolEnvironmentVariable("TBB_MALLOC_DISABLE_REPLACEMENT")) + { + Harness::SetEnv("TBB_MALLOC_DISABLE_REPLACEMENT","1"); + if ((system(TEST_SYSTEM_COMMAND)) != 0) { + REPORT("Test error: unable to run the command: %s", TEST_SYSTEM_COMMAND); + exit(-1); + } + // We must execute exit(0) to avoid duplicate "Done" printing. + exit(0); + } + else + { + // Check SMALL objects replacement disable + CheckWindowsProxyDisablingViaMemSize(SmallObjectSize); + // Check LARGE objects replacement disable + CheckWindowsProxyDisablingViaMemSize(LargeObjectSize); + // Check HUGE objects replacement disable + CheckWindowsProxyDisablingViaMemSize(HugeObjectSize); + } + return Harness::Done; +} +#else // MALLOC_WINDOWS_OVERLOAD_ENABLED +int TestMain() { + return Harness::Skipped; +} +#endif // MALLOC_WINDOWS_OVERLOAD_ENABLED diff --git a/src/test/test_task.cpp b/src/test/test_task.cpp index d643662e86..66823cf40c 100644 --- a/src/test/test_task.cpp +++ b/src/test/test_task.cpp @@ -793,6 +793,532 @@ void TestWaitableTask() { tbb::task::destroy(wt); } +#if __TBB_PREVIEW_CRITICAL_TASKS +#include +#include +#include +#include "tbb/parallel_for.h" + +namespace CriticalTaskSupport { + +using tbb::task; +task* g_root_task = NULL; + +// markers to capture execution profile (declaration order is important) +enum task_marker_t { + no_task, regular_task, isolated_regular_task, + outer_critical_task, nested_critical_task, critical_from_isolated_task, bypassed_critical_task +}; +enum bypassed_critical_task_stage_t { not_bypassed, bypassed, executed }; + +typedef std::vector< std::vector > task_map_t; +task_map_t g_execution_profile; + +const int g_per_thread_regular_tasks_num = 5; +const int g_isolated_regular_task_num = 3; +tbb::atomic g_is_critical_task_submitted; +size_t g_bypassed_critical_task_index = size_t(-1); +task* g_bypassed_task_pointer = NULL; +int g_bypassed_task_creator = -1; +tbb::atomic g_bypassed_critical_task_stage; +tbb::task_arena g_arena; +Harness::SpinBarrier g_spin_barrier; + +struct parallel_for_body { + parallel_for_body(task_marker_t task_marker, bool submit_critical = false) + : my_task_marker(task_marker), my_submit_critical(submit_critical) {} + void operator()( int i ) const; +private: + task_marker_t my_task_marker; + bool my_submit_critical; +}; + +struct IsolatedFunctor { + void operator()() const { + parallel_for_body body(isolated_regular_task, /*submit_critical=*/ true); + tbb::parallel_for( 0, g_isolated_regular_task_num, body, tbb::simple_partitioner() ); + } +}; + +struct CriticalTaskBody : public task { + CriticalTaskBody(task_marker_t task_marker) : my_task_mark(task_marker) {} + task* execute() __TBB_override { + task* ret_task = NULL; + task* nested_task = NULL; + int thread_idx = tbb::this_task_arena::current_thread_index(); + g_execution_profile[thread_idx].push_back(my_task_mark); + switch( my_task_mark ) { + case outer_critical_task: + g_spin_barrier.wait(); // allow each thread to take its own critical task + // prefill queue with critical tasks + nested_task = new( task::allocate_additional_child_of(*g_root_task) ) + CriticalTaskBody(nested_critical_task); + enqueue( *nested_task, tbb::priority_t(tbb::internal::priority_critical) ); + if( not_bypassed == + g_bypassed_critical_task_stage.compare_and_swap(bypassed, not_bypassed) ) { + + // first, should process all the work from isolated region + tbb::this_task_arena::isolate( IsolatedFunctor() ); + + CriticalTaskBody* bypassed_task = + new( task::allocate_additional_child_of(*g_root_task) ) + CriticalTaskBody(bypassed_critical_task); + g_bypassed_task_pointer = bypassed_task; + g_bypassed_critical_task_index = g_execution_profile[thread_idx].size() + 1; + g_bypassed_task_creator = thread_idx; + tbb::internal::make_critical(*bypassed_task); + ret_task = bypassed_task; + } + g_spin_barrier.wait(); // allow thread to execute isolated region + break; + case nested_critical_task: + // wait until bypassed critical task has been executed + g_spin_barrier.wait(); + break; + case bypassed_critical_task: + ASSERT( bypassed == g_bypassed_critical_task_stage, "Unexpected bypassed critical task" ); + g_bypassed_critical_task_stage = executed; + ASSERT( thread_idx == g_bypassed_task_creator, + "Bypassed critical task is not being executed by the thread that bypassed it." ); + ASSERT( g_bypassed_task_pointer == this, "This is not bypassed task." ); + ASSERT( g_bypassed_critical_task_index == g_execution_profile[thread_idx].size(), + "Bypassed critical task was not selected as the next task." ); + break; + case critical_from_isolated_task: + break; + default: + ASSERT( false, "Incorrect critical task id." ); + } + return ret_task; + } +private: + task_marker_t my_task_mark; +}; + +void parallel_for_body::operator()( int i ) const { + int thread_idx = tbb::this_task_arena::current_thread_index(); + g_execution_profile[thread_idx].push_back(my_task_marker); + if( my_submit_critical && i == 0 ) { + task* isolated_task = new( task::allocate_additional_child_of(*g_root_task) ) + CriticalTaskBody(critical_from_isolated_task); + task::enqueue( *isolated_task, tbb::priority_t(tbb::internal::priority_critical) ); + } +} + +struct TaskBody: public task { + TaskBody() {} + TaskBody(task_marker_t /*mark*/) {} + task* execute() __TBB_override { + int thread_idx = tbb::this_task_arena::current_thread_index(); + g_execution_profile[thread_idx].push_back(regular_task); + if( !g_is_critical_task_submitted ) { + g_spin_barrier.wait(); // allow each thread to take its own task. + // prefill task pools with regular tasks + int half = g_per_thread_regular_tasks_num / 2; + for( int i = 0; i < half; ++i ) { + task& t = *new( task::allocate_additional_child_of(*g_root_task) ) + TaskBody; + spawn(t); + } + { + // prefill with critical tasks + task& t = *new( task::allocate_additional_child_of(*g_root_task) ) + CriticalTaskBody(outer_critical_task); + tbb::internal::make_critical(t); + tbb::task::spawn(t); + } + // prefill task pools with regular tasks + for( int i = half; i < g_per_thread_regular_tasks_num; ++i ) { + task& t = *new( task::allocate_additional_child_of(*g_root_task) ) + TaskBody; + spawn(t); + } + g_is_critical_task_submitted.store(true); + g_spin_barrier.wait(); + } + return NULL; + } +}; + +template +struct WorkCreator { + WorkCreator(task*& root_task, size_t num_tasks, size_t num_critical_tasks = 0, + tbb::task_group_context* ctx = NULL) + : my_root_task(root_task), my_num_tasks(num_tasks), my_num_critical_tasks(num_critical_tasks), + my_context(ctx) {} + void operator()() const { + ASSERT( my_root_task == NULL, "Incorrect test set up." ); + task* root_task = NULL; + if( my_context ) + root_task = new( task::allocate_root(*my_context) ) TaskType(regular_task); + else + root_task = new( task::allocate_root() ) TaskType(regular_task); + root_task->increment_ref_count(); + for( size_t i = 0; i < my_num_tasks; ++i ) { + task& t = *new( task::allocate_additional_child_of(*root_task) ) TaskType(regular_task); + submit_task(t); + } + for( size_t i = 0; i < my_num_critical_tasks; ++i ) { + task& t = *new( task::allocate_additional_child_of(*root_task) ) + TaskType( outer_critical_task ); + tbb::task::enqueue( t, tbb::priority_t(tbb::internal::priority_critical) ); + } + my_root_task = root_task; + } +private: + task*& my_root_task; + size_t my_num_tasks; + size_t my_num_critical_tasks; + tbb::task_group_context* my_context; +}; + +struct WorkAwaiter { + WorkAwaiter(task*& root_task) : my_root_task(root_task) {} + void operator()() const { + while( !my_root_task ) __TBB_Yield(); // waiting on a tree construction + my_root_task->wait_for_all(); + task::destroy(*my_root_task); + my_root_task = NULL; + } +private: + task*& my_root_task; +}; + +void TestSchedulerTaskSelectionWhenSpawn() { + REMARK( "\tPreferring critical tasks among spawned\n" ); + typedef std::multimap state_machine_t; + typedef state_machine_t::iterator states_it; + task_marker_t from_to_pairs[] = { + // from regular + regular_task, regular_task, + regular_task, outer_critical_task, + // from outermost critical + outer_critical_task, isolated_regular_task, + outer_critical_task, critical_from_isolated_task, + outer_critical_task, nested_critical_task, + // from isolated regular + isolated_regular_task, isolated_regular_task, + isolated_regular_task, critical_from_isolated_task, + isolated_regular_task, bypassed_critical_task, + // from critical that was enqueued from isolated region + critical_from_isolated_task, isolated_regular_task, + critical_from_isolated_task, nested_critical_task, + critical_from_isolated_task, regular_task, + critical_from_isolated_task, bypassed_critical_task, + // from bypassed critical + bypassed_critical_task, nested_critical_task, + bypassed_critical_task, critical_from_isolated_task, + // from nested critical + nested_critical_task, critical_from_isolated_task, + nested_critical_task, regular_task + }; + + state_machine_t allowed_transitions; + for( size_t i = 0; i < sizeof(from_to_pairs) / sizeof(from_to_pairs[0]); i += 2 ) + allowed_transitions.insert( std::make_pair( from_to_pairs[i], from_to_pairs[i+1] ) ); + + for( int num_threads = MinThread; num_threads <= MaxThread; ++num_threads ) { + for( int repeat = 0; repeat < 10; ++repeat ) { + // test initialization + g_bypassed_critical_task_stage = not_bypassed; + g_is_critical_task_submitted = false; + g_bypassed_critical_task_index = size_t(-1); + g_bypassed_task_creator = -1; + g_bypassed_task_pointer = NULL; + g_execution_profile.resize(num_threads); + g_spin_barrier.initialize(num_threads); + g_arena.initialize(num_threads); + + // test execution + g_arena.execute( + WorkCreator(g_root_task, /*num_tasks=*/size_t(num_threads)) ); + g_arena.execute( WorkAwaiter(g_root_task) ); + + // checking how execution went + int critical_task_count = 0; + for( int thread = 0; thread < num_threads; ++thread ) { + bool started_critical_region = false; + bool pass_through_critical_region = false; + size_t thread_task_num = g_execution_profile[thread].size(); + for( size_t task_index = 0; task_index < thread_task_num; ++task_index ) { + const task_marker_t& executed_task = g_execution_profile[thread][task_index]; + + if( pass_through_critical_region ) { + ASSERT( executed_task < outer_critical_task, + "Thread did not process all the critical work at once." ); + } else if( isolated_regular_task <= executed_task && + executed_task <= bypassed_critical_task) { + started_critical_region = true; + if( isolated_regular_task < executed_task ) + ++critical_task_count; + if( bypassed_critical_task == executed_task ) { + size_t expected_bypass_task_min_index = + /* number of regular task before critical region */1 + + /* number of outermost critical tasks before isolated region */ 1 + + g_isolated_regular_task_num; + size_t expected_bypass_task_max_index = expected_bypass_task_min_index + + /* number of critical tasks inside isolated region */ 1; + ASSERT( expected_bypass_task_min_index <= task_index && + task_index <= expected_bypass_task_max_index, + "Bypassed critical task has been executed in wrong order" ); + } + } else if( started_critical_region ) { + pass_through_critical_region = true; + started_critical_region = false; + } + + if( thread_task_num - 1 == task_index ) + continue; // no transition check for the last executed task + const task_marker_t& next_task = g_execution_profile[thread][task_index + 1]; + std::pair range = + allowed_transitions.equal_range( executed_task ); + bool is_choosen_task_allowed = false; + for (states_it it = range.first; it != range.second; ++it) { + is_choosen_task_allowed |= next_task == it->second; + } + ASSERT( is_choosen_task_allowed, "Thread chose incorrect task for execution." ); + } + } + ASSERT( critical_task_count == 2 * num_threads + 2, "Wrong number of critical tasks" ); + ASSERT( g_bypassed_critical_task_stage == executed, "Was bypassed critical task executed?" ); + + // test deinitialization + g_execution_profile.clear(); + g_arena.terminate(); + } + } +} + +struct TaskTypeExecutionMarker : public task { + TaskTypeExecutionMarker( task_marker_t mark ) : my_mark( mark ) {} + task* execute() __TBB_override { + g_execution_profile[tbb::this_task_arena::current_thread_index()].push_back( my_mark ); + return NULL; + } +private: + task_marker_t my_mark; +}; + +struct RegularTaskMarkChecker { + bool operator()(const task_marker_t& m) { return regular_task == m; } +}; + +void TestSchedulerTaskSelectionWhenEnqueue() { + REMARK( "\tPreferring critical tasks among enqueued\n" ); + g_execution_profile.clear(); + // creating two profiles because of enforced concurrency + g_execution_profile.resize(2); + g_root_task = NULL; + unsigned task_num = 99; + unsigned num_critical_tasks = 1; + g_arena.initialize( /*num_threads=*/1, /*reserved_for_masters=*/0 ); + g_arena.enqueue( + WorkCreator( + g_root_task, task_num, num_critical_tasks) + ); + WorkAwaiter awaiter(g_root_task); awaiter(); // waiting outside arena + g_arena.terminate(); + + unsigned idx = !g_execution_profile[1].empty(); + ASSERT( g_execution_profile[!idx].empty(), "" ); + + ASSERT( g_execution_profile[idx].size() == task_num + num_critical_tasks, + "Incorrect number of tasks executed" ); + ASSERT( g_execution_profile[idx][0] == outer_critical_task, + "Critical task was executed in wrong order." ); + bool all_regular = true; + for( std::vector::const_iterator it = g_execution_profile[idx].begin() + 1; + it != g_execution_profile[idx].end(); ++it ) + all_regular &= regular_task == *it; + ASSERT( all_regular, "Critical task was executed in wrong order." ); +} + +enum ways_to_cancel_t { + by_explicit_call = 0, + by_exception, + no_cancellation +}; + +tbb::atomic g_num_executed_from_cancelled_context; +tbb::atomic g_num_executed_from_working_context; +int g_cancelling_task_id = -1; + +#if _MSC_VER && !__INTEL_COMPILER +#pragma warning (push) +#pragma warning (disable: 4127) /* suppress conditional expression is constant */ +#endif + +template +struct ATask : public task { + ATask( task_marker_t /*mark*/ ) : my_cancellation_method( no_cancellation ) {} + ATask( ways_to_cancel_t cancellation_method ) : my_cancellation_method( cancellation_method ) {} + task* execute() __TBB_override { + while( ! g_is_critical_task_submitted ) __TBB_Yield(); + // scheduler should take critical task as the next task for execution. + bypassed_critical_task_stage_t previous_critical_task_stage = + g_bypassed_critical_task_stage.compare_and_swap(bypassed, not_bypassed); + while( + cancelled_group // Only tasks from cancelled group wait + && !this->is_cancelled() // for their group to be cancelled + && !tbb::internal::is_critical(*this) // allowing thread that took critical task + && bypassed == previous_critical_task_stage // to proceed and cancel the whole group. + ) __TBB_Yield(); + if( cancelled_group ) + ++g_num_executed_from_cancelled_context; + else + ++g_num_executed_from_working_context; + switch( my_cancellation_method ) { + case by_explicit_call: + g_cancelling_task_id = int(g_num_executed_from_cancelled_context); + self().cancel_group_execution(); + break; + case by_exception: + g_cancelling_task_id = int(g_num_executed_from_cancelled_context); + throw std::runtime_error("Exception data"); + break; + case no_cancellation: break; + default: + ASSERT( false, "Should not be here!" ); + break; + } + return NULL; + } +private: + ways_to_cancel_t my_cancellation_method; +}; + +#if _MSC_VER && !__INTEL_COMPILER +#pragma warning (pop) +#endif + +template +struct SubmitTaskFunctor { + SubmitTaskFunctor( task& t ) : my_task( t ) {} + void operator()() const { + submit_task(my_task); + } +private: + task& my_task; +}; + +void TestCancellation(bool cancel_by_exception) { + g_is_critical_task_submitted = false; + g_bypassed_critical_task_stage = not_bypassed; + tbb::task_group_context context_to_leave_working; + tbb::task_group_context context_to_cancel; + task* root_task_of_to_be_cancelled_context = NULL; + task* root_task_of_working_to_completion_context = NULL; + size_t task_num = 64; + size_t task_num_for_cancelled_context = 2 * MaxThread; + g_num_executed_from_cancelled_context = g_num_executed_from_working_context = 0; + g_cancelling_task_id = -1; + g_arena.initialize( MaxThread ); // leaving one slot to be occupied by master to submit the work + g_arena.execute( + WorkCreator, task::spawn> + (root_task_of_to_be_cancelled_context, task_num_for_cancelled_context, + /*num_critical_tasks=*/0, &context_to_cancel) + ); + g_arena.execute( + WorkCreator, task::spawn> + (root_task_of_working_to_completion_context, task_num, /*num_critical_tasks=*/1, + &context_to_leave_working) + ); + ways_to_cancel_t cancellation_method = ways_to_cancel_t( cancel_by_exception ); + task& terminating_task = *new( task::allocate_additional_child_of(*root_task_of_to_be_cancelled_context) ) + ATask( cancellation_method ); + tbb::internal::make_critical( terminating_task ); // stop the work as soon as possible! + g_arena.enqueue( SubmitTaskFunctor(terminating_task), + tbb::priority_t(tbb::internal::priority_critical) ); + g_is_critical_task_submitted = true; + try { + g_arena.execute( WorkAwaiter(root_task_of_to_be_cancelled_context) ); + } catch( const std::runtime_error& e ) { + ASSERT( cancel_by_exception, "Exception was not expected!" ); + ASSERT( std::string(e.what()) == "Exception data", "Unexpected exception data!" ); + } catch( const tbb::captured_exception& e ) { + ASSERT( cancel_by_exception, "Exception was not expected!" ); + ASSERT( std::string(e.what()) == "Exception data", "Unexpected exception data!" ); + } catch( ... ) { + ASSERT( false, "Failed to catch specific exception" ); + } + g_arena.execute( WorkAwaiter(root_task_of_working_to_completion_context) ); + g_arena.terminate(); + + if( !cancel_by_exception ) { + ASSERT( context_to_cancel.is_group_execution_cancelled(), "Execution must be cancelled" ); + } + ASSERT( !context_to_leave_working.is_group_execution_cancelled(), + "Execution must NOT be cancelled" ); + + ASSERT( g_num_executed_from_working_context == task_num + /*one critical*/1, + "Incorrect number of tasks executed!" ); + ASSERT( g_num_executed_from_cancelled_context < task_num_for_cancelled_context, + "Number of executed tasks from the cancelled context should be less than submitted!" ); + ASSERT( 0 < g_cancelling_task_id && g_cancelling_task_id < MaxThread + 1, + "Critical task was executed in wrong order." ); +} + +void TestCancellationSupport(bool cancel_by_exception) { + const char* test_type[] = { "by explicit call to cancel", "by throwing an exception" }; + REMARK( "\tCancellation support %s\n", test_type[!!cancel_by_exception] ); + TestCancellation( cancel_by_exception ); +} + +namespace NestedArenaCase { + +static const size_t g_num_critical_tasks = 10; +static const size_t g_num_critical_nested = 5; + +struct CriticalTask : public task { + CriticalTask(task_marker_t /*mark*/) {} + task* execute() __TBB_override { + ++g_num_executed_from_working_context; + task* nested_root = NULL; + if( !g_is_critical_task_submitted ) { + g_is_critical_task_submitted = true; + g_arena.execute( + WorkCreator(nested_root, /*num_tasks=*/size_t(0), + g_num_critical_nested) ); + g_arena.execute( WorkAwaiter(nested_root) ); + } + return NULL; + } +}; + +void TestInNestedArena(tbb::task_arena& outer_arena) { + g_root_task = NULL; + g_is_critical_task_submitted = false; + g_num_executed_from_working_context = 0; + g_arena.initialize( 1 ); + outer_arena.execute( + WorkCreator( + g_root_task, /*num_tasks=*/size_t(0), g_num_critical_tasks) ); + outer_arena.execute( WorkAwaiter(g_root_task) ); + ASSERT( g_num_executed_from_working_context == g_num_critical_tasks + g_num_critical_nested, + "Mismatch in number of critical tasks executed in nested and outer arenas." ); + g_arena.terminate(); +} + +void test() { + REMARK( "\tWork in nested arenas\n" ); + TestInNestedArena( g_arena ); + + tbb::task_arena a( 1 ); + TestInNestedArena( a ); +} +} // namespace NestedArenaCase + +void test() { + REMARK("Testing support for critical tasks\n"); + TestSchedulerTaskSelectionWhenSpawn(); + TestSchedulerTaskSelectionWhenEnqueue(); + TestCancellationSupport(/*cancel_by_exception=*/false); + TestCancellationSupport(/*cancel_by_exception=*/true); + NestedArenaCase::test(); +} +} // namespace CriticalTaskSupport +#endif /* __TBB_PREVIEW_CRITICAL_TASKS */ + int TestMain () { #if TBB_USE_EXCEPTIONS TestUnconstructibleTask<1>(); @@ -816,5 +1342,8 @@ int TestMain () { TestMastersIsolation( p ); } TestWaitableTask(); +#if __TBB_PREVIEW_CRITICAL_TASKS + CriticalTaskSupport::test(); +#endif return Harness::Done; } diff --git a/src/test/test_tbb_version.cpp b/src/test/test_tbb_version.cpp index da9efd7a25..e6230cbc3b 100644 --- a/src/test/test_tbb_version.cpp +++ b/src/test/test_tbb_version.cpp @@ -229,7 +229,7 @@ int main(int argc, char *argv[] ) { void initialize_strings_vector(std::vector * vector) { vector->push_back(string_pair("TBB: VERSION\t\t2019.0", required)); // check TBB_VERSION - vector->push_back(string_pair("TBB: INTERFACE VERSION\t11002", required)); // check TBB_INTERFACE_VERSION + vector->push_back(string_pair("TBB: INTERFACE VERSION\t11003", required)); // check TBB_INTERFACE_VERSION vector->push_back(string_pair("TBB: BUILD_DATE", required)); vector->push_back(string_pair("TBB: BUILD_HOST", required)); vector->push_back(string_pair("TBB: BUILD_OS", required));