-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix unordered and ordered containers ranges for empty containers #673
Conversation
REQUIRE_MESSAGE(r.begin() == r.end(), "Incorrect iterators on empty range"); | ||
REQUIRE_MESSAGE(r.begin() == cont.begin(), "Incorrect iterators on empty range"); | ||
|
||
Range r2(r, tbb::split{}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not stated if split ctor can be used for non-divisible range; however, the spec says about is_divisible
: "True if the range can be partitioned into two subranges.". I.e. range cannot be partitioned if false
. Does it mean that we cannot use splitting ctor to partition the empty range?
@kboyarinov please fix the test failures |
* Fixed incorrect definitions of assignment operators in associative containers. This fixes incorrect return types of assignment operators imported from base classes. Other than copy and move assignment operators, which are generated by the compiler even if imported with a using-declaration, the imported operators will be returning a reference to the base class instead of the derived class. Fixes #372. Signed-off-by: Andrey Semashev <andrey.semashev@gmail.com> Signed-off-by: Ilya Isaev <ilya.isaev@intel.com>
…memory. (#671) This uses the standard allocator for allocating and freeing memory with higher alignment requirements instead of the hand-rolled implementation. Signed-off-by: Andrey Semashev <andrey.semashev@gmail.com>
Signed-off-by: Kochin Ivan <kochin.ivan@intel.com>
* Add raii to aggregator to prevent stuck Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Add test Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Reuse tbb raii guard Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Add header Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * execute_and_wait lightweight task Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * remove unused headers Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * remove space Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * remove std::function Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * noexcept lightweight body Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * fix cmake Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * fix space Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * gcc error Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * declval gateway_type Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * new tests Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * template tests Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * macro TBB_USE_EXCEPTIONS Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Apply suggestions from code review Co-authored-by: Aleksei Fedotov <aleksei.fedotov@intel.com> Co-authored-by: Aleksei Fedotov <aleksei.fedotov@intel.com>
Signed-off-by: Serov, Vladimir <vladimir.serov@intel.com>
* Deallocate object with based on actual type Signed-off-by: Serov, Vladimir <vladimir.serov@intel.com>
* Fix limiter_node decrementer Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Fix align Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * add new variable for check unused decrements Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * remove iostream Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * remove unnesessary cast Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * align whitespaces Signed-off-by: Mishin, Ilya <ilya.mishin@intel.com> * Fix whitespace alignment Signed-off-by: Serov, Vladimir <vladimir.serov@intel.com> * Revert workaround for GCC Signed-off-by: Serov, Vladimir <vladimir.serov@intel.com> Co-authored-by: Serov, Vladimir <vladimir.serov@intel.com>
Exclude non-glibc linux systems along with android Fixes src/tbb/dynamic_link.cpp:417:29: error: use of undeclared identifier 'RTLD_DEEPBIND' | flags = flags | RTLD_DEEPBIND; | ^ Signed-off-by: Khem Raj <raj.khem@gmail.com>
* Update README.md Signed-off-by: Alexandra Epanchinzeva alexandra.epanchinzeva@intel.com * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md
Moving task_group_exptensions out of the preview - moved all but : - is_inside_task - scheduller bypass - replaced exceptions with asserts for undefined behavior - made some flags in the tests non-atomic for TSAN to raise a flag if implementation is incorrect Signed-off-by: Anton Potapov <anton.potapov@intel.com> Co-authored-by: Ilya Isaev <ilya.isaev@intel.com> Co-authored-by: Alex <alexei.katranov@intel.com>
* Added optimized x86 atomic_fence for gcc-compatible compilers. On x86 (32 and 64-bit) any lock-prefixed instruction provides sequential consistency guarantees for atomic operations and is more efficient than mfence. We are choosing a "lock not" on a dummy byte on the stack for the following reasons: - The "not" instruction does not affect flags or clobber any registers. The memory operand is presumably accessible through esp/rsp. - The dummy byte variable is at the top of the stack, which is likely hot in cache. - The dummy variable does not alias any other data on the stack, which means the "lock not" instruction won't introduce any false data dependencies with prior or following instructions. In order to avoid various sanitizers and valgrind complaining, we have to initialize the dummy variable to zero prior to the operation. Additionally, for memory orders weaker than seq_cst there is no need for any special instructions, and we only need a compiler fence. For the relaxed memory order we don't need even that. This optimization is only enabled for gcc up to version 11. In gcc 11 the compiler implements a similar optimization for std::atomic_thread_fence. Compilers compatible with gcc (namely, clang up to 13 and icc up to 2021.3.0, inclusively) identify themselves as gcc < 11 and also benefit from this optimization, as they otherwise generate mfence for std::atomic_thread_fence(std::memory_order_seq_cst). Signed-off-by: Andrey Semashev <andrey.semashev@gmail.com> * Removed explicit mfence in atomic_fence on Windows. The necessary instructions according to the memory order argument should already be generated by std::atomic_thread_fence. Signed-off-by: Andrey Semashev <andrey.semashev@gmail.com> * Removed memory order argument from atomic_fence. The code uses memory_order_seq_cst in all call sites of atomic_fence, so remove the argument and simplifiy the implementation a bit. Also, renamed the function to make the memory order it implements apparent. Signed-off-by: Andrey Semashev <andrey.semashev@gmail.com>
Class template inheritance doesn't work well with function-local types Move class definition to global scope Signed-off-by: Serov, Vladimir <vladimir.serov@intel.com>
Signed-off-by: Veprev, Alexey alexey.veprev@intel.com
Description
Fix for empty ordered and unordered containers range_type and const_range_type
Fixes #641
Type of change
Choose one or multiple, leave empty if none of the other choices apply
Add respective label(s) to PR if you have permissions
Tests
Documentation
Breaks backward compatibility
Notify the following users
List users with
@
to send notificationsOther information