On Sat, Mar 19, 2016 at 5:39 PM, Andrey Semashev
<[email protected]> wrote:
> 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.

Ping?
_______________________________________________
hpx-users mailing list
[email protected]
https://mail.cct.lsu.edu/mailman/listinfo/hpx-users

Reply via email to