I am attempting to find a way to pass a unique array of floats to each thread in a multithread function without having to create a ttree and saving it to file (in the final implementation that will be impractical). I have been looking into using the TProcessExecutor to enable the multithreaded work within Root, however I have yet to find a method that works for passing an array of numbers to it. My vision is to have 32+ threads each working on a separate array of numbers and returning a single float to the initial process. Any ideas or advice of where to go digging would be greatly appreciated!
Hi @inneedofhelp ,
and welcome to the ROOT forum!
Note that for multi-threading (rather than multi-processing) you want TThreadExecutor (rather than TProcessExecutor).
Without any information on the actual usecase, it would seem that the Foreach
or Map
method is what you are looking for:
#include <ROOT/TThreadExecutor.hxx>
#include <iostream>
int main() {
ROOT::TThreadExecutor t;
std::vector<std::vector<int>> vectors{{}, {1}, {1, 2}, {1, 2, 3}};
t.Foreach([](const std::vector<int> &v) { std::cout << "I got size " << v.size() << '\n'; }, vectors);
}
Cheers,
Enrico
Hi Enrico,
I just wanted to say quickly that this was exactly what I was looking for, and was easily adaptable to my use case! Thank you for very much for your help.
1 Like
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.