Hi,
I'm trying to learn how HPX works and whether it is applicable to my
needs. Basically, what I'm trying to do is to parallelize parts of my
code that are currently running sequentially, within a number of OS
threads. I've written the following simple code to see how HPX can be
used to achieve what I want:
#include <unistd.h>
#include <iostream>
#include <thread>
#include <vector>
#include <iterator>
#include <hpx/hpx_init.hpp>
#include <hpx/parallel/execution_policy.hpp>
#include <hpx/parallel/algorithms/for_each.hpp>
unsigned int values[1000] = {};
void process(unsigned int& value)
{
// Some useful work is performed here
sleep(1000);
}
void my_thread()
{
// Assume this thread is getting data
// from some kind of blocking IO.
// I want to process this data in multiple
// threads.
hpx::parallel::for_each_n(hpx::parallel::par,
std::begin(values), 1000, &process);
}
int hpx_main(int argc, char* argv[])
{
std::thread th(&my_thread);
th.join();
return hpx::finalize();
}
int main(int argc, char *argv[])
{
std::vector< char* > args;
for (int i = 0; i < argc; ++i)
args.push_back(argv[i]);
// Use all hardware threads
args.push_back(const_cast< char* >("--hpx:threads"));
args.push_back(const_cast< char* >("all"));
return hpx::init(args.size(), args.data());
}
My expectation of this code is that hpx::parallel::for_each_n would
offload some iterations to the threads HPX spawns in its thread pool,
and the rest is done in the my_thread thread. I would expect all
iterations to be done in the my_thread thread if all HPX threads are
busy doing something else, but in this example there's no other work to
do, so this should not happen.
However, that is exactly what I'm observing. The process function is
only called in one thread - my_thread. There are multiple HPX threads
started, and they are doing something (i.e. all but one CPU logical
cores are heavilly loaded), but they are not calling process.
So my questions are:
1. Is what I'm trying to do implementable with HPX?
2. Am I doing something wrong in the above code?
3. What are HPX threads doing while they apparently are not doing any
useful work? Is it normal for them to load the CPU for no apparent reason?
I'm using HPX 0.9.11 with Boost 1.60 on Kubuntu 15.10 x86_64 (gcc 5.2).
I'm running the test app with no command line arguments and no ini files.
Thanks.
_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users