Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2005-12-08 17:33:26


On Nov 29, 2005, at 2:51 PM, Paul H. Hargrove wrote:

> The result is the following, which I've tried in limited testing:

Holy Crimminey, Batman -- this message slipped by me in my INBOX.

This is friggen' amazing.

Many thanks, Paul!

> enum {
> SCHED_SETAFFINITY_TAKES_2_ARGS,
> SCHED_SETAFFINITY_TAKES_3_ARGS_THIRD_IS_LONG,
> SCHED_SETAFFINITY_TAKES_3_ARGS_THIRD_IS_CPU_SET,
> SCHED_SETAFFINITY_UNKNOWN
> };
>
> /* We want to call by this prototype, even if it is not the real
> one */
> extern sched_setaffinity(int pid, unsigned int len, void *mask);
>
> int probe_setaffinity(void) {
> unsigned long mask[511];
> int rc;
>
> memset(mask, 0, sizeof(mask));
> mask[0] = 1;
> rc = sched_setaffinity(0, sizeof(mask), mask);
>
> if (rc >= 0) {
> /* Kernel truncates over-length masks -> successful call */
> return SCHED_SETAFFINITY_TAKES_3_ARGS_THIRD_IS_CPU_SET;
> } else if (errno == EINVAL) {
> /* Kernel returns EINVAL when len != sizeof(long) */
> return SCHED_SETAFFINITY_TAKES_3_ARGS_THIRD_IS_LONG;
> } else if (errno == EFAULT) {
> /* Kernel returns EFAULT having rejected len as an address */
> return SCHED_SETAFFINITY_TAKES_2_ARGS;
> }
> return SCHED_SETAFFINITY_UNKNOWN;
> };

--
{+} Jeff Squyres
{+} The Open MPI Project
{+} http://www.open-mpi.org/