[mpich-devel] helpful preprocessor check for CPU_ZERO and CPU_SET

William Gropp wgropp at illinois.edu
Mon Dec 31 14:12:42 CST 2012


For many cases like this, the best solution is either

Never use any macro that starts with __ (these should be reserved "for the system")

If you must, it needs to be defined early, including *before* any configure tests on capabilities of the headers or the compiler, since these macros (e.g., __USE_GNU etc.) *change* the language that is implemented.  It is a serious error to define this within any header file, other than the configuration file (mpichconf.h in our case).  

Adding it to any other header file should always be considered a mistake.  

Bill

William Gropp
Director, Parallel Computing Institute
Deputy Director for Research
Institute for Advanced Computing Applications and Technologies
Paul and Cynthia Saylor Professor of Computer Science
University of Illinois Urbana-Champaign



On Dec 31, 2012, at 12:54 PM, Jeff Hammond wrote:

> Having been frustrated in a related development effort because I was
> unaware that sched.h was previously and indirectly included without
> the __USE_GNU macro active, thereby preventing me from using CPU_ZERO
> and CPU_SET, I suggest the inclusion of the following preprocessor
> macro in MPICH so that it is plainly obvious should this occur in the
> future due to the prior inclusion of sched.h before the following
> code, which is actually quite far down in the source.
> 
> I recognize that this is currently not a problem nor is the code below
> even active right now, but (1) should it ever be active and (2) some
> developer includes sched.h without __USE_GNU prior to line 1050 in
> this file (there are ~10 MPICH internal headers that could cause this
> right now), there will be a problem that is only detected when e.g.
> cpi is linked, which is later than one would otherwise prefer.
> 
> Best,
> 
> Jeff
> 
> $ svn diff pm/util/process.c
> Index: pm/util/process.c
> ===================================================================
> --- pm/util/process.c	(revision 10808)
> +++ pm/util/process.c	(working copy)
> @@ -1031,6 +1031,11 @@
> #define __USE_GNU
> #endif
> #include <sched.h>
> +
> +#if !defined(CPU_ZERO) || !defined(CPU_SET)
> +#error CPU_ZERO and/or CPU_SET were not defined because of prior
> inclusion of sched.h without __USE_GNU
> +#endif
> +
> /*
>  * Set the processor affinity for the calling process.  Normally, this will
>  * be used in the "postfork" routine provided by the process manager, before
> 
> -- 
> Jeff Hammond
> Argonne Leadership Computing Facility
> University of Chicago Computation Institute
> jhammond at alcf.anl.gov / (630) 252-5381
> http://www.linkedin.com/in/jeffhammond
> https://wiki.alcf.anl.gov/parts/index.php/User:Jhammond



More information about the devel mailing list