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

Reply via email to