diff options
| author | Shankar Easwaran <shankare@codeaurora.org> | 2015-03-16 21:27:32 +0000 |
|---|---|---|
| committer | Shankar Easwaran <shankare@codeaurora.org> | 2015-03-16 21:27:32 +0000 |
| commit | 9b7374b8216a0860fc0606e2db910a76cc729b20 (patch) | |
| tree | 471c14b7eb0a6d155ee824cb1066426ee0866cac | |
| parent | 7401b1e78007f6ce14dbb9f087e07025e0a9d140 (diff) | |
| download | bcm5719-llvm-9b7374b8216a0860fc0606e2db910a76cc729b20.tar.gz bcm5719-llvm-9b7374b8216a0860fc0606e2db910a76cc729b20.zip | |
[Core] Add parallel_for_each
This adds a parallel_for_each similar to functionality in MSVC concurrency
library.
This was very patiently reviewed by Rui and credits go to him for this patch.
Differential Revision: http://reviews.llvm.org/D8348
llvm-svn: 232419
| -rw-r--r-- | lld/include/lld/Core/Parallel.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lld/include/lld/Core/Parallel.h b/lld/include/lld/Core/Parallel.h index 62da40c9ba8..65176ac2b04 100644 --- a/lld/include/lld/Core/Parallel.h +++ b/lld/include/lld/Core/Parallel.h @@ -295,7 +295,12 @@ void parallel_for_each(Iterator begin, Iterator end, Func func) { #else template <class Iterator, class Func> void parallel_for_each(Iterator begin, Iterator end, Func func) { - // TODO: Make this parallel. + TaskGroup tg; + ptrdiff_t taskSize = 1024; + while (taskSize <= std::distance(begin, end)) { + tg.spawn([=, &func] { std::for_each(begin, begin + taskSize, func); }); + begin += taskSize; + } std::for_each(begin, end, func); } #endif |

