zturner requested changes to this revision.
zturner added inline comments.
This revision now requires changes to proceed.
================
Comment at:
source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp:530-560
+ struct loader {
+ DYLDRendezvous::iterator I;
+ ModuleSP m;
+ std::shared_future<void> f;
+ };
+ std::vector<loader> loaders(num_to_load);
+ llvm::ThreadPool load_pool(
----------------
I'm still unclear why we're still going down this route of adding a very
specialized instance of parallelism to this one place, that is probably going
to be less efficient than having a global thread pool (as now you will have to
spin up and destroy the entire thread pool every time you go to load shared
libraries).
So, rather than keep repeating the same thing over and over, I went and looked
into this a little bit. It turns out LLD has a large library of parallel
algorithms in `lld/Include/lld/Parallel.h`. There is almost nothing specific
to LLD in any of these algorithms however, and they should probably be moved to
llvm support. Upon doing so, you will be able to write this code as:
```
std::vector<ModuleSP> Modules(m_rendevous.size());
llvm::parallel_for_each(make_integer_range(0, m_rendevous.size()), [this,
&Modules](int I)
{
auto &R = m_rendevous[I];
Modules[I] = LoadModuleAtAddress(R.file_spec, R.link_addr, R.base_addr,
true);
});
for (const auto &M : Modules)
module_list.Append(M);
```
Please look into making this change.
Repository:
rL LLVM
https://reviews.llvm.org/D32597
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits