并行主义的新手,并用C ++学习HPX的绳索。我正在查看一个特定的hello-word示例,它将在每个位置的每个OS线程上打印hello world
,某些输出看起来像:
hello world from OS-thread 1 on locality 0
hello world from OS-thread 1 on locality 1
hello world from OS-thread 0 on locality 0
hello world from OS-thread 0 on locality 1
我的问题是,当程序输出 on locality x 时,当地意味着什么?我理解OS-thread但是我不太确定程序是什么意味着哪个地方。
HPX main
内部的一些代码示例这不是我的问题所必需的,但它确实包括多次调用以查找与主题相关的地点。
int hpx_main()
{
{
// Get a list of all available localities.
std::vector<hpx::naming::id_type> localities =
hpx::find_all_localities();
// Reserve storage space for futures, one for each locality.
std::vector<hpx::lcos::future<void> > futures;
futures.reserve(localities.size());
BOOST_FOREACH(hpx::naming::id_type const& node, localities)
{
// Asynchronously start a new task. The task is encapsulated in a
// future, which we can query to determine if the task has
// completed.
typedef hello_world_foreman_action action_type;
futures.push_back(hpx::async<action_type>(node));
}
// The non-callback version of hpx::lcos::wait takes a single parameter,
// a future of vectors to wait on. hpx::lcos::wait only returns when
// all of the futures have finished.
hpx::lcos::wait(futures);
}
// Initiate shutdown of the runtime system.
return hpx::finalize();
}
答案 0 :(得分:4)
根据我从他们的文档中理解的内容 - 您可以将Locality视为执行应用程序的进程数 假设2个服务器执行你的程序,第一个执行地点0,第二个地点执行你的程序 这样你就可以知道哪个进程执行相同的代码,就是说服务器(locality 0),哪个是客户端(locality 1)。
此外,每个进程都可以运行多个线程,这可以作为os_threads的数量显示。
按照这个例子: http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/examples/hello_world.html
以及这些命令行选项:http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/getting_started/commandline.html
这是如何使用多个地区的说明: http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/getting_started/unix_pbs.html
我认为理解它的最好方法是使用--hpx:node和--hpx:threads的值。
此外 - 我认为openmpi文档对于理解术语有点好......
虽然不确定我有所帮助,但我希望我做到了。