c++ - Localidades en paralelismo
parallel-processing hpx (1)
Nuevo en el paralelismo y aprendiendo las cuerdas de HPX con C ++. Estoy viendo un ejemplo específico de hello-palabra que imprimirá hello world
en cada subproceso del sistema operativo en cada localidad, algunos resultados se verían así:
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
Mi pregunta es, cuando el resultado del programa en la localidad x , ¿qué significa exactamente localidad? Entiendo el hilo del sistema operativo, pero no estoy muy seguro de qué significa el programa por qué localidad.
Ejemplo de algún código dentro de HPX main
Esto no es necesariamente requerido por mi pregunta, pero sí incluye múltiples llamadas para encontrar localidades relacionadas con el tema.
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();
}
Según lo que entiendo de su documentación, puede tratar Locality como la cantidad de procesos que ejecuta la aplicación.
digamos que 2 servidores ejecutan su programa, el primero ejecutará la localidad 0, y la segunda localidad 1.
De esta forma, puede saber qué proceso, que ejecuta el mismo código, es decir el servidor (localidad 0) y cuál es el cliente (localidad 1).
Además, cada proceso puede ejecutar múltiples hilos, que es visible como el número de os_threads.
sigue ese ejemplo: http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/examples/hello_world.html
y estas opciones de línea de comando: http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/getting_started/commandline.html
Esta es la explicación de cómo usar múltiples localidades: http://stellar.cct.lsu.edu/files/hpx_0.8.1/docs/hpx/tutorial/getting_started/unix_pbs.html
Creo que la mejor manera de entenderlo es jugar con los valores de --hpx: node y --hpx: hilos.
Además, creo que la documentación de openmpi es un poco mejor para entender los términos ...
Aunque no estoy seguro de haber ayudado, espero haberlo hecho.