[Core] Add parallel_for_each
authorShankar Easwaran <shankare@codeaurora.org>
Mon, 16 Mar 2015 21:27:32 +0000 (21:27 +0000)
committerShankar Easwaran <shankare@codeaurora.org>
Mon, 16 Mar 2015 21:27:32 +0000 (21:27 +0000)
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

index 62da40c..65176ac 100644 (file)
@@ -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