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
