Sorry for the confusion. What I need is for all OpenMP threads to *not* stay on one core. I *would* rather each OpenMP thread to run on a separate core. Is it my example code? My gut reaction is no because I can manipulate (somewhat) the cores the threads are assigned by adding -bysocket -bind-to-socket to mpirun.
On Thu, Jul 29, 2010 at 10:08 AM, Terry Dontje <terry.don...@oracle.com>wrote: > Ralph Castain wrote: > > > On Jul 29, 2010, at 5:09 AM, Terry Dontje wrote: > > Ralph Castain wrote: > > How are you running it when the threads are all on one core? > > If you are specifying --bind-to-core, then of course all the threads will be > on one core since we bind the process (not the thread). If you are specifying > -mca mpi_paffinity_alone 1, then the same behavior results. > > Generally, if you want to bind threads, the only way to do it is with a rank > file. We -might- figure out a way to provide an interface for thread-level > binding, but I'm not sure about that right now. As things stand, OMPI has no > visibility into the fact that your app spawned threads. > > > > > Huh??? That's not completely correct. If you have a multiple socket > machine you could to -bind-to-socket -bysocket and spread the processes that > way. Also couldn't you use the -cpus-per-proc with -bind-to-core to get a > process to bind to a non-socket amount of cpus? > > > Yes, you could do bind-to-socket, though that still constrains the threads > to only that one socket. What was asked about here was the ability to > bind-to-core at the thread level, and that is something OMPI doesn't > support. > > Sorry I did not get that constraint. So to be clear what is being asked > is to have the ability to bind a processes threads to specific cores. If so > then to the letter of what that means I agree you cannot do that. > > However, what may be the next best thing is to specify binding of a process > to a group of resources. That's essentially what my suggestion above is > doing. > > I do agree with Ralph that once you start overloading the socket with more > threads then it can handle problems will ensue. > > --td > > > > This is all documented in the mpirun manpage. > > That being said, I also am confused, like Ralph, as to why no options is > causing your code bind. Maybe add a --report-bindings to your mpirun line > to see what OMPI thinks it is doing in this regard? > > > This is a good suggestion - I'm beginning to believe that the binding is > happening in the user's app and not OMPI. > > > > --td > > --td > > On Jul 28, 2010, at 5:47 PM, David Akin wrote: > > > > All, > I'm trying to get the OpenMP portion of the code below to run > multicore on a couple of 8 core nodes. > > Good news: multiple threads are being spawned on each node in the run. > Bad news: each of the threads only runs on a single core, leaving 7 > cores basically idle. > Sorta good news: if I provide a rank file I get the threads running on > different cores within each node (PITA. > > Here's the first lines of output. > > /usr/mpi/gcc/openmpi-1.4-qlc/bin/mpirun -host c005,c006 -np 2 -rf > rank.file -x OMP_NUM_THREADS=4 hybrid4.gcc > > Hello from thread 2 out of 4 from process 1 out of 2 on c006.local > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=2 > Hello from thread 3 out of 4 from process 1 out of 2 on c006.local > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=3 > Hello from thread 1 out of 4 from process 1 out of 2 on c006.local > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=1 > Hello from thread 1 out of 4 from process 0 out of 2 on c005.local > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=1 > Hello from thread 3 out of 4 from process 0 out of 2 on c005.local > Hello from thread 2 out of 4 from process 0 out of 2 on c005.local > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=3 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=2 > Hello from thread 0 out of 4 from process 0 out of 2 on c005.local > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=0 > Hello from thread 0 out of 4 from process 1 out of 2 on c006.local > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=0 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=3 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=2 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=0 > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=3 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=3 > another parallel region: name:c005.local MPI_RANK_ID=0 OMP_THREAD_ID=2 > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=0 > another parallel region: name:c006.local MPI_RANK_ID=1 OMP_THREAD_ID=1 > . > . > . > > Here's the simple code: > #include <stdio.h> > #include "mpi.h" > #include <omp.h> > > int main(int argc, char *argv[]) { > int numprocs, rank, namelen; > char processor_name[MPI_MAX_PROCESSOR_NAME]; > int iam = 0, np = 1; > char name[MPI_MAX_PROCESSOR_NAME]; /* MPI_MAX_PROCESSOR_NAME == > 128 */ > int O_ID; /* OpenMP thread ID > */ > int M_ID; /* MPI rank ID > */ > int rtn_val; > > MPI_Init(&argc, &argv); > MPI_Comm_size(MPI_COMM_WORLD, &numprocs); > MPI_Comm_rank(MPI_COMM_WORLD, &rank); > MPI_Get_processor_name(processor_name, &namelen); > > #pragma omp parallel default(shared) private(iam, np,O_ID) > { > np = omp_get_num_threads(); > iam = omp_get_thread_num(); > printf("Hello from thread %d out of %d from process %d out of %d on %s\n", > iam, np, rank, numprocs, processor_name); > int i=0; > int j=0; > double counter=0; > for(i =0;i<99999999;i++) > { > O_ID = omp_get_thread_num(); /* get OpenMP > thread ID */ > MPI_Get_processor_name(name,&namelen); > rtn_val = MPI_Comm_rank(MPI_COMM_WORLD,&M_ID); > printf("another parallel region: name:%s > MPI_RANK_ID=%d OMP_THREAD_ID=%d\n", name,M_ID,O_ID); > for(j = 0;j<999999999;j++) > { > counter=counter+i; > } > } > > } > > MPI_Finalize(); > > } > _______________________________________________ > users mailing > listusers@open-mpi.orghttp://www.open-mpi.org/mailman/listinfo.cgi/users > > _______________________________________________ > users mailing > listusers@open-mpi.orghttp://www.open-mpi.org/mailman/listinfo.cgi/users > > > > -- > <Mail Attachment.gif> > Terry D. Dontje | Principal Software Engineer > Developer Tools Engineering | +1.650.633.7054 > Oracle * - Performance Technologies* > 95 Network Drive, Burlington, MA 01803 > Email terry.don...@oracle.com > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > > > ------------------------------ > > _______________________________________________ > users mailing > listusers@open-mpi.orghttp://www.open-mpi.org/mailman/listinfo.cgi/users > > > > -- > [image: Oracle] > > Terry D. Dontje | Principal Software Engineer > Developer Tools Engineering | +1.650.633.7054 > Oracle * - Performance Technologies* > 95 Network Drive, Burlington, MA 01803 > Email terry.don...@oracle.com > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users