⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmitest.c

📁 fortran并行计算包
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* * *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include "pmi.h"const char * PMI_Err_str(int error){    static char str[100];    switch (error)    {    case PMI_SUCCESS:	return "PMI_SUCCESS";    case PMI_FAIL:	return "PMI_FAIL";    case PMI_ERR_INVALID_ARG:	return "PMI_ERR_INVALID_ARG";    case PMI_ERR_INVALID_KEY:	return "PMI_ERR_INVALID_KEY";    case PMI_ERR_INVALID_KEY_LENGTH:	return "PMI_ERR_INVALID_KEY_LENGTH";    case PMI_ERR_INVALID_VAL:	return "PMI_ERR_INVALID_VAL";    case PMI_ERR_INVALID_VAL_LENGTH:	return "PMI_ERR_INVALID_VAL_LENGTH";    case PMI_ERR_INVALID_LENGTH:	return "PMI_ERR_INVALID_LENGTH";    case PMI_ERR_INIT:	return "PMI_ERR_INIT";    case PMI_ERR_NOMEM:	return "PMI_ERR_NOMEM";    }    sprintf(str, "PMI_ERR_UNKNOWN: %d", error);    return str;}#define PRINT_ERROR(error, fcname) if (error != PMI_SUCCESS) printf("%s failed: %s\n", fcname, PMI_Err_str(error)); else printf("%s unexpectedly succeeded\n", fcname); fflush(stdout);int main( int argc, char * argv[] ){    int rc, spawned, size, rank, name_max, id_maxlen, key_maxlen, val_maxlen;    char *kvsname, *id, *domain_id, *key, *val;    rc = PMI_Init( &spawned );    if ( rc != PMI_SUCCESS )    {	printf( "PMI_Init failed with rc = %s\n", PMI_Err_str(rc) );	return -1 ;    }    else    {	printf( "PMI_Init returned spawned = %d\n", spawned );    }    rc = PMI_Get_size( &size );    if ( rc == PMI_SUCCESS )    {	rc = PMI_Get_rank( &rank );	if ( rc == PMI_SUCCESS ) 	    printf( "size = %d, rank = %d\n", size, rank );	else 	    printf( "PMI_Get_Rank failed with rc = %s\n", PMI_Err_str(rc) );    }    else 	printf( "PMI_Get_size failed with rc = %s\n", PMI_Err_str(rc) );    rc = PMI_KVS_Get_name_length_max( &name_max );    if ( rc != PMI_SUCCESS )    {	printf( "PMI_KVS_Get_name_length_max failed with rc = %s\n", PMI_Err_str(rc) );	return -1;    }    else	printf( "PMI_KVS_Get_name_length_max got %d\n", name_max );    kvsname = (char *) malloc( name_max );    rc = PMI_KVS_Get_my_name( kvsname, name_max );    if ( rc != PMI_SUCCESS )    {	printf( "PMI_KVS_Get_my_name failed with rc = %s\n", PMI_Err_str(rc) );	return -1;    }    else	printf( "PMI_KVS_Get_my_name got %s\n", kvsname );    rc = PMI_Get_id_length_max( &id_maxlen );    if ( rc != PMI_SUCCESS )    {	printf("PMI_Get_id_length_max failed with rc = %s\n", PMI_Err_str(rc) );	return -1;    }    else	printf("PMI_Get_id_length_max got %d\n", id_maxlen);    id = (char *) malloc( id_maxlen );    rc = PMI_Get_id( id, id_maxlen );    if ( rc != PMI_SUCCESS )    {	printf("PMI_Get_id failed with rc = %s\n", PMI_Err_str(rc));    }    else	printf( "PMI_Get_id got %s\n", id );    domain_id = (char *) malloc( id_maxlen );    rc = PMI_Get_kvs_domain_id( domain_id, id_maxlen );    if ( rc != PMI_SUCCESS )    {	printf("PMI_Get_kvs_domain_id failed with rc = %s\n", PMI_Err_str(rc));    }    else	printf( "PMI_Get_kvs_domain_id got %s\n", domain_id );    rc = PMI_KVS_Get_key_length_max( &key_maxlen );    if (rc != PMI_SUCCESS )    {	printf("PMI_KVS_Get_key_length_max failed with rc = %s\n", PMI_Err_str(rc));	return -1;    }    else	printf( "PMI_Get_key_maxlen got %d\n", key_maxlen );    key = (char *) malloc( key_maxlen );    rc = PMI_KVS_Get_value_length_max( &val_maxlen );    if (rc != PMI_SUCCESS)    {	printf("PMI_KVS_Get_value_length_max failed with rc = %s\n", PMI_Err_str(rc));	return -1;    }    else	printf( "PMI_Get_val_maxlen got %d\n", val_maxlen );    val = (char *) malloc( val_maxlen );    sprintf(key, "test_key_%d", rank);    sprintf(val, "test_value_%d", rank);        rc = PMI_KVS_Put( kvsname, key, val );    if (rc != PMI_SUCCESS)    {	printf("PMI_KVS_Put failed with rc = %s\n", PMI_Err_str(rc));    }    rc = PMI_KVS_Commit( kvsname );    if (rc != PMI_SUCCESS)    {	printf("PMI_KVS_Commit failed with rc = %s\n", PMI_Err_str(rc));    }    rc = PMI_Barrier();    if (rc != PMI_SUCCESS)    {	printf("PMI_Barrier failed with rc = %s\n", PMI_Err_str(rc));    }    sprintf(key, "test_key_%d", (rank + 1) % size);    rc = PMI_KVS_Get( kvsname, key, val, val_maxlen );    if (rc != PMI_SUCCESS)    {	printf("PMI_KVS_Get(%s) failed with rc = %s\n", key, PMI_Err_str(rc));    }    else	printf("PMI_KVS_Get(%s) returned %s\n", key, val);    /* Test awkward character string put and get */    if (rank == 0)    {	sprintf(key, "foo", rank);	sprintf(val, "foo=bar baz=bif name=\"Buzz Bee\" clink=~!@#$%^&*()_+`{}[]|\\;':<>,. clank=a b c");	rc = PMI_KVS_Put( kvsname, key, val );	if (rc != PMI_SUCCESS)	{	    printf("PMI_KVS_Put failed with rc = %s\n", PMI_Err_str(rc));	}	rc = PMI_KVS_Commit( kvsname );	if (rc != PMI_SUCCESS)	{	    printf("PMI_KVS_Commit failed with rc = %s\n", PMI_Err_str(rc));	}    }    rc = PMI_Barrier();    if (rc != PMI_SUCCESS)    {	printf("PMI_Barrier failed with rc = %s\n", PMI_Err_str(rc));    }    if (rank == size - 1)    {	sprintf(key, "foo");	rc = PMI_KVS_Get( kvsname, key, val, val_maxlen );	if (rc != PMI_SUCCESS)	{	    printf("PMI_KVS_Get(%s) failed with rc = %s\n", key, PMI_Err_str(rc));	}	else	    printf("PMI_KVS_Get(%s) returned %s\n", key, val);    }    if ( rank == (size - 1) )    {	key[0] = '\0';	val[0] = '\0';	rc = PMI_KVS_Iter_first(kvsname, key, key_maxlen, val, val_maxlen);	if (rc == PMI_SUCCESS)	{	    while (key[0] != '\0')	    {		printf("PMI_KVS_Iter got key=%s val=%s\n",key,val);		rc = PMI_KVS_Iter_next(kvsname, key, key_maxlen, val, val_maxlen);		if (rc != PMI_SUCCESS)		{		    printf("PMK_KVS_Iter_next failed with rc = %s\n", PMI_Err_str(rc));		    break;		}	    }	}	else	{	    printf("PMI_KVS_Iter_first failed with rc = %s\n", PMI_Err_str(rc));	}    }    /* error testing */    if (rank == 0)    {	printf("PMI error testing:\n");	strcpy(key, "test_key");	strcpy(val, "test_val");	rc = PMI_KVS_Put("baloney", key, val);	PRINT_ERROR(rc, "PMI_KVS_Put(baloney, key, val)");	rc = PMI_KVS_Put(NULL, key, val);	PRINT_ERROR(rc, "PMI_KVS_Put(NULL, key, val)");	rc = PMI_KVS_Put(kvsname, NULL, val);	PRINT_ERROR(rc, "PMI_KVS_Put(kvsname, NULL, val)");	rc = PMI_KVS_Put(kvsname, key, NULL);	PRINT_ERROR(rc, "PMI_KVS_Put(kvsname, key, NULL)");	rc = PMI_KVS_Get("baloney", key, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Get(baloney, key, val, val_maxlen)");	rc = PMI_KVS_Get(NULL, key, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Get(NULL, key, val, val_maxlen)");	rc = PMI_KVS_Get(kvsname, NULL, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Get(kvsname, NULL, val, val_maxlen)");	rc = PMI_KVS_Get(kvsname, key, NULL, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Get(kvsname, key, NULL, val_maxlen)");	rc = PMI_KVS_Get(kvsname, key, val, -1);	PRINT_ERROR(rc, "PMI_KVS_Get(kvsname, key, val, -1)");	rc = PMI_KVS_Commit(NULL);	PRINT_ERROR(rc, "PMI_KVS_Commit(NULL)");	rc = PMI_KVS_Commit("baloney");	PRINT_ERROR(rc, "PMI_KVS_Commit(baloney)");	rc = PMI_KVS_Get_my_name(NULL, name_max);	PRINT_ERROR(rc, "PMI_KVS_Get_my_name(NULL, name_max)");	rc = PMI_KVS_Get_my_name(kvsname, -1);	PRINT_ERROR(rc, "PMI_KVS_Get_my_name(kvsname, -1)");	rc = PMI_Get_id(NULL, id_maxlen);	PRINT_ERROR(rc, "PMI_Get_id(NULL, id_maxlen)");	rc = PMI_Get_id(id, -1);	PRINT_ERROR(rc, "PMI_Get_id(id, -1)");	rc = PMI_Get_kvs_domain_id(NULL, id_maxlen);	PRINT_ERROR(rc, "PMI_Get_domain_id(NULL, id_maxlen)");	rc = PMI_Get_kvs_domain_id(domain_id, -1);	PRINT_ERROR(rc, "PMI_Get_domain_id(domain_id, -1)");	rc = PMI_Init(NULL);	PRINT_ERROR(rc, "PMI_Init(NULL)");	rc = PMI_Get_rank(NULL);	PRINT_ERROR(rc, "PMI_Get_rank(NULL)");	rc = PMI_Get_size(NULL);	PRINT_ERROR(rc, "PMI_Get_size(NULL)");	rc = PMI_KVS_Get_name_length_max(NULL);	PRINT_ERROR(rc, "PMI_Get_name_length_max(NULL)");	rc = PMI_Get_id_length_max(NULL);	PRINT_ERROR(rc, "PMI_Get_id_length_max(NULL)");	rc = PMI_KVS_Get_key_length_max(NULL);	PRINT_ERROR(rc, "PMI_Get_key_length_max(NULL)");	rc = PMI_KVS_Get_value_length_max(NULL);	PRINT_ERROR(rc, "PMI_Get_value_length_max(NULL)");	rc = PMI_KVS_Iter_first("baloney", key, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(baloney, key, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_first(NULL, key, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(NULL, key, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_first(kvsname, NULL, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(kvsname, NULL, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_first(kvsname, key, -1, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(kvsname, key, -1, val, val_maxlen)");	rc = PMI_KVS_Iter_first(kvsname, key, key_maxlen, NULL, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(kvsname, key, key_maxlen, NULL, val_maxlen)");	rc = PMI_KVS_Iter_first(kvsname, key, key_maxlen, val, -1);	PRINT_ERROR(rc, "PMI_KVS_Iter_first(kvsname, key, key_maxlen, val, -1)");	rc = PMI_KVS_Iter_next("baloney", key, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(baloney, key, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_next(NULL, key, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(NULL, key, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_next(kvsname, NULL, key_maxlen, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(kvsname, NULL, key_maxlen, val, val_maxlen)");	rc = PMI_KVS_Iter_next(kvsname, key, -1, val, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(kvsname, key, -1, val, val_maxlen)");	rc = PMI_KVS_Iter_next(kvsname, key, key_maxlen, NULL, val_maxlen);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(kvsname, key, key_maxlen, NULL, val_maxlen)");	rc = PMI_KVS_Iter_next(kvsname, key, key_maxlen, val, -1);	PRINT_ERROR(rc, "PMI_KVS_Iter_next(kvsname, key, key_maxlen, val, -1)");    }        rc = PMI_Finalize( );    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -