From: James Dinan (dinan_at_cse.ohio-state.edu)
Date: Tue May 05 2009 - 09:26:02 PDT
Hi,
Does anyone know whether the proposed UPC teams/thread groups extensions
are available in Berkeley UPC?
Also, I had a thought wrt how to use groups to enhance locality. I'm
not sure if this has already been suggested, but here goes:
The proposed extension contains a UPC_TEAM_ALL that contains all
threads. I was thinking the runtime system could also provide something
like UPC_TEAM_LOCAL that allows the programmer to determine which UPC
threads are on the local SMP node in a cluster (this might need to be
more general to handle a variety of architectures but hear me out).
In order to make better/frequent use of this, we might want more
convenient wrappers to map between a team and UPC_TEAM_ALL:
int upc_team_global_id(upc_team_t *team, int local_id) {
int trans_id;
upc_group_translate_threads(upc_group_from_team(team),
upc_group_from_threads(UPC_TEAM_ALL), &local_id, &trans_id, 1);
return trans_id;
}
This would be a non-collective call that maps the local id of a team
member to their thread id in UPC_TEAM_ALL.
int upc_team_local_id(upc_team_t *team, int global_id);
This is also non-collective and tells us the local id of thread
global_id within the team. If the thread is not in the team we get
UPC_THREAD_UNDEFINED.
Using this we could write something like:
int upc_islocal(shared void *ptr) {
if (upc_team_local_id(UPC_TEAM_LOCAL, upc_threadof(ptr)) !=
UPC_THREAD_UNDEFINED)
return 1;
else
return 0;
}
One quick example of where we could use upc_islocal(), would be to
determine when element-wise access is ok and when we should do a bulk
transfer via upc_memget().
Regards,
~Jim.