[libcxx-commits] [PATCH] D151717: [libc++][PSTL] Add a GCD backend
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jul 10 09:03:19 PDT 2023
ldionne added inline comments.
================
Comment at: libcxx/include/__algorithm/pstl_backends/cpu_backends/libdispatch.h:188
+ auto __partitions = __libdispatch::__partition_chunks(__first, __last);
+ auto __values = std::__make_uninitialized_buffer<_Value[]>(
+ nothrow, __partitions.__chunk_count_, [](_Value* __ptr, size_t __count) { std::destroy_n(__ptr, __count); });
----------------
ldionne wrote:
> Future optimization: We should allocate only one temporary value per worker thread, not one per chunk. Then we should pad the storage to make sure they all fall on different cache lines to avoid false sharing.
>
> Can you add a TODO comment mentioning that?
Until we re-introduce `__uninitialized_buffer`, we can do this instead:
```
// TODO: Use __uninitialized_buffer
auto __destroy = [=](_Value* __ptr){
std::destroy_n(__ptr, __partitions.__chunk_count_);
std::allocator<_Value>().deallocate(__ptr, __partitions.__chunk_count_);
};
unique_ptr<_Value, decltype(__destroy)> __values(std::allocator<_Value>().allocate(__partitions.__chunk_count_), __destroy);
// use __dispatch_apply(...)
auto __tmp = std::transform_reduce(__values, __values + __partitions.__chunk_count_, __init, __transform, __reduction);
return __tmp;
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D151717/new/
https://reviews.llvm.org/D151717
More information about the libcxx-commits
mailing list