From 9b7374b8216a0860fc0606e2db910a76cc729b20 Mon Sep 17 00:00:00 2001 From: Shankar Easwaran Date: Mon, 16 Mar 2015 21:27:32 +0000 Subject: [PATCH] [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 --- lld/include/lld/Core/Parallel.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lld/include/lld/Core/Parallel.h b/lld/include/lld/Core/Parallel.h index 62da40c..65176ac 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 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 -- 2.7.4