MPIEXEC and Intel MPI library.

Anton Starikov A.Starikov at utwente.nl
Thu Apr 28 17:13:23 EDT 2005


I've checked. It works.

Anton.

Pete Wyckoff wrote:
> A.Starikov at utwente.nl wrote on Thu, 28 Apr 2005 21:07 +0200:
> 
>>Instead of giving
>>
>>cmd = init
>>pmi_version = 1
>>pmi_subversion = 1
>>
>>Intel MPI reports
>>
>>cmd = init
>>pmi_version = 1.1
>>
>>and nothing more.
>>I just check, if there is only two keys, I check if second key actually 
>>consists of two keys. If so - I separate this string and emulate 3rd key 
>>which should be here.
> 
> 
> Thanks for the explanation.  I wrote it a bit more verbosely to explain
> to future coders what's going on.  It works against stock mpich2 still.
> Would you have a chance to test it against your intel version before I
> check it in?
> 
> 		-- Pete
> 
> 
> ------------------------------------------------------------------------
> 
> diff -u -p -r1.5 pmi.c
> --- pmi.c	14 Mar 2005 15:52:19 -0000	1.5
> +++ pmi.c	28 Apr 2005 20:04:36 -0000
> @@ -222,23 +222,51 @@ accept_pmi_conn(void)
>      if (strcmp(kv->val[0], "init"))
>  	error("%s: expecting cmd=init, got cmd=%s", __func__,
>  	  kv->val[0]);
> -    if (kv->num != 3)
> -	error("%s: in cmd=init, expecting 3 word total, got %d", __func__,
> -	  kv->num);
> -    if (strcmp(kv->key[1], "pmi_version"))
> -	error("%s: cmd=init, no \"pmi_version\" key", __func__);
> -    pmi_version = strtoul(kv->val[1], &cq, 10);
> -    if (cq == kv->val[1])
> -	error("%s: cmd=init, invalid value to pmi_version \"%s\"",
> -	  __func__, kv->val[1]);
> -    if (strcmp(kv->key[2], "pmi_subversion"))
> -	error("%s: cmd=init, no \"pmi_subversion\" key", __func__);
> -    pmi_subversion = strtoul(kv->val[2], &cq, 10);
> -    if (cq == kv->val[2])
> -	error("%s: cmd=init, invalid value to pmi_subversion \"%s\"",
> -	  __func__, kv->val[2]);
> -    debug(1, "%s: got request: cmd=init pmi_version=%d pmi_subversion=%d",
> -      __func__, pmi_version, pmi_subversion);
> +    if (kv->num == 3) {
> +	/*
> +	 * Normal modern mpich2 version.
> +	 */
> +	if (strcmp(kv->key[1], "pmi_version"))
> +	    error("%s: cmd=init, no \"pmi_version\" key", __func__);
> +	pmi_version = strtoul(kv->val[1], &cq, 10);
> +	if (cq == kv->val[1])
> +	    error("%s: cmd=init, invalid value to pmi_version \"%s\"",
> +	      __func__, kv->val[1]);
> +	if (strcmp(kv->key[2], "pmi_subversion"))
> +	    error("%s: cmd=init, no \"pmi_subversion\" key", __func__);
> +	pmi_subversion = strtoul(kv->val[2], &cq, 10);
> +	if (cq == kv->val[2])
> +	    error("%s: cmd=init, invalid value to pmi_subversion \"%s\"",
> +	      __func__, kv->val[2]);
> +	debug(1, "%s: got request: cmd=init pmi_version=%d pmi_subversion=%d",
> +	  __func__, pmi_version, pmi_subversion);
> +    } else if (kv->num == 2) {
> +	/*
> +	 * Special hack for intel version of mpich2 that says
> +	 *   cmd=init pmi_version=1.1
> +	 * instead of the above.
> +	 */
> +	char *cp;
> +	if (strcmp(kv->key[1], "pmi_version"))
> +	    error("%s: cmd=init, 2 keyvals, no \"pmi_version\" key", __func__);
> +	cp = strchr(kv->val[1], '.');
> +	if (!cp)
> +	    error("%s: cmd=init, 2 keyvals, no '.' in \"pmi_version\" val",
> +	      __func__);
> +	*cp = '\0';
> +	pmi_version = strtoul(kv->val[1], &cq, 10);
> +	if (cq == kv->val[1])
> +	    error("%s: cmd=init, 2 keyvals, invalid pmi_version \"%s\"",
> +	      __func__, kv->val[1]);
> +	pmi_subversion = strtoul(cp+1, &cq, 10);
> +	if (cq == cp+1)
> +	    error("%s: cmd=init, 2 keyvals, invalid pmi_subversion \"%s\"",
> +	      __func__, cp+1);
> +	debug(1, "%s: got request: cmd=init pmi_version=%d.%d",
> +	  __func__, pmi_version, pmi_subversion);
> +    } else
> +	error("%s: in cmd=init, expecting 2 or 3 keyvals total, got %d",
> +	  __func__, kv->num);
>  
>      /* response: cmd=response_to_init rc=0 if okay */
>      growstr_zero(g);



More information about the mpiexec mailing list